summaryrefslogtreecommitdiffstats
path: root/integration
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@gmail.com>2022-05-30 13:30:57 +0200
committerJon Bratseth <bratseth@gmail.com>2022-05-30 13:30:57 +0200
commit96efafff86e7135478b40bcbfbdadbe48ffc4ee7 (patch)
tree60ed9c8793a4167027d2a67a17e0254c25b5e4b5 /integration
parentce25459c89b83e093b581cbd4564f88060352982 (diff)
Grammar fixes
Diffstat (limited to 'integration')
-rw-r--r--integration/intellij/src/main/bnf/ai/vespa/intellij/schema/parser/sd.bnf25
-rw-r--r--integration/intellij/src/main/java/ai/vespa/intellij/schema/SdUtil.java9
-rw-r--r--integration/intellij/src/main/java/ai/vespa/intellij/schema/psi/SdDeclarationType.java2
-rw-r--r--integration/intellij/src/main/java/ai/vespa/intellij/schema/psi/impl/SdNamedElementImpl.java7
4 files changed, 26 insertions, 17 deletions
diff --git a/integration/intellij/src/main/bnf/ai/vespa/intellij/schema/parser/sd.bnf b/integration/intellij/src/main/bnf/ai/vespa/intellij/schema/parser/sd.bnf
index efe790d78e7..d331acb04ef 100644
--- a/integration/intellij/src/main/bnf/ai/vespa/intellij/schema/parser/sd.bnf
+++ b/integration/intellij/src/main/bnf/ai/vespa/intellij/schema/parser/sd.bnf
@@ -129,7 +129,10 @@ UnaryOperator ::= '!' | '-'
RankFeatureExpr ::= RankFeature
// The rename function allows lists of identifiers as arguments
-RenameExpr ::= "rename" ClauseStart RankingExpression CommaSeparator ( Arguments | ArgumentDefinition ) CommaSeparator ( Arguments | ArgumentDefinition ) ClauseEnd
+RenameExpr ::= "rename" ClauseStart RankingExpression CommaSeparator
+ ( ArgumentDeclarations | ArgumentDeclaration ) CommaSeparator
+ ( ArgumentDeclarations | ArgumentDeclaration )
+ ClauseEnd
// Rough parsing but hard to do better due to greediness: If this is a lambda arg expressions must be identifiers
FunctionCallOrLambdaExpr ::= IdentifierVal ClauseStart RankingExpression ( CommaSeparator RankingExpression )* ClauseEnd ( '.' IdentifierVal )?
@@ -214,18 +217,14 @@ RankPropertiesBody ::= (RankPropertiesKey ':' RankPropertiesValue NL+ )+
RankPropertiesKey ::= (IdentifierWithDashVal | STRING_REG | '(' | ')' | '.' | COMMA | '$' | INTEGER_REG)+
RankPropertiesValue ::= AnyNumber | WORD_REG | DottedIdentifier | STRING_REG
-FunctionDefinition ::= (function | macro) inline? IdentifierVal Arguments
+FunctionDefinition ::= (function | macro) inline? IdentifierVal ArgumentDeclarations
BlockStart ExpressionDefinition BlockEnd
{ mixin="ai.vespa.intellij.schema.psi.impl.SdNamedElementImpl"
implements=["ai.vespa.intellij.schema.psi.SdFunctionDefinitionInterface" "ai.vespa.intellij.schema.psi.SdNamedElement"]
}
-// Not using ClauseEnd here to avoid consuming trailing NL's, which must be left to terminate single-line
-// rank feature lists in summary/match/rank-features
-Arguments ::= '()' | ( ClauseStart ArgumentDefinition (CommaSeparator ArgumentDefinition)* NL* ')' )
-
-// When used in function declarations this should really be IdentifierVal only
-ArgumentDefinition ::= IdentifierVal | INTEGER_REG | STRING_REG | STRING_REG_SINGLE_QUOTE
+ArgumentDeclarations ::= '()' | ( ClauseStart ArgumentDeclaration (CommaSeparator ArgumentDeclaration)* NL* ClauseEnd )
+ArgumentDeclaration ::= IdentifierVal
{ mixin="ai.vespa.intellij.schema.psi.impl.SdNamedElementImpl"
implements=["ai.vespa.intellij.schema.psi.SdDeclaration" "ai.vespa.intellij.schema.psi.SdNamedElement"]
}
@@ -242,7 +241,7 @@ InnerConstantDefinition ::= ( ("constant" ClauseStart IdentifierVal ClauseEnd )
(':')? ( TensorType | "double" )?
(':')? ( TensorValue | AnyNumber | (file ':' FilePath) | (uri ':' UriPath))
-RankFeature ::= ForEachFeature | ( IdentifierVal (Arguments)? ( '.' IdentifierVal )* )
+RankFeature ::= ForEachFeature | ( IdentifierVal (FeatureArguments)? ( '.' IdentifierVal )* )
{ mixin="ai.vespa.intellij.schema.psi.impl.SdNamedElementImpl"
implements=["ai.vespa.intellij.schema.psi.SdDeclaration" "ai.vespa.intellij.schema.psi.SdNamedElement"]
}
@@ -260,6 +259,14 @@ ForEachFeature ::= "foreach" ClauseStart
IdentifierVal // operation
ClauseEnd
+// Not using ClauseEnd here to avoid consuming trailing NL's, which must be left to terminate single-line
+// rank feature lists in summary/match/rank-features
+FeatureArguments ::= '()' | ( ClauseStart FeatureArgument (CommaSeparator FeatureArgument)* NL* ')' )
+FeatureArgument ::= DottedIdentifier | INTEGER_REG | STRING_REG | STRING_REG_SINGLE_QUOTE
+ { mixin="ai.vespa.intellij.schema.psi.impl.SdNamedElementImpl"
+ implements=["ai.vespa.intellij.schema.psi.SdDeclaration" "ai.vespa.intellij.schema.psi.SdNamedElement"]
+ }
+
//-------------------------
//---- Document rules -----
//-------------------------
diff --git a/integration/intellij/src/main/java/ai/vespa/intellij/schema/SdUtil.java b/integration/intellij/src/main/java/ai/vespa/intellij/schema/SdUtil.java
index b21790642cc..e8be94c848a 100644
--- a/integration/intellij/src/main/java/ai/vespa/intellij/schema/SdUtil.java
+++ b/integration/intellij/src/main/java/ai/vespa/intellij/schema/SdUtil.java
@@ -2,6 +2,7 @@
package ai.vespa.intellij.schema;
import ai.vespa.intellij.schema.model.RankProfile;
+import ai.vespa.intellij.schema.psi.SdArgumentDeclaration;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiElement;
@@ -12,7 +13,7 @@ import com.intellij.psi.search.FileTypeIndex;
import com.intellij.psi.search.GlobalSearchScope;
import com.intellij.psi.util.PsiTreeUtil;
import ai.vespa.intellij.schema.psi.SdAnnotationFieldDefinition;
-import ai.vespa.intellij.schema.psi.SdArgumentDefinition;
+import ai.vespa.intellij.schema.psi.SdArgumentDeclaration;
import ai.vespa.intellij.schema.psi.SdDeclaration;
import ai.vespa.intellij.schema.psi.SdDocumentAnnotationDefinition;
import ai.vespa.intellij.schema.psi.SdDocumentDefinition;
@@ -48,7 +49,7 @@ public class SdUtil {
String rankProfileName;
if (rankProfile != null) {
rankProfileName = rankProfile.getName();
- List<SdArgumentDefinition> args = function.getArguments().getArgumentDefinitionList();
+ List<SdArgumentDeclaration> args = function.getArgumentDeclarations().getArgumentDeclarationList();
StringBuilder text = new StringBuilder(rankProfileName + "." + function.getName() + "(");
for (int i = 0; i < args.size(); i++) {
text.append(args.get(i).getName());
@@ -114,7 +115,7 @@ public class SdUtil {
// Check if element is inside a function body
SdFunctionDefinition macroParent = PsiTreeUtil.getParentOfType(element, SdFunctionDefinition.class);
if (macroParent != null) {
- for (SdArgumentDefinition arg : PsiTreeUtil.findChildrenOfType(macroParent, SdArgumentDefinition.class)) {
+ for (SdArgumentDeclaration arg : PsiTreeUtil.findChildrenOfType(macroParent, SdArgumentDeclaration.class)) {
if (name.equals(arg.getName())) { // if the element was declared as an argument of the function
result.add(arg);
return result;
@@ -133,7 +134,7 @@ public class SdUtil {
}
for (PsiElement declaration : PsiTreeUtil.collectElements(file, psiElement ->
- psiElement instanceof SdDeclaration && !(psiElement instanceof SdArgumentDefinition))) {
+ psiElement instanceof SdDeclaration && !(psiElement instanceof SdArgumentDeclaration))) {
if (name.equals(((SdDeclaration) declaration).getName())) {
result.add((SdDeclaration) declaration);
break;
diff --git a/integration/intellij/src/main/java/ai/vespa/intellij/schema/psi/SdDeclarationType.java b/integration/intellij/src/main/java/ai/vespa/intellij/schema/psi/SdDeclarationType.java
index 6dabbc7a5fd..d534a9e4692 100644
--- a/integration/intellij/src/main/java/ai/vespa/intellij/schema/psi/SdDeclarationType.java
+++ b/integration/intellij/src/main/java/ai/vespa/intellij/schema/psi/SdDeclarationType.java
@@ -20,7 +20,7 @@ public enum SdDeclarationType {
DOCUMENT_SUMMARY("Document-Summary"),
RANK_PROFILE("Rank Profile"),
FUNCTION("Function"),
- FIUNCTION_ARGUMENT("Function argument"),
+ FUNCTION_ARGUMENT("Function argument"),
FEATURE("Feature (first use in file)");
private final String typeName;
diff --git a/integration/intellij/src/main/java/ai/vespa/intellij/schema/psi/impl/SdNamedElementImpl.java b/integration/intellij/src/main/java/ai/vespa/intellij/schema/psi/impl/SdNamedElementImpl.java
index 4d54eefee72..79c5835b5a3 100644
--- a/integration/intellij/src/main/java/ai/vespa/intellij/schema/psi/impl/SdNamedElementImpl.java
+++ b/integration/intellij/src/main/java/ai/vespa/intellij/schema/psi/impl/SdNamedElementImpl.java
@@ -1,6 +1,7 @@
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package ai.vespa.intellij.schema.psi.impl;
+import ai.vespa.intellij.schema.psi.SdArgumentDeclaration;
import com.intellij.extapi.psi.ASTWrapperPsiElement;
import com.intellij.icons.AllIcons;
import com.intellij.lang.ASTNode;
@@ -10,7 +11,7 @@ import com.intellij.psi.util.PsiTreeUtil;
import ai.vespa.intellij.schema.SdIcons;
import ai.vespa.intellij.schema.SdUtil;
import ai.vespa.intellij.schema.psi.SdAnnotationFieldDefinition;
-import ai.vespa.intellij.schema.psi.SdArgumentDefinition;
+import ai.vespa.intellij.schema.psi.SdArgumentDeclaration;
import ai.vespa.intellij.schema.psi.SdDeclarationType;
import ai.vespa.intellij.schema.psi.SdDocumentAnnotationDefinition;
import ai.vespa.intellij.schema.psi.SdDocumentDefinition;
@@ -77,8 +78,8 @@ public abstract class SdNamedElementImpl extends ASTWrapperPsiElement implements
return SdDeclarationType.RANK_PROFILE;
} else if (this instanceof SdFunctionDefinition) {
return SdDeclarationType.FUNCTION;
- } else if (this instanceof SdArgumentDefinition) {
- return SdDeclarationType.FIUNCTION_ARGUMENT;
+ } else if (this instanceof SdArgumentDeclaration) {
+ return SdDeclarationType.FUNCTION_ARGUMENT;
} else if (this instanceof SdDocumentDefinition) {
return SdDeclarationType.DOCUMENT;
} else if (this instanceof SdDocumentStructDefinition) {