diff options
author | Jon Bratseth <bratseth@gmail.com> | 2022-05-30 13:30:57 +0200 |
---|---|---|
committer | Jon Bratseth <bratseth@gmail.com> | 2022-05-30 13:30:57 +0200 |
commit | 96efafff86e7135478b40bcbfbdadbe48ffc4ee7 (patch) | |
tree | 60ed9c8793a4167027d2a67a17e0254c25b5e4b5 /integration/intellij/src | |
parent | ce25459c89b83e093b581cbd4564f88060352982 (diff) |
Grammar fixes
Diffstat (limited to 'integration/intellij/src')
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) { |