summaryrefslogtreecommitdiffstats
path: root/sd-plugin
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@gmail.com>2021-10-20 20:41:45 +0200
committerJon Bratseth <bratseth@gmail.com>2021-10-20 20:41:45 +0200
commit7231013715b350217e7d411595b11e5c20250dcc (patch)
tree27d0635c4617fa20042cc252d942f5158221774d /sd-plugin
parent7152e207aebb66e92c461256a437293482c24b13 (diff)
parentf97460875097a318d6f57450851b23a89f9ef809 (diff)
Merge branch 'master' into bratseth/add-missing-copyrights
Diffstat (limited to 'sd-plugin')
-rw-r--r--sd-plugin/README.md3
-rw-r--r--sd-plugin/src/main/java/org/intellij/sdk/language/SdBlock.java61
-rw-r--r--sd-plugin/src/main/java/org/intellij/sdk/language/SdChooseByNameContributor.java4
-rw-r--r--sd-plugin/src/main/java/org/intellij/sdk/language/SdCodeStyleSettings.java4
-rw-r--r--sd-plugin/src/main/java/org/intellij/sdk/language/SdCodeStyleSettingsProvider.java4
-rw-r--r--sd-plugin/src/main/java/org/intellij/sdk/language/SdCommenter.java4
-rw-r--r--sd-plugin/src/main/java/org/intellij/sdk/language/SdCompletionContributor.java4
-rw-r--r--sd-plugin/src/main/java/org/intellij/sdk/language/SdFileType.java4
-rw-r--r--sd-plugin/src/main/java/org/intellij/sdk/language/SdFormattingModelBuilder.java38
-rw-r--r--sd-plugin/src/main/java/org/intellij/sdk/language/SdIcons.java4
-rw-r--r--sd-plugin/src/main/java/org/intellij/sdk/language/SdLanguage.java4
-rw-r--r--sd-plugin/src/main/java/org/intellij/sdk/language/SdLanguageCodeStyleSettingsProvider.java4
-rw-r--r--sd-plugin/src/main/java/org/intellij/sdk/language/SdLexerAdapter.java4
-rw-r--r--sd-plugin/src/main/java/org/intellij/sdk/language/SdRefactoringSupportProvider.java4
-rw-r--r--sd-plugin/src/main/java/org/intellij/sdk/language/SdReference.java4
-rw-r--r--sd-plugin/src/main/java/org/intellij/sdk/language/SdSyntaxHighlighter.java7
-rw-r--r--sd-plugin/src/main/java/org/intellij/sdk/language/SdSyntaxHighlighterFactory.java4
-rw-r--r--sd-plugin/src/main/java/org/intellij/sdk/language/SdUtil.java42
-rw-r--r--sd-plugin/src/main/java/org/intellij/sdk/language/findUsages/SdDocumentSummaryGroupingRule.java4
-rw-r--r--sd-plugin/src/main/java/org/intellij/sdk/language/findUsages/SdDocumentSummaryGroupingRuleProvider.java4
-rw-r--r--sd-plugin/src/main/java/org/intellij/sdk/language/findUsages/SdFindUsagesHandler.java4
-rw-r--r--sd-plugin/src/main/java/org/intellij/sdk/language/findUsages/SdFindUsagesHandlerFactory.java4
-rw-r--r--sd-plugin/src/main/java/org/intellij/sdk/language/findUsages/SdFindUsagesProvider.java4
-rw-r--r--sd-plugin/src/main/java/org/intellij/sdk/language/findUsages/SdRankProfileGroupingRule.java4
-rw-r--r--sd-plugin/src/main/java/org/intellij/sdk/language/findUsages/SdRankProfileGroupingRuleProvider.java4
-rw-r--r--sd-plugin/src/main/java/org/intellij/sdk/language/findUsages/SdUsageGroup.java4
-rw-r--r--sd-plugin/src/main/java/org/intellij/sdk/language/hierarchy/SdCallHierarchyBrowser.java4
-rw-r--r--sd-plugin/src/main/java/org/intellij/sdk/language/hierarchy/SdCallHierarchyNodeDescriptor.java4
-rw-r--r--sd-plugin/src/main/java/org/intellij/sdk/language/hierarchy/SdCallHierarchyProvider.java5
-rw-r--r--sd-plugin/src/main/java/org/intellij/sdk/language/hierarchy/SdCallTreeStructure.java4
-rw-r--r--sd-plugin/src/main/java/org/intellij/sdk/language/hierarchy/SdCalleeTreeStructure.java4
-rw-r--r--sd-plugin/src/main/java/org/intellij/sdk/language/hierarchy/SdCallerTreeStructure.java4
-rw-r--r--sd-plugin/src/main/java/org/intellij/sdk/language/hierarchy/SdHierarchyUtil.java5
-rw-r--r--sd-plugin/src/main/java/org/intellij/sdk/language/parser/SdParserDefinition.java4
-rw-r--r--sd-plugin/src/main/java/org/intellij/sdk/language/parser/sd.bnf94
-rw-r--r--sd-plugin/src/main/java/org/intellij/sdk/language/psi/SdDeclaration.java4
-rw-r--r--sd-plugin/src/main/java/org/intellij/sdk/language/psi/SdDeclarationType.java6
-rw-r--r--sd-plugin/src/main/java/org/intellij/sdk/language/psi/SdElementDescriptionProvider.java7
-rw-r--r--sd-plugin/src/main/java/org/intellij/sdk/language/psi/SdElementFactory.java4
-rw-r--r--sd-plugin/src/main/java/org/intellij/sdk/language/psi/SdElementType.java4
-rw-r--r--sd-plugin/src/main/java/org/intellij/sdk/language/psi/SdFile.java4
-rw-r--r--sd-plugin/src/main/java/org/intellij/sdk/language/psi/SdIdentifier.java4
-rw-r--r--sd-plugin/src/main/java/org/intellij/sdk/language/psi/SdNamedElement.java5
-rw-r--r--sd-plugin/src/main/java/org/intellij/sdk/language/psi/SdTokenType.java4
-rw-r--r--sd-plugin/src/main/java/org/intellij/sdk/language/psi/impl/SdNamedElementImpl.java5
-rw-r--r--sd-plugin/src/main/java/org/intellij/sdk/language/psi/impl/SdPsiImplUtil.java29
-rw-r--r--sd-plugin/src/main/java/org/intellij/sdk/language/sd.flex35
-rw-r--r--sd-plugin/src/main/java/org/intellij/sdk/language/structure/SdStructureViewElement.java29
-rw-r--r--sd-plugin/src/main/java/org/intellij/sdk/language/structure/SdStructureViewFactory.java5
-rw-r--r--sd-plugin/src/main/java/org/intellij/sdk/language/structure/SdStructureViewModel.java3
-rw-r--r--sd-plugin/src/main/resources/META-INF/plugin.xml11
51 files changed, 315 insertions, 207 deletions
diff --git a/sd-plugin/README.md b/sd-plugin/README.md
index 3d25315e08c..c9cbaded66c 100644
--- a/sd-plugin/README.md
+++ b/sd-plugin/README.md
@@ -16,5 +16,6 @@ After cloning, you should:
Now you should have a "gen" folder next to the "java" folder, and it contains all the parser and lexer code.
-Improtant note! After any change in one of this 2 files (bnf, flex) you'll need to generate again. The proper way is to delete the "gen" folder and then do 1-2 again.
+Important note! After any change in one of this 2 files (bnf, flex) you'll need to generate again. The proper way is to delete the "gen" folder and then do 1-2 again.
+Now, you can run the gradle task "runIde", open a project with some sd file and see how the plugin works on it. \ No newline at end of file
diff --git a/sd-plugin/src/main/java/org/intellij/sdk/language/SdBlock.java b/sd-plugin/src/main/java/org/intellij/sdk/language/SdBlock.java
deleted file mode 100644
index 371ea6d882c..00000000000
--- a/sd-plugin/src/main/java/org/intellij/sdk/language/SdBlock.java
+++ /dev/null
@@ -1,61 +0,0 @@
-// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-package org.intellij.sdk.language;
-
-import com.intellij.formatting.Alignment;
-import com.intellij.formatting.Block;
-import com.intellij.formatting.Indent;
-import com.intellij.formatting.Spacing;
-import com.intellij.formatting.SpacingBuilder;
-import com.intellij.formatting.Wrap;
-import com.intellij.formatting.WrapType;
-import com.intellij.lang.ASTNode;
-import com.intellij.psi.TokenType;
-import com.intellij.psi.formatter.common.AbstractBlock;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
-
-import java.util.ArrayList;
-import java.util.List;
-
-public class SdBlock extends AbstractBlock {
-
- private final SpacingBuilder spacingBuilder;
-
- protected SdBlock(@NotNull ASTNode node, @Nullable Wrap wrap, @Nullable Alignment alignment,
- SpacingBuilder spacingBuilder) {
- super(node, wrap, alignment);
- this.spacingBuilder = spacingBuilder;
- }
-
- @Override
- protected List<Block> buildChildren() {
- List<Block> blocks = new ArrayList<>();
- ASTNode child = myNode.getFirstChildNode();
- while (child != null) {
- if (child.getElementType() != TokenType.WHITE_SPACE) {
- Block block = new SdBlock(child, Wrap.createWrap(WrapType.NONE, false), Alignment.createAlignment(),
- spacingBuilder);
- blocks.add(block);
- }
- child = child.getTreeNext();
- }
- return blocks;
- }
-
- @Override
- public Indent getIndent() {
- return Indent.getNoneIndent();
- }
-
- @Nullable
- @Override
- public Spacing getSpacing(@Nullable Block child1, @NotNull Block child2) {
- return spacingBuilder.getSpacing(this, child1, child2);
- }
-
- @Override
- public boolean isLeaf() {
- return myNode.getFirstChildNode() == null;
- }
-
-}
diff --git a/sd-plugin/src/main/java/org/intellij/sdk/language/SdChooseByNameContributor.java b/sd-plugin/src/main/java/org/intellij/sdk/language/SdChooseByNameContributor.java
index 37947a19ebe..f313bb2be59 100644
--- a/sd-plugin/src/main/java/org/intellij/sdk/language/SdChooseByNameContributor.java
+++ b/sd-plugin/src/main/java/org/intellij/sdk/language/SdChooseByNameContributor.java
@@ -17,6 +17,10 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
+/**
+ * This class is used for the extension (in plugin.xml) to enable "Go To Symbol" feature.
+ * @author shahariel
+ */
public class SdChooseByNameContributor implements ChooseByNameContributor {
@Override
diff --git a/sd-plugin/src/main/java/org/intellij/sdk/language/SdCodeStyleSettings.java b/sd-plugin/src/main/java/org/intellij/sdk/language/SdCodeStyleSettings.java
index 9f3d28f5dc5..89460099790 100644
--- a/sd-plugin/src/main/java/org/intellij/sdk/language/SdCodeStyleSettings.java
+++ b/sd-plugin/src/main/java/org/intellij/sdk/language/SdCodeStyleSettings.java
@@ -4,6 +4,10 @@ package org.intellij.sdk.language;
import com.intellij.psi.codeStyle.CodeStyleSettings;
import com.intellij.psi.codeStyle.CustomCodeStyleSettings;
+/**
+ * This class represent a code style settings, and creates an option page in settings/preferences.
+ * @author shahariel
+ */
public class SdCodeStyleSettings extends CustomCodeStyleSettings {
public SdCodeStyleSettings(CodeStyleSettings settings) {
diff --git a/sd-plugin/src/main/java/org/intellij/sdk/language/SdCodeStyleSettingsProvider.java b/sd-plugin/src/main/java/org/intellij/sdk/language/SdCodeStyleSettingsProvider.java
index 38b90fa2e77..3b8136f92b3 100644
--- a/sd-plugin/src/main/java/org/intellij/sdk/language/SdCodeStyleSettingsProvider.java
+++ b/sd-plugin/src/main/java/org/intellij/sdk/language/SdCodeStyleSettingsProvider.java
@@ -11,6 +11,10 @@ import com.intellij.psi.codeStyle.CustomCodeStyleSettings;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
+/**
+ * This class is used for the extension (in plugin.xml) to the class SdCodeStyleSettings.
+ * @author shahariel
+ */
public class SdCodeStyleSettingsProvider extends CodeStyleSettingsProvider {
@Override
diff --git a/sd-plugin/src/main/java/org/intellij/sdk/language/SdCommenter.java b/sd-plugin/src/main/java/org/intellij/sdk/language/SdCommenter.java
index b8ba47f0f14..5d9fbfaa07d 100644
--- a/sd-plugin/src/main/java/org/intellij/sdk/language/SdCommenter.java
+++ b/sd-plugin/src/main/java/org/intellij/sdk/language/SdCommenter.java
@@ -5,7 +5,9 @@ import com.intellij.lang.Commenter;
import org.jetbrains.annotations.Nullable;
/**
- * This class enables turning a line into a comment with "Code -> Comment with line comment"
+ * This class is used for the extension (in plugin.xml), to enable turning a line into a comment with
+ * "Code -> Comment with line comment".
+ * @author shahariel
*/
public class SdCommenter implements Commenter {
diff --git a/sd-plugin/src/main/java/org/intellij/sdk/language/SdCompletionContributor.java b/sd-plugin/src/main/java/org/intellij/sdk/language/SdCompletionContributor.java
index d963e8256e6..7cf517ba2e9 100644
--- a/sd-plugin/src/main/java/org/intellij/sdk/language/SdCompletionContributor.java
+++ b/sd-plugin/src/main/java/org/intellij/sdk/language/SdCompletionContributor.java
@@ -12,6 +12,10 @@ import com.intellij.util.ProcessingContext;
import org.intellij.sdk.language.psi.SdTypes;
import org.jetbrains.annotations.NotNull;
+/**
+ * This class is used for the extension (in plugin.xml) to enables Auto-Complete. Partially works for now.
+ * @author shahariel
+ */
public class SdCompletionContributor extends CompletionContributor {
diff --git a/sd-plugin/src/main/java/org/intellij/sdk/language/SdFileType.java b/sd-plugin/src/main/java/org/intellij/sdk/language/SdFileType.java
index c7334709e4c..0f6189abbe6 100644
--- a/sd-plugin/src/main/java/org/intellij/sdk/language/SdFileType.java
+++ b/sd-plugin/src/main/java/org/intellij/sdk/language/SdFileType.java
@@ -7,6 +7,10 @@ import org.jetbrains.annotations.Nullable;
import javax.swing.Icon;
+/**
+ * This class is used for the extension (in plugin.xml), to define SD as a file's type.
+ * @author shahariel
+ */
public class SdFileType extends LanguageFileType {
public static final SdFileType INSTANCE = new SdFileType();
diff --git a/sd-plugin/src/main/java/org/intellij/sdk/language/SdFormattingModelBuilder.java b/sd-plugin/src/main/java/org/intellij/sdk/language/SdFormattingModelBuilder.java
deleted file mode 100644
index ec045926223..00000000000
--- a/sd-plugin/src/main/java/org/intellij/sdk/language/SdFormattingModelBuilder.java
+++ /dev/null
@@ -1,38 +0,0 @@
-// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-package org.intellij.sdk.language;
-
-import com.intellij.formatting.Alignment;
-import com.intellij.formatting.FormattingContext;
-import com.intellij.formatting.FormattingModel;
-import com.intellij.formatting.FormattingModelBuilder;
-import com.intellij.formatting.FormattingModelProvider;
-import com.intellij.formatting.SpacingBuilder;
-import com.intellij.formatting.Wrap;
-import com.intellij.formatting.WrapType;
-import com.intellij.psi.codeStyle.CodeStyleSettings;
-import org.intellij.sdk.language.psi.SdTypes;
-import org.jetbrains.annotations.NotNull;
-
-public class SdFormattingModelBuilder implements FormattingModelBuilder {
-
- private static SpacingBuilder createSpaceBuilder(CodeStyleSettings settings) {
- return new SpacingBuilder(settings, SdLanguage.INSTANCE)
- .around(SdTypes.SYMBOL)
- .spaceIf(settings.getCommonSettings(SdLanguage.INSTANCE.getID()).SPACE_AFTER_COLON)
- .before(SdTypes.DOCUMENT_FIELD_DEFINITION)
- .none();
- }
-
- @Override
- public @NotNull FormattingModel createModel(@NotNull FormattingContext formattingContext) {
- final CodeStyleSettings codeStyleSettings = formattingContext.getCodeStyleSettings();
- return FormattingModelProvider
- .createFormattingModelForPsiFile(formattingContext.getContainingFile(),
- new SdBlock(formattingContext.getNode(),
- Wrap.createWrap(WrapType.NONE, false),
- Alignment.createAlignment(),
- createSpaceBuilder(codeStyleSettings)),
- codeStyleSettings);
- }
-
-}
diff --git a/sd-plugin/src/main/java/org/intellij/sdk/language/SdIcons.java b/sd-plugin/src/main/java/org/intellij/sdk/language/SdIcons.java
index bc579f336a6..21c46f15e55 100644
--- a/sd-plugin/src/main/java/org/intellij/sdk/language/SdIcons.java
+++ b/sd-plugin/src/main/java/org/intellij/sdk/language/SdIcons.java
@@ -5,6 +5,10 @@ import com.intellij.openapi.util.IconLoader;
import javax.swing.Icon;
+/**
+ * This class is used for defining Icons for the IDE.
+ * @author shahariel
+ */
public class SdIcons {
public static final Icon FILE = IconLoader.getIcon("icons/sd_icon.png", SdIcons.class);
public static final Icon STRUCT_FIELD = IconLoader.getIcon("icons/struct_field_icon.png", SdIcons.class);
diff --git a/sd-plugin/src/main/java/org/intellij/sdk/language/SdLanguage.java b/sd-plugin/src/main/java/org/intellij/sdk/language/SdLanguage.java
index 0fd03a961f3..d283514076d 100644
--- a/sd-plugin/src/main/java/org/intellij/sdk/language/SdLanguage.java
+++ b/sd-plugin/src/main/java/org/intellij/sdk/language/SdLanguage.java
@@ -3,6 +3,10 @@ package org.intellij.sdk.language;
import com.intellij.lang.Language;
+/**
+ * This class defines SD as a language.
+ * @author shahariel
+ */
public class SdLanguage extends Language {
public static final SdLanguage INSTANCE = new SdLanguage();
diff --git a/sd-plugin/src/main/java/org/intellij/sdk/language/SdLanguageCodeStyleSettingsProvider.java b/sd-plugin/src/main/java/org/intellij/sdk/language/SdLanguageCodeStyleSettingsProvider.java
index d3cf1d4233c..efe4e9ea0ae 100644
--- a/sd-plugin/src/main/java/org/intellij/sdk/language/SdLanguageCodeStyleSettingsProvider.java
+++ b/sd-plugin/src/main/java/org/intellij/sdk/language/SdLanguageCodeStyleSettingsProvider.java
@@ -6,6 +6,10 @@ import com.intellij.psi.codeStyle.CodeStyleSettingsCustomizable;
import com.intellij.psi.codeStyle.LanguageCodeStyleSettingsProvider;
import org.jetbrains.annotations.NotNull;
+/**
+ * This class is used for the extension (in plugin.xml), to make the IDE use our plugin's code for coding style.
+ * @author shahariel
+ */
public class SdLanguageCodeStyleSettingsProvider extends LanguageCodeStyleSettingsProvider {
@NotNull
diff --git a/sd-plugin/src/main/java/org/intellij/sdk/language/SdLexerAdapter.java b/sd-plugin/src/main/java/org/intellij/sdk/language/SdLexerAdapter.java
index 2b088ea5d60..cf4b46ab1d0 100644
--- a/sd-plugin/src/main/java/org/intellij/sdk/language/SdLexerAdapter.java
+++ b/sd-plugin/src/main/java/org/intellij/sdk/language/SdLexerAdapter.java
@@ -4,6 +4,10 @@ package org.intellij.sdk.language;
import com.intellij.lexer.FlexAdapter;
import org.intellij.sdk.language.lexer.SdLexer;
+/**
+ * This class adapts the JFlex lexer to the IntelliJ Platform Lexer API.
+ * @author shahariel
+ */
public class SdLexerAdapter extends FlexAdapter {
public SdLexerAdapter() {
diff --git a/sd-plugin/src/main/java/org/intellij/sdk/language/SdRefactoringSupportProvider.java b/sd-plugin/src/main/java/org/intellij/sdk/language/SdRefactoringSupportProvider.java
index 2e69198f1e2..88868d324de 100644
--- a/sd-plugin/src/main/java/org/intellij/sdk/language/SdRefactoringSupportProvider.java
+++ b/sd-plugin/src/main/java/org/intellij/sdk/language/SdRefactoringSupportProvider.java
@@ -7,6 +7,10 @@ import org.intellij.sdk.language.psi.SdIdentifierVal;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
+/**
+ * This class is used for the extension (in plugin.xml), to enable refactoring.
+ * @author shahariel
+ */
public class SdRefactoringSupportProvider extends RefactoringSupportProvider {
@Override
public boolean isMemberInplaceRenameAvailable(@NotNull PsiElement elementToRename, @Nullable PsiElement context) {
diff --git a/sd-plugin/src/main/java/org/intellij/sdk/language/SdReference.java b/sd-plugin/src/main/java/org/intellij/sdk/language/SdReference.java
index 42cfc69d5c3..f2f4d475cb2 100644
--- a/sd-plugin/src/main/java/org/intellij/sdk/language/SdReference.java
+++ b/sd-plugin/src/main/java/org/intellij/sdk/language/SdReference.java
@@ -18,6 +18,10 @@ import org.jetbrains.annotations.Nullable;
import java.util.ArrayList;
import java.util.List;
+/**
+ * This class represent a reference to a Psi Element.
+ * @author shahariel
+ */
public class SdReference extends PsiReferenceBase<PsiElement> implements PsiPolyVariantReference {
private final String elementName;
diff --git a/sd-plugin/src/main/java/org/intellij/sdk/language/SdSyntaxHighlighter.java b/sd-plugin/src/main/java/org/intellij/sdk/language/SdSyntaxHighlighter.java
index 0f004577c61..ae99b58f11f 100644
--- a/sd-plugin/src/main/java/org/intellij/sdk/language/SdSyntaxHighlighter.java
+++ b/sd-plugin/src/main/java/org/intellij/sdk/language/SdSyntaxHighlighter.java
@@ -15,6 +15,10 @@ import org.jetbrains.annotations.NotNull;
import java.util.HashSet;
+/**
+ * This class defines the syntax highlighting of an SD file.
+ * @author shahariel
+ */
public class SdSyntaxHighlighter extends SyntaxHighlighterBase {
private static final HashSet<IElementType> keyWordsSet = initKeyWordsSet();
@@ -53,9 +57,8 @@ public class SdSyntaxHighlighter extends SyntaxHighlighterBase {
return new SdLexerAdapter();
}
- @NotNull
@Override
- public TextAttributesKey[] getTokenHighlights(IElementType tokenType) {
+ public TextAttributesKey @NotNull [] getTokenHighlights(IElementType tokenType) {
if (tokenType.equals(SdTypes.IDENTIFIER_VAL)) {
return IDENTIFIER_KEYS;
// } else if (tokenType.equals(SdTypes.KEY)) {
diff --git a/sd-plugin/src/main/java/org/intellij/sdk/language/SdSyntaxHighlighterFactory.java b/sd-plugin/src/main/java/org/intellij/sdk/language/SdSyntaxHighlighterFactory.java
index 39795610937..b2ace3156e9 100644
--- a/sd-plugin/src/main/java/org/intellij/sdk/language/SdSyntaxHighlighterFactory.java
+++ b/sd-plugin/src/main/java/org/intellij/sdk/language/SdSyntaxHighlighterFactory.java
@@ -7,6 +7,10 @@ import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.VirtualFile;
import org.jetbrains.annotations.NotNull;
+/**
+ * This class is used for the extension (in plugin.xml) to the class SdSyntaxHighlighter.
+ * @author shahariel
+ */
public class SdSyntaxHighlighterFactory extends SyntaxHighlighterFactory {
@NotNull
diff --git a/sd-plugin/src/main/java/org/intellij/sdk/language/SdUtil.java b/sd-plugin/src/main/java/org/intellij/sdk/language/SdUtil.java
index b46c2cd3d6f..45e5d6f4fb3 100644
--- a/sd-plugin/src/main/java/org/intellij/sdk/language/SdUtil.java
+++ b/sd-plugin/src/main/java/org/intellij/sdk/language/SdUtil.java
@@ -11,8 +11,10 @@ import com.intellij.psi.search.FileTypeIndex;
import com.intellij.psi.search.GlobalSearchScope;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.util.indexing.FileBasedIndex;
+import org.intellij.sdk.language.psi.SdAnnotationFieldDefinition;
import org.intellij.sdk.language.psi.SdArgumentDefinition;
import org.intellij.sdk.language.psi.SdDeclaration;
+import org.intellij.sdk.language.psi.SdDocumentAnnotationDefinition;
import org.intellij.sdk.language.psi.SdDocumentDefinition;
import org.intellij.sdk.language.psi.SdDocumentFieldDefinition;
import org.intellij.sdk.language.psi.SdDocumentStructDefinition;
@@ -24,6 +26,7 @@ import org.intellij.sdk.language.psi.SdFunctionDefinition;
import org.intellij.sdk.language.psi.SdIdentifier;
import org.intellij.sdk.language.psi.SdImportFieldDefinition;
import org.intellij.sdk.language.psi.SdRankProfileDefinition;
+import org.intellij.sdk.language.psi.SdSchemaAnnotationDefinition;
import org.intellij.sdk.language.psi.SdSchemaFieldDefinition;
import org.intellij.sdk.language.psi.SdSummaryDefinition;
import org.intellij.sdk.language.psi.SdTypes;
@@ -34,6 +37,10 @@ import java.util.Collection;
import java.util.HashMap;
import java.util.List;
+/**
+ * This is the util class for the plugin's code.
+ * @author shahariel
+ */
public class SdUtil {
public static @NotNull HashMap<String, List<PsiElement>> createMacrosMap(SdFile file) {
@@ -111,12 +118,12 @@ public class SdUtil {
if (element.getParent() instanceof SdImportFieldDefinition &&
element.getNextSibling().getNextSibling().getText().equals("as")) {
Project project = file.getProject();
-
+
PsiReference docFieldRef = element.getPrevSibling().getPrevSibling().getReference();
PsiElement docField = docFieldRef != null ? docFieldRef.resolve() : null;
SdFieldTypeName fieldType = docField != null ? PsiTreeUtil.findChildOfType(docField, SdFieldTypeName.class) : null;
SdIdentifier docIdentifier = fieldType != null ? PsiTreeUtil.findChildOfType(fieldType, SdIdentifier.class) : null;
- String docName = docIdentifier != null ? docIdentifier.getName() : null;
+ String docName = docIdentifier != null ? docIdentifier.getName() : null;
if (docName == null) {
return result;
}
@@ -166,8 +173,8 @@ public class SdUtil {
curRankProfile = getRankProfileParent((SdRankProfileDefinition) curRankProfile);
}
}
-
- for (PsiElement declaration : PsiTreeUtil.collectElements(file, psiElement ->
+
+ for (PsiElement declaration : PsiTreeUtil.collectElements(file, psiElement ->
psiElement instanceof SdDeclaration && !(psiElement instanceof SdArgumentDefinition))) {
if (name.equals(((SdDeclaration) declaration).getName())) {
result.add((SdDeclaration) declaration);
@@ -184,30 +191,33 @@ public class SdUtil {
public static List<PsiElement> findSchemaChildren(PsiElement element) {
return new ArrayList<>(PsiTreeUtil.collectElementsOfType(element, new Class[]{SdDocumentDefinition.class,
- SdSchemaFieldDefinition.class,
- SdImportFieldDefinition.class,
- SdDocumentSummaryDefinition.class,
- SdRankProfileDefinition.class}));
+ SdSchemaFieldDefinition.class,
+ SdImportFieldDefinition.class,
+ SdSchemaAnnotationDefinition.class,
+ SdDocumentSummaryDefinition.class,
+ SdRankProfileDefinition.class}));
+ }
+
+ public static List<PsiElement> findAnnotationChildren(PsiElement element) {
+ return new ArrayList<>(PsiTreeUtil.collectElementsOfType(element, SdAnnotationFieldDefinition.class));
}
public static List<PsiElement> findDocumentChildren(PsiElement element) {
- return new ArrayList<>(PsiTreeUtil.collectElementsOfType(element, new Class[]{SdDocumentStructDefinition.class,
- SdDocumentFieldDefinition.class}));
+ return new ArrayList<>(PsiTreeUtil.collectElementsOfType(element, new Class[]{SdDocumentStructDefinition.class,
+ SdDocumentAnnotationDefinition.class,
+ SdDocumentFieldDefinition.class}));
}
public static List<PsiElement> findDocumentStructChildren(PsiElement element) {
- return new ArrayList<>(PsiTreeUtil.collectElementsOfType(element,
- SdDocumentStructFieldDefinition.class));
+ return new ArrayList<>(PsiTreeUtil.collectElementsOfType(element, SdDocumentStructFieldDefinition.class));
}
public static List<PsiElement> findRankProfileChildren(PsiElement element) {
- return new ArrayList<>(PsiTreeUtil.collectElementsOfType(element,
- SdFunctionDefinition.class));
+ return new ArrayList<>(PsiTreeUtil.collectElementsOfType(element, SdFunctionDefinition.class));
}
public static List<PsiElement> findDocumentSummaryChildren(PsiElement element) {
- return new ArrayList<>(PsiTreeUtil.collectElementsOfType(element,
- SdSummaryDefinition.class));
+ return new ArrayList<>(PsiTreeUtil.collectElementsOfType(element, SdSummaryDefinition.class));
}
diff --git a/sd-plugin/src/main/java/org/intellij/sdk/language/findUsages/SdDocumentSummaryGroupingRule.java b/sd-plugin/src/main/java/org/intellij/sdk/language/findUsages/SdDocumentSummaryGroupingRule.java
index 8e4920f22f0..8047e198d88 100644
--- a/sd-plugin/src/main/java/org/intellij/sdk/language/findUsages/SdDocumentSummaryGroupingRule.java
+++ b/sd-plugin/src/main/java/org/intellij/sdk/language/findUsages/SdDocumentSummaryGroupingRule.java
@@ -13,6 +13,10 @@ import org.intellij.sdk.language.psi.SdDocumentSummaryDefinition;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
+/**
+ * This class represent a Document Summary that groups elements in the "Find Usages" window.
+ * @author shahariel
+ */
public class SdDocumentSummaryGroupingRule extends SingleParentUsageGroupingRule implements DumbAware {
@Override
diff --git a/sd-plugin/src/main/java/org/intellij/sdk/language/findUsages/SdDocumentSummaryGroupingRuleProvider.java b/sd-plugin/src/main/java/org/intellij/sdk/language/findUsages/SdDocumentSummaryGroupingRuleProvider.java
index 399a352beb4..ff519436994 100644
--- a/sd-plugin/src/main/java/org/intellij/sdk/language/findUsages/SdDocumentSummaryGroupingRuleProvider.java
+++ b/sd-plugin/src/main/java/org/intellij/sdk/language/findUsages/SdDocumentSummaryGroupingRuleProvider.java
@@ -7,6 +7,10 @@ import com.intellij.usages.rules.UsageGroupingRule;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
+/**
+ * This class is used for the extension (in plugin.xml) to the class SdDocumentSummaryGroupingRule.
+ * @author shahariel
+ */
public class SdDocumentSummaryGroupingRuleProvider implements FileStructureGroupRuleProvider {
@Override
diff --git a/sd-plugin/src/main/java/org/intellij/sdk/language/findUsages/SdFindUsagesHandler.java b/sd-plugin/src/main/java/org/intellij/sdk/language/findUsages/SdFindUsagesHandler.java
index 145931ab466..6841f608efd 100644
--- a/sd-plugin/src/main/java/org/intellij/sdk/language/findUsages/SdFindUsagesHandler.java
+++ b/sd-plugin/src/main/java/org/intellij/sdk/language/findUsages/SdFindUsagesHandler.java
@@ -21,6 +21,10 @@ import org.jetbrains.annotations.NotNull;
import java.util.HashMap;
import java.util.List;
+/**
+ * This class handles creating the "Find Usages" window.
+ * @author shahariel
+ */
public class SdFindUsagesHandler extends FindUsagesHandler {
protected HashMap<String, List<PsiElement>> macrosMap;
diff --git a/sd-plugin/src/main/java/org/intellij/sdk/language/findUsages/SdFindUsagesHandlerFactory.java b/sd-plugin/src/main/java/org/intellij/sdk/language/findUsages/SdFindUsagesHandlerFactory.java
index 84bb2e308e6..2ccd7f6ea41 100644
--- a/sd-plugin/src/main/java/org/intellij/sdk/language/findUsages/SdFindUsagesHandlerFactory.java
+++ b/sd-plugin/src/main/java/org/intellij/sdk/language/findUsages/SdFindUsagesHandlerFactory.java
@@ -8,6 +8,10 @@ import com.intellij.psi.PsiNamedElement;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
+/**
+ * This class is used for the extension (in plugin.xml) to the class SdFindUsagesHandler.
+ * @author shahariel
+ */
public class SdFindUsagesHandlerFactory extends FindUsagesHandlerFactory {
@Override
diff --git a/sd-plugin/src/main/java/org/intellij/sdk/language/findUsages/SdFindUsagesProvider.java b/sd-plugin/src/main/java/org/intellij/sdk/language/findUsages/SdFindUsagesProvider.java
index 697ff1261e1..4ec407e580d 100644
--- a/sd-plugin/src/main/java/org/intellij/sdk/language/findUsages/SdFindUsagesProvider.java
+++ b/sd-plugin/src/main/java/org/intellij/sdk/language/findUsages/SdFindUsagesProvider.java
@@ -16,6 +16,10 @@ import org.intellij.sdk.language.psi.SdTypes;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
+/**
+ * This class is used for the extension (in plugin.xml), to enable "find Usages" window using the plugin code.
+ * @author shahariel
+ */
public class SdFindUsagesProvider implements FindUsagesProvider {
@Nullable
@Override
diff --git a/sd-plugin/src/main/java/org/intellij/sdk/language/findUsages/SdRankProfileGroupingRule.java b/sd-plugin/src/main/java/org/intellij/sdk/language/findUsages/SdRankProfileGroupingRule.java
index 55332d65839..77de9fd9534 100644
--- a/sd-plugin/src/main/java/org/intellij/sdk/language/findUsages/SdRankProfileGroupingRule.java
+++ b/sd-plugin/src/main/java/org/intellij/sdk/language/findUsages/SdRankProfileGroupingRule.java
@@ -13,6 +13,10 @@ import org.intellij.sdk.language.psi.SdRankProfileDefinition;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
+/**
+ * This class represent a Rank Profile that groups elements in the "Find Usages" window.
+ * @author shahariel
+ */
public class SdRankProfileGroupingRule extends SingleParentUsageGroupingRule implements DumbAware {
@Override
diff --git a/sd-plugin/src/main/java/org/intellij/sdk/language/findUsages/SdRankProfileGroupingRuleProvider.java b/sd-plugin/src/main/java/org/intellij/sdk/language/findUsages/SdRankProfileGroupingRuleProvider.java
index b48117003ae..7527b93c947 100644
--- a/sd-plugin/src/main/java/org/intellij/sdk/language/findUsages/SdRankProfileGroupingRuleProvider.java
+++ b/sd-plugin/src/main/java/org/intellij/sdk/language/findUsages/SdRankProfileGroupingRuleProvider.java
@@ -7,6 +7,10 @@ import com.intellij.usages.rules.UsageGroupingRule;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
+/**
+ * This class is used for the extension (in plugin.xml) to the class SdRankProfileGroupingRule.
+ * @author shahariel
+ */
public class SdRankProfileGroupingRuleProvider implements FileStructureGroupRuleProvider {
@Override
diff --git a/sd-plugin/src/main/java/org/intellij/sdk/language/findUsages/SdUsageGroup.java b/sd-plugin/src/main/java/org/intellij/sdk/language/findUsages/SdUsageGroup.java
index 27385a5cae4..9042be84d75 100644
--- a/sd-plugin/src/main/java/org/intellij/sdk/language/findUsages/SdUsageGroup.java
+++ b/sd-plugin/src/main/java/org/intellij/sdk/language/findUsages/SdUsageGroup.java
@@ -16,6 +16,10 @@ import org.jetbrains.annotations.Nullable;
import javax.swing.*;
+/**
+ * This class represent a group of elements in the "Find Usages" window.
+ * @author shahariel
+ */
public class SdUsageGroup implements UsageGroup {
private final VirtualFile myFile;
private final SmartPsiElementPointer<SdDeclaration> myElementPointer;
diff --git a/sd-plugin/src/main/java/org/intellij/sdk/language/hierarchy/SdCallHierarchyBrowser.java b/sd-plugin/src/main/java/org/intellij/sdk/language/hierarchy/SdCallHierarchyBrowser.java
index 1c1f3ed9f27..417cab307d4 100644
--- a/sd-plugin/src/main/java/org/intellij/sdk/language/hierarchy/SdCallHierarchyBrowser.java
+++ b/sd-plugin/src/main/java/org/intellij/sdk/language/hierarchy/SdCallHierarchyBrowser.java
@@ -22,6 +22,10 @@ import java.util.Map;
import javax.swing.JTree;
+/**
+ * This class is a browser for the "Call Hierarchy" window.
+ * @author shahariel
+ */
public class SdCallHierarchyBrowser extends CallHierarchyBrowserBase {
public SdCallHierarchyBrowser(@NotNull Project project,
diff --git a/sd-plugin/src/main/java/org/intellij/sdk/language/hierarchy/SdCallHierarchyNodeDescriptor.java b/sd-plugin/src/main/java/org/intellij/sdk/language/hierarchy/SdCallHierarchyNodeDescriptor.java
index 8c34a405d03..5703739aa31 100644
--- a/sd-plugin/src/main/java/org/intellij/sdk/language/hierarchy/SdCallHierarchyNodeDescriptor.java
+++ b/sd-plugin/src/main/java/org/intellij/sdk/language/hierarchy/SdCallHierarchyNodeDescriptor.java
@@ -19,6 +19,10 @@ import org.jetbrains.annotations.NotNull;
import javax.swing.Icon;
+/**
+ * This class represents a node descriptor to a node in a tree in the "Call Hierarchy" window.
+ * @author shahariel
+ */
public class SdCallHierarchyNodeDescriptor extends HierarchyNodeDescriptor {
public SdCallHierarchyNodeDescriptor(final NodeDescriptor parentDescriptor, @NotNull final PsiElement element, final boolean isBase) {
diff --git a/sd-plugin/src/main/java/org/intellij/sdk/language/hierarchy/SdCallHierarchyProvider.java b/sd-plugin/src/main/java/org/intellij/sdk/language/hierarchy/SdCallHierarchyProvider.java
index f5053720b44..b15835341d2 100644
--- a/sd-plugin/src/main/java/org/intellij/sdk/language/hierarchy/SdCallHierarchyProvider.java
+++ b/sd-plugin/src/main/java/org/intellij/sdk/language/hierarchy/SdCallHierarchyProvider.java
@@ -24,7 +24,10 @@ import com.intellij.openapi.project.Project;
import com.intellij.psi.util.PsiTreeUtil;
-
+/**
+ * This class is used for the extension (in plugin.xml), to enable "Call Hierarchy" window using the plugin code.
+ * @author shahariel
+ */
public class SdCallHierarchyProvider implements HierarchyProvider {
@Override
diff --git a/sd-plugin/src/main/java/org/intellij/sdk/language/hierarchy/SdCallTreeStructure.java b/sd-plugin/src/main/java/org/intellij/sdk/language/hierarchy/SdCallTreeStructure.java
index 8ffe713663b..4a007b13f07 100644
--- a/sd-plugin/src/main/java/org/intellij/sdk/language/hierarchy/SdCallTreeStructure.java
+++ b/sd-plugin/src/main/java/org/intellij/sdk/language/hierarchy/SdCallTreeStructure.java
@@ -21,6 +21,10 @@ import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
+/**
+ * This abstract class represents a general tree in the "Call Hierarchy" window.
+ * @author shahariel
+ */
public abstract class SdCallTreeStructure extends HierarchyTreeStructure {
protected final String myScopeType;
protected final SdFile myFile;
diff --git a/sd-plugin/src/main/java/org/intellij/sdk/language/hierarchy/SdCalleeTreeStructure.java b/sd-plugin/src/main/java/org/intellij/sdk/language/hierarchy/SdCalleeTreeStructure.java
index 0bff2a4a58e..0beca6d5967 100644
--- a/sd-plugin/src/main/java/org/intellij/sdk/language/hierarchy/SdCalleeTreeStructure.java
+++ b/sd-plugin/src/main/java/org/intellij/sdk/language/hierarchy/SdCalleeTreeStructure.java
@@ -16,6 +16,10 @@ import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
+/**
+ * This class represents a Callee tree in the "Call Hierarchy" window.
+ * @author shahariel
+ */
public class SdCalleeTreeStructure extends SdCallTreeStructure {
public SdCalleeTreeStructure(Project project, PsiElement element, String currentScopeType) {
diff --git a/sd-plugin/src/main/java/org/intellij/sdk/language/hierarchy/SdCallerTreeStructure.java b/sd-plugin/src/main/java/org/intellij/sdk/language/hierarchy/SdCallerTreeStructure.java
index 2f62bd2e375..4a30dd7492f 100644
--- a/sd-plugin/src/main/java/org/intellij/sdk/language/hierarchy/SdCallerTreeStructure.java
+++ b/sd-plugin/src/main/java/org/intellij/sdk/language/hierarchy/SdCallerTreeStructure.java
@@ -18,6 +18,10 @@ import java.util.HashSet;
import java.util.List;
import java.util.function.Consumer;
+/**
+ * This class represents a Caller tree in the "Call Hierarchy" window.
+ * @author shahariel
+ */
public class SdCallerTreeStructure extends SdCallTreeStructure {
private HashMap<String, HashSet<PsiElement>> macroTreeChildren;
diff --git a/sd-plugin/src/main/java/org/intellij/sdk/language/hierarchy/SdHierarchyUtil.java b/sd-plugin/src/main/java/org/intellij/sdk/language/hierarchy/SdHierarchyUtil.java
index 06ac7f07d7d..c3e59124ef8 100644
--- a/sd-plugin/src/main/java/org/intellij/sdk/language/hierarchy/SdHierarchyUtil.java
+++ b/sd-plugin/src/main/java/org/intellij/sdk/language/hierarchy/SdHierarchyUtil.java
@@ -16,7 +16,10 @@ import org.intellij.sdk.language.psi.SdRankProfileDefinition;
import java.util.Comparator;
import java.util.HashSet;
-
+/**
+ * This class is util class to the Call Hierarchy feature.
+ * @author shahariel
+ */
public class SdHierarchyUtil {
private static final Comparator<NodeDescriptor<?>> NODE_DESCRIPTOR_COMPARATOR = Comparator.comparingInt(NodeDescriptor::getIndex);
diff --git a/sd-plugin/src/main/java/org/intellij/sdk/language/parser/SdParserDefinition.java b/sd-plugin/src/main/java/org/intellij/sdk/language/parser/SdParserDefinition.java
index 00778da243c..2a169707a79 100644
--- a/sd-plugin/src/main/java/org/intellij/sdk/language/parser/SdParserDefinition.java
+++ b/sd-plugin/src/main/java/org/intellij/sdk/language/parser/SdParserDefinition.java
@@ -19,6 +19,10 @@ import org.intellij.sdk.language.psi.SdFile;
import org.intellij.sdk.language.psi.SdTypes;
import org.jetbrains.annotations.NotNull;
+/**
+ * This class is used for the extension (in plugin.xml), to make the parsing process use the plugin code.
+ * @author shahariel
+ */
public class SdParserDefinition implements ParserDefinition {
public static final TokenSet WHITE_SPACES = TokenSet.create(TokenType.WHITE_SPACE);
public static final TokenSet COMMENTS = TokenSet.create(SdTypes.COMMENT);
diff --git a/sd-plugin/src/main/java/org/intellij/sdk/language/parser/sd.bnf b/sd-plugin/src/main/java/org/intellij/sdk/language/parser/sd.bnf
index a1bc4c548a0..245975f301c 100644
--- a/sd-plugin/src/main/java/org/intellij/sdk/language/parser/sd.bnf
+++ b/sd-plugin/src/main/java/org/intellij/sdk/language/parser/sd.bnf
@@ -1,3 +1,9 @@
+/**
+This file is the SD grammar.
+NOTE: This grammar does not enforce zero-or-one occurrences of elements (treats it like zero-to-many)
+@author: shahariel
+ */
+
{
parserClass="org.intellij.sdk.language.parser.SdParser" // Name and the location of the parser which will be generated.
@@ -34,19 +40,15 @@
]
}
-// IMPORTANT NOTE: This grammar does not enforce zero-or-one occurrences of elements (treats it like zero-to-many)
-
-SdFile ::= Schema
-Schema ::= search IdentifierVal? '{' SchemaBody '}'
+SdFile ::= SchemaDefinition
+SchemaDefinition ::= (search | schema) IdentifierVal? '{' SchemaBody '}'
SchemaBody ::= SchemaBodyOptions* DocumentDefinition SchemaBodyOptions* // Does not support zero-or-one occurrences
private SchemaBodyOptions ::= SchemaFieldDefinition | ImportFieldDefinition | DocumentSummaryDefinition |
RankProfileDefinition |
FieldSetDefinition | ConstantDefinition | OnnxModelDefinition | StemmingDefinition |
- raw-as-base64-in-summary | AnnotationDefinition
-
-
-
+ raw-as-base64-in-summary | SchemaAnnotationDefinition
+
SchemaFieldDefinition ::= field IdentifierVal type FieldTypeName '{' SchemaFieldBody '}'
{ mixin="org.intellij.sdk.language.psi.impl.SdNamedElementImpl"
implements=["org.intellij.sdk.language.psi.SdDeclaration" "org.intellij.sdk.language.psi.SdNamedElement"]
@@ -95,19 +97,26 @@ OnnxModelBody ::= OnnxModelBodyOptions*
private OnnxModelBodyOptions ::= (file ':' FilePath) | (uri ':' UriPath) |
((input | output) (IdentifierVal | STRING) ':' ('.' | '/' | '(' | ')' | IdentifierWithDashVal | WORD_REG))
-AnnotationDefinition ::= annotation IdentifierVal '{' '}' // todo ask Vespa for syntax
+SchemaAnnotationDefinition ::= AnnotationDefinition
+ { mixin="org.intellij.sdk.language.psi.impl.SdNamedElementImpl"
+ implements=["org.intellij.sdk.language.psi.SdDeclaration" "org.intellij.sdk.language.psi.SdNamedElement"]
+ methods=[getName setName getType getTypeName getNameIdentifier getPresentation] }
+
+private AnnotationDefinition ::= annotation IdentifierVal '{' AnnotationFieldDefinition* '}'
+AnnotationFieldDefinition ::= field IdentifierVal type FieldTypeName '{' '}'
+ { mixin="org.intellij.sdk.language.psi.impl.SdNamedElementImpl"
+ implements=["org.intellij.sdk.language.psi.SdDeclaration" "org.intellij.sdk.language.psi.SdNamedElement"]
+ methods=[getName setName getType getTypeName getNameIdentifier getPresentation] }
//-------------------------
//--- Expressions rules ---
//-------------------------
RankingExpression ::= ParenthesisedExpr | BooleanExpr |ArithmeticExpr | IfFunctionExpr |
- QueryDefinitionExpr | FunctionCallExpr | PrimitiveExpr //ReduceExpr |
+ QueryDefinitionExpr | FunctionCallExpr | PrimitiveExpr
IfFunctionExpr ::= "if" '(' (InListRankingExpression | RankingExpression) ',' RankingExpression ',' RankingExpression ')'
InListRankingExpression ::= RankingExpression "in" '[' RankingExpression (',' RankingExpression)* ']'
-//ReduceExpr ::= reduce '(' RankingExpression ',' (avg|count|max|median|min|prod|sum) (',' RankingExpression)* ')'
-
BooleanExpr ::= RankingExpression COMPARISON_OPERATOR RankingExpression
ArithmeticExpr ::= RankingExpression ARITHMETIC_OPERATOR RankingExpression
@@ -132,14 +141,15 @@ private RankProfileBodyOptions ::= MatchPhaseDefinition | NumThreadsDefinition |
ignore-default-rank-features | RankPropertiesDefinition | FirstPhaseDefinition |
SummaryFeaturesDefinition | RankFeaturesDefinition | SecondPhaseDefinition | ConstantsDefinition |
RankDefinition | RankTypeDefinition | MinHitsDefinition | NumSearchPartitionDefinition
- // | FieldWeightDefinition | ExecuteDefinition | RankDegradationDefinition // todo check with Vespa if need to add these
MatchPhaseDefinition ::= match-phase '{' MatchPhaseBody '}'
-MatchPhaseBody ::= MatchPhaseBodyOptions+ // todo check with Vespa- are there more options?
+MatchPhaseBody ::= MatchPhaseBodyOptions+
MatchPhaseBodyOptions ::= (attribute ':' IdentifierVal (order ':' (ascending | descending))?) | (max-hits ':' INTEGER_REG)
| DiversityDefinition // Does not support zero-or-one occurrences
-DiversityDefinition ::= diversity '{' (attribute ':' IdentifierVal min-groups ':' INTEGER_REG) |
- (min-groups ':' INTEGER_REG attribute ':' IdentifierVal) '}'
+DiversityDefinition ::= diversity '{' DiversityBody '}'
+DiversityBody ::= DiversityBodyOptions*
+private DiversityBodyOptions ::= (attribute ':' IdentifierVal) | (min-groups ':' INTEGER_REG) | (cutoff-factor ':' FLOAT_REG) |
+ (cutoff-strategy ':' (strict | loose))
private NumThreadsDefinition ::= num-threads-per-search ':' INTEGER_REG
private TermwiseLimitDefinition ::= termwise-limit ':' (FLOAT_REG | INTEGER_REG)
@@ -177,9 +187,7 @@ RankFeaturesDefinition ::= rank-features (':' RankFeature+) | ('{' RankFeature*
ConstantsDefinition ::= constants '{' (IdentifierVal ':' RankPropertiesValue)* '}'
-//******** Rank features *********
RankFeature ::= QueryDefinition | ItemRawScoreDefinition | FunctionCallExpr | (IdentifierWithDashVal ('.' IdentifierWithDashVal)* )
-
QueryDefinition ::= "query" '(' IdentifierWithDashVal ')'
{ mixin="org.intellij.sdk.language.psi.impl.SdNamedElementImpl"
implements=["org.intellij.sdk.language.psi.SdDeclaration" "org.intellij.sdk.language.psi.SdNamedElement"]
@@ -188,30 +196,7 @@ ItemRawScoreDefinition ::= "itemRawScore" '(' IdentifierVal ')'
{ mixin="org.intellij.sdk.language.psi.impl.SdNamedElementImpl"
implements=["org.intellij.sdk.language.psi.SdDeclaration" "org.intellij.sdk.language.psi.SdNamedElement"]
methods=[getName setName getType getTypeName getNameIdentifier getPresentation] }
-
-// QueryFeature | DocumentFeature | QueryTermFieldMatchFeature | AttributeMatchFeature | RankScoreFeature |
-// GlobalFeature | MatchOperatorScoreFeature | UtilityFeature | RankingExpressionMethod
- //todo add the rest (| FieldMatchFeature | QueryFieldSimilarityFeature | IdxMultiStrFieldFeature | MultiFieldsAttributesFeature)
-
-// todo maybe not specify all of the rank features here? Maybe it would be better to write it more generally? like ID '(' ID ')' '.' ID.. so it could handle new features in the future
-//QueryFeature ::= QueryDefinition | (term '(' (FLOAT_REG | INTEGER_REG) ')' '.' (significant | weight | connectedness)) // todo add queryTermCount
-//DocumentFeature ::= (fieldLength '(' IdentifierVal ')') | (attribute '(' IdentifierVal ')' ('.' count)?) |
-// (attribute '(' IdentifierVal ',' (INTEGER_REG | IdentifierVal) ')' ('.' (weight | contains))?) |
-// (tensorFromWeightedSet '(' ((attribute'('IdentifierVal')') | QueryDefinition | IdentifierVal) ',' IdentifierVal ')') |
-// (tensorFromLabels '(' ((attribute'('IdentifierVal')') | QueryDefinition | IdentifierVal) ',' IdentifierVal ')')
-//QueryTermFieldMatchFeature ::= (matchCount'('IdentifierVal')') | (matches'('IdentifierVal (',' INTEGER_REG)? ')') // todo add the rest
-//AttributeMatchFeature ::= (attributeMatch'('IdentifierVal')' ('.' (completeness | queryCompleteness | fieldCompleteness |
-// normalizedWeight | normalizedWeightedWeight | matches | totalWeight | averageWeight | maxWeight))?) |
-// (distance'('IdentifierVal')' ('.' (index | latitude | longitude))?) |
-// (distanceToPath'('IdentifierVal')' ('.' (distance | traveled | product))?) | (age'('IdentifierVal')') // todo add closeness and freshness
-//RankScoreFeature ::= (nativeDotProduct'('IdentifierVal')') // todo add the rest
-//GlobalFeature ::= (random'('IdentifierVal')' '.' match) | (random) // todo add the rest
-//MatchOperatorScoreFeature ::= (rawScore'('IdentifierVal')') | ItemRawScoreDefinition
-//UtilityFeature ::= (dotProduct'('IdentifierVal ',' IdentifierVal ')') // todo add the rest
-//RankingExpressionMethod ::= "rankingExpression" '(' (RankFeature | IdentifierVal) ')'
-//***** End of Rank features *****
-
-
+
//-------------------------
//---- Document rules -----
//-------------------------
@@ -221,7 +206,12 @@ DocumentDefinition ::= document (IdentifierVal (inherits IdentifierVal (',' Iden
methods=[getName setName getType getTypeName getNameIdentifier getPresentation] }
DocumentBody ::= DocumentBodyOptions*
-DocumentBodyOptions ::= DocumentStructDefinition | DocumentFieldDefinition
+DocumentBodyOptions ::= DocumentStructDefinition | DocumentFieldDefinition | DocumentAnnotationDefinition
+
+DocumentAnnotationDefinition ::= AnnotationDefinition
+ { mixin="org.intellij.sdk.language.psi.impl.SdNamedElementImpl"
+ implements=["org.intellij.sdk.language.psi.SdDeclaration" "org.intellij.sdk.language.psi.SdNamedElement"]
+ methods=[getName setName getType getTypeName getNameIdentifier getPresentation] }
DocumentStructDefinition ::= struct IdentifierVal '{' DocumentStructBody '}'
{ mixin="org.intellij.sdk.language.psi.impl.SdNamedElementImpl"
@@ -246,7 +236,7 @@ private DocumentFieldBodyOptions ::= StructFieldDefinition | MatchDefinition | I
AliasDef | RankDefinition | IndexingRewriteState | QueryCommandDefinition | SummaryDefinition |
BoldingDefinition | (id ':' INTEGER_REG) | IndexDefinition | (normalizing ':' IdentifierWithDashVal) |
SortingDefinition | StemmingDefinition | (weight ': INTEGER_REG') | WeightedSetDefinition |
- RankTypeDefinition | DictionaryDefinition // todo check with Vespa- SummaryToDefinition is needed here? it's deprecated
+ RankTypeDefinition | DictionaryDefinition
//***** Field's body elements ******//
// Struct
@@ -265,7 +255,7 @@ MatchProperty ::= text | exact | exact-terminator | word | prefix | cased | unca
// Indexing
IndexingDefinition ::= indexing (':' IndexingStatement) | ('{' IndexingStatement+ '}')
IndexingStatement ::= IndexingStatementOptions (('|' IndexingStatementOptions)*) | ((';' IndexingStatementOptions)*)
- // Does not support zero-or-one occurrences // todo check with Vespa- Can "input" be here?
+ // Does not support zero-or-one occurrences
IndexingStatementOptions ::= summary | attribute | index | "set_language"
// Attribute
AttributeDefinition ::= attribute ((':' SimpleAttributeProperty) | ('{' (SimpleAttributeProperty | ComplexAttributeProperty)+ '}'))
@@ -278,7 +268,7 @@ AliasDef ::= alias IdentifierVal? ':' IdentifierWithDashVal
StemmingDefinition ::= stemming ':' IdentifierWithDashVal
// Rank
RankDefinition ::= rank ((IdentifierVal? ':' RankingSetting) | ('{' RankingSetting '}'))
-RankingSetting ::= filter | normal | literal // todo check with Vespa- is "literal" good here?
+RankingSetting ::= filter | normal
// Indexing Rewrite
IndexingRewriteState ::= indexing-rewrite ':' none
// Query Command
@@ -330,19 +320,19 @@ IdentifierWithDashVal ::= ID_WITH_DASH_REG | IdentifierVal { implements=["org.in
// Those lists of keywords (KeywordOrIdentifier and KeywordNotIdentifier) have to be synchronized with sd.flex file.
// If you add a keyword here, you should add it to the sd.flex file as well.
-KeywordOrIdentifier ::= search | document | struct | field | type | indexing | input | output | inherits | import | as |
- raw | uri | file | annotationreference | array | weightedset | map |
- order | ascending | descending | diversity | constants | literal | expression | weight | match |
+KeywordOrIdentifier ::= schema | search | document | struct | field | type | indexing | input | output | inherits |
+ import | as | raw | uri | file | annotationreference | array | weightedset | map |
+ order | ascending | descending | diversity | constants | expression | weight | match |
function | macro | inline | text | exact | word | prefix | cased | uncased | substring | suffix |
gram | paged | mutable | alias | sorting | strength | locale | uca | lowercase |
primary | secondary | tertiary | quaternary | identical | rank | filter | normal | none | full | dynamic |
- source | to |
+ source | to | strict | loose |
bolding | on | off | true | false | id | normalizing | stemming | arity | hnsw | dictionary | hash | btree |
fieldset | fields | constant | annotation
- // KeywordNotIdentifier ::= (not enforced in this version)
| attribute | body | header | index |
reference | summary
+// Note- in this form, those keywords can't be use as identifier-with-dash!
KeywordNotIdentifier ::= struct-field | document-summary | omit-summary-features | from-disk | rank-profile | rank-type |
num-threads-per-search | termwise-limit | ignore-default-rank-features | min-hits-per-thread |
num-search-partition | match-phase | max-hits | second-phase | rerank-count | min-groups |
@@ -351,5 +341,5 @@ KeywordNotIdentifier ::= struct-field | document-summary | omit-summary-features
indexing-rewrite | query-command | matched-elements-only | lower-bound | upper-bound |
dense-posting-list-threshold | enable-bm25 | max-links-per-node | neighbors-to-explore-at-insert |
multi-threaded-indexing | create-if-nonexistent | remove-if-zero | raw-as-base64-in-summary |
- onnx-model
+ onnx-model | cutoff-factor | cutoff-strategy | on-match | on-rank | on-summary
\ No newline at end of file
diff --git a/sd-plugin/src/main/java/org/intellij/sdk/language/psi/SdDeclaration.java b/sd-plugin/src/main/java/org/intellij/sdk/language/psi/SdDeclaration.java
index 32c943909a2..25ef64b8936 100644
--- a/sd-plugin/src/main/java/org/intellij/sdk/language/psi/SdDeclaration.java
+++ b/sd-plugin/src/main/java/org/intellij/sdk/language/psi/SdDeclaration.java
@@ -5,6 +5,10 @@ import com.intellij.navigation.NavigationItem;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiNamedElement;
+/**
+ * This interface represents a declaration in the SD language.
+ * @author shahariel
+ */
public interface SdDeclaration extends PsiElement, PsiNamedElement, NavigationItem {
String getName();
diff --git a/sd-plugin/src/main/java/org/intellij/sdk/language/psi/SdDeclarationType.java b/sd-plugin/src/main/java/org/intellij/sdk/language/psi/SdDeclarationType.java
index f1c1cbe560a..5ea5968f0bb 100644
--- a/sd-plugin/src/main/java/org/intellij/sdk/language/psi/SdDeclarationType.java
+++ b/sd-plugin/src/main/java/org/intellij/sdk/language/psi/SdDeclarationType.java
@@ -1,12 +1,18 @@
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package org.intellij.sdk.language.psi;
+/**
+ * This Enum describes the different declarations' types and their names.
+ * @author shahariel
+ */
public enum SdDeclarationType {
DOCUMENT("Document"),
STRUCT("Struct"),
+ ANNOTATION("Annotation"),
SCHEMA_FIELD("Field (in Schema)"),
DOCUMENT_FIELD("Field (in Document)"),
STRUCT_FIELD("Struct-Field"),
+ ANNOTATION_FIELD("Field (in Annotation)"),
DOCUMENT_STRUCT_FIELD("Field (in Struct)"),
IMPORTED_FIELD("Imported Field"),
DOCUMENT_SUMMARY("Document-Summary"),
diff --git a/sd-plugin/src/main/java/org/intellij/sdk/language/psi/SdElementDescriptionProvider.java b/sd-plugin/src/main/java/org/intellij/sdk/language/psi/SdElementDescriptionProvider.java
index 85bac80327a..3801069d408 100644
--- a/sd-plugin/src/main/java/org/intellij/sdk/language/psi/SdElementDescriptionProvider.java
+++ b/sd-plugin/src/main/java/org/intellij/sdk/language/psi/SdElementDescriptionProvider.java
@@ -9,13 +9,16 @@ import org.intellij.sdk.language.psi.SdDeclaration;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
-
+/**
+ * This class is used for the extension (in plugin.xml), to enable "find Usages" window take the element description from
+ * here. Used only for the "target" element.
+ * @author shahariel
+ */
public class SdElementDescriptionProvider implements ElementDescriptionProvider {
/**
* Controls the headline of the element in the "Find Usages" window
* @param psiElement the element to describe
- * @param elementDescriptionLocation
* @return a string with the description to write in the headline
*/
@Nullable
diff --git a/sd-plugin/src/main/java/org/intellij/sdk/language/psi/SdElementFactory.java b/sd-plugin/src/main/java/org/intellij/sdk/language/psi/SdElementFactory.java
index 5d9647dd0b3..9cb9690cd5b 100644
--- a/sd-plugin/src/main/java/org/intellij/sdk/language/psi/SdElementFactory.java
+++ b/sd-plugin/src/main/java/org/intellij/sdk/language/psi/SdElementFactory.java
@@ -7,6 +7,10 @@ import com.intellij.psi.PsiFileFactory;
import com.intellij.psi.util.PsiTreeUtil;
import org.intellij.sdk.language.SdFileType;
+/**
+ * This class is a factory of psi elements in the SD PSI tree.
+ * @author shahariel
+ */
public class SdElementFactory {
private static final String GENERAL_FILE_TEXT = "search {document %s {} rank-profile %s {}}";
diff --git a/sd-plugin/src/main/java/org/intellij/sdk/language/psi/SdElementType.java b/sd-plugin/src/main/java/org/intellij/sdk/language/psi/SdElementType.java
index 7306f5568f6..a091d444d8e 100644
--- a/sd-plugin/src/main/java/org/intellij/sdk/language/psi/SdElementType.java
+++ b/sd-plugin/src/main/java/org/intellij/sdk/language/psi/SdElementType.java
@@ -6,6 +6,10 @@ import org.intellij.sdk.language.SdLanguage;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
+/**
+ * This class represent a SdElementType.
+ * @author shahariel
+ */
public class SdElementType extends IElementType {
public SdElementType(@NotNull @NonNls String debugName) {
diff --git a/sd-plugin/src/main/java/org/intellij/sdk/language/psi/SdFile.java b/sd-plugin/src/main/java/org/intellij/sdk/language/psi/SdFile.java
index 0f736fa96b8..c044bdeeddd 100644
--- a/sd-plugin/src/main/java/org/intellij/sdk/language/psi/SdFile.java
+++ b/sd-plugin/src/main/java/org/intellij/sdk/language/psi/SdFile.java
@@ -8,6 +8,10 @@ import org.intellij.sdk.language.SdFileType;
import org.intellij.sdk.language.SdLanguage;
import org.jetbrains.annotations.NotNull;
+/**
+ * This class represent an SD file.
+ * @author shahariel
+ */
public class SdFile extends PsiFileBase {
public SdFile(@NotNull FileViewProvider viewProvider) {
diff --git a/sd-plugin/src/main/java/org/intellij/sdk/language/psi/SdIdentifier.java b/sd-plugin/src/main/java/org/intellij/sdk/language/psi/SdIdentifier.java
index c199f1c3a7d..c88e3e593bb 100644
--- a/sd-plugin/src/main/java/org/intellij/sdk/language/psi/SdIdentifier.java
+++ b/sd-plugin/src/main/java/org/intellij/sdk/language/psi/SdIdentifier.java
@@ -5,6 +5,10 @@ import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiReference;
import org.jetbrains.annotations.NotNull;
+/**
+ * This interface represents an identifier in the SD language (regular identifiers and identifiers with dash).
+ * @author shahariel
+ */
public interface SdIdentifier extends PsiElement {
String getName();
diff --git a/sd-plugin/src/main/java/org/intellij/sdk/language/psi/SdNamedElement.java b/sd-plugin/src/main/java/org/intellij/sdk/language/psi/SdNamedElement.java
index 9b7b6d03934..bd74a87b551 100644
--- a/sd-plugin/src/main/java/org/intellij/sdk/language/psi/SdNamedElement.java
+++ b/sd-plugin/src/main/java/org/intellij/sdk/language/psi/SdNamedElement.java
@@ -3,6 +3,11 @@ package org.intellij.sdk.language.psi;
import com.intellij.psi.PsiNameIdentifierOwner;
+/**
+ * This interface is used to wrap a Psi Element with SdNamedElement interface, which enables the element to be a
+ * "name owner" (like an identifier). It allows the element to take a part in references, find usages and more.
+ * @author shahariel
+ */
public interface SdNamedElement extends PsiNameIdentifierOwner {
}
diff --git a/sd-plugin/src/main/java/org/intellij/sdk/language/psi/SdTokenType.java b/sd-plugin/src/main/java/org/intellij/sdk/language/psi/SdTokenType.java
index 28bfcac350d..98e7494389d 100644
--- a/sd-plugin/src/main/java/org/intellij/sdk/language/psi/SdTokenType.java
+++ b/sd-plugin/src/main/java/org/intellij/sdk/language/psi/SdTokenType.java
@@ -6,6 +6,10 @@ import org.intellij.sdk.language.SdLanguage;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
+/**
+ * This class represent a SdTokenType.
+ * @author shahariel
+ */
public class SdTokenType extends IElementType {
public SdTokenType(@NotNull @NonNls String debugName) {
diff --git a/sd-plugin/src/main/java/org/intellij/sdk/language/psi/impl/SdNamedElementImpl.java b/sd-plugin/src/main/java/org/intellij/sdk/language/psi/impl/SdNamedElementImpl.java
index 58f54255c7d..2901a642904 100644
--- a/sd-plugin/src/main/java/org/intellij/sdk/language/psi/impl/SdNamedElementImpl.java
+++ b/sd-plugin/src/main/java/org/intellij/sdk/language/psi/impl/SdNamedElementImpl.java
@@ -6,6 +6,11 @@ import com.intellij.lang.ASTNode;
import org.intellij.sdk.language.psi.SdNamedElement;
import org.jetbrains.annotations.NotNull;
+/**
+ * This abstract class is used to wrap a Psi Element with SdNamedElement interface, which enables the element to be a
+ * "name owner" (like an identifier). It allows the element to take a part in references, find usages and more.
+ * @author shahariel
+ */
public abstract class SdNamedElementImpl extends ASTWrapperPsiElement implements SdNamedElement {
public SdNamedElementImpl(@NotNull ASTNode node) {
diff --git a/sd-plugin/src/main/java/org/intellij/sdk/language/psi/impl/SdPsiImplUtil.java b/sd-plugin/src/main/java/org/intellij/sdk/language/psi/impl/SdPsiImplUtil.java
index 4fe6f82cad8..bbe140070fe 100644
--- a/sd-plugin/src/main/java/org/intellij/sdk/language/psi/impl/SdPsiImplUtil.java
+++ b/sd-plugin/src/main/java/org/intellij/sdk/language/psi/impl/SdPsiImplUtil.java
@@ -6,16 +6,16 @@ import com.intellij.lang.ASTNode;
import com.intellij.navigation.ItemPresentation;
import com.intellij.openapi.util.TextRange;
import com.intellij.psi.PsiElement;
-import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiReference;
import com.intellij.psi.util.PsiTreeUtil;
import org.intellij.sdk.language.SdIcons;
import org.intellij.sdk.language.SdReference;
import org.intellij.sdk.language.SdUtil;
-import org.intellij.sdk.language.hierarchy.SdHierarchyUtil;
+import org.intellij.sdk.language.psi.SdAnnotationFieldDefinition;
import org.intellij.sdk.language.psi.SdArgumentDefinition;
import org.intellij.sdk.language.psi.SdDeclaration;
import org.intellij.sdk.language.psi.SdDeclarationType;
+import org.intellij.sdk.language.psi.SdDocumentAnnotationDefinition;
import org.intellij.sdk.language.psi.SdDocumentDefinition;
import org.intellij.sdk.language.psi.SdDocumentFieldDefinition;
import org.intellij.sdk.language.psi.SdDocumentStructDefinition;
@@ -32,6 +32,7 @@ import org.intellij.sdk.language.psi.SdImportFieldDefinition;
import org.intellij.sdk.language.psi.SdItemRawScoreDefinition;
import org.intellij.sdk.language.psi.SdQueryDefinition;
import org.intellij.sdk.language.psi.SdRankProfileDefinition;
+import org.intellij.sdk.language.psi.SdSchemaAnnotationDefinition;
import org.intellij.sdk.language.psi.SdSchemaFieldDefinition;
import org.intellij.sdk.language.psi.SdStructFieldDefinition;
import org.intellij.sdk.language.psi.SdSummaryDefinition;
@@ -42,8 +43,9 @@ import org.jetbrains.annotations.Nullable;
import javax.swing.Icon;
/**
- * I this class there are implementations of methods from rules in the .bnf file. While generating the psi files
+ * In this class there are implementations of methods of rules in the .bnf file. While generating the psi files
* (classes and interfaces) the implementations would be taken from here.
+ * @author shahariel
*/
public class SdPsiImplUtil {
@@ -69,12 +71,17 @@ public class SdPsiImplUtil {
return SdDeclarationType.DOCUMENT;
} else if (declaration instanceof SdDocumentStructDefinition) {
return SdDeclarationType.STRUCT;
+ } else if (declaration instanceof SdSchemaAnnotationDefinition ||
+ declaration instanceof SdDocumentAnnotationDefinition) {
+ return SdDeclarationType.ANNOTATION;
} else if (declaration instanceof SdDocumentStructFieldDefinition) {
return SdDeclarationType.DOCUMENT_STRUCT_FIELD;
} else if (declaration instanceof SdDocumentFieldDefinition) {
return SdDeclarationType.DOCUMENT_FIELD;
} else if (declaration instanceof SdStructFieldDefinition) {
return SdDeclarationType.STRUCT_FIELD;
+ } else if (declaration instanceof SdAnnotationFieldDefinition) {
+ return SdDeclarationType.ANNOTATION_FIELD;
} else if (declaration instanceof SdQueryDefinition) {
return SdDeclarationType.QUERY;
} else if (declaration instanceof SdItemRawScoreDefinition) {
@@ -120,7 +127,7 @@ public class SdPsiImplUtil {
// ################################### //
// ##### getName implementations ##### //
// ################################### //
-
+
@NotNull
public static String getName(SdIdentifier element) {
if (element != null) {
@@ -137,7 +144,7 @@ public class SdPsiImplUtil {
if (declaration instanceof SdImportFieldDefinition) {
ASTNode asNode = declaration.getNode().findChildByType(SdTypes.AS);
node = declaration.getNode().findChildByType(SdTypes.IDENTIFIER_VAL, asNode);
- } else if (declaration instanceof SdRankProfileDefinition || declaration instanceof SdDocumentSummaryDefinition
+ } else if (declaration instanceof SdRankProfileDefinition || declaration instanceof SdDocumentSummaryDefinition
|| declaration instanceof SdQueryDefinition) {
node = declaration.getNode().findChildByType(SdTypes.IDENTIFIER_WITH_DASH_VAL);
} else {
@@ -254,7 +261,7 @@ public class SdPsiImplUtil {
public String getPresentableText() {
if (element instanceof SdFunctionDefinition) {
return SdUtil.createFunctionDescription((SdFunctionDefinition) element);
- }
+ }
SdRankProfileDefinition rankProfileParent = PsiTreeUtil.getParentOfType(element, SdRankProfileDefinition.class);
if (rankProfileParent != null) {
if (element instanceof SdQueryDefinition || element instanceof SdItemRawScoreDefinition) {
@@ -277,7 +284,8 @@ public class SdPsiImplUtil {
if (element instanceof SdFile) {
return SdIcons.FILE;
} else if (element instanceof SdSchemaFieldDefinition || element instanceof SdDocumentFieldDefinition ||
- element instanceof SdQueryDefinition || element instanceof SdItemRawScoreDefinition) {
+ element instanceof SdAnnotationFieldDefinition || element instanceof SdQueryDefinition ||
+ element instanceof SdItemRawScoreDefinition) {
return AllIcons.Nodes.Field;
} else if (element instanceof SdStructFieldDefinition ||
element instanceof SdDocumentStructFieldDefinition) {
@@ -296,6 +304,9 @@ public class SdPsiImplUtil {
return SdIcons.DOCUMENT_SUMMARY;
} else if (element instanceof SdDocumentDefinition) {
return SdIcons.DOCUMENT;
+ } else if (element instanceof SdSchemaAnnotationDefinition ||
+ element instanceof SdDocumentAnnotationDefinition) {
+ return AllIcons.Nodes.ObjectTypeAttribute;
}
else {
return null;
@@ -306,7 +317,7 @@ public class SdPsiImplUtil {
public static ItemPresentation getPresentation(final SdSummaryDefinition element) {
return new ItemPresentation() {
-
+
@Override
public String getPresentableText() {
return element.getName();
@@ -327,7 +338,7 @@ public class SdPsiImplUtil {
public static ItemPresentation getPresentation(final SdFirstPhaseDefinition element) {
return new ItemPresentation() {
-
+
@Override
public String getPresentableText() {
SdRankProfileDefinition rankProfile = PsiTreeUtil.getParentOfType(element, SdRankProfileDefinition.class);
diff --git a/sd-plugin/src/main/java/org/intellij/sdk/language/sd.flex b/sd-plugin/src/main/java/org/intellij/sdk/language/sd.flex
index c657af4f658..02c14a53358 100644
--- a/sd-plugin/src/main/java/org/intellij/sdk/language/sd.flex
+++ b/sd-plugin/src/main/java/org/intellij/sdk/language/sd.flex
@@ -1,12 +1,19 @@
package org.intellij.sdk.language.lexer;
import com.intellij.lexer.FlexLexer;
-import com.intellij.psi.tree.IElementType;import com.intellij.ui.components.MultiColumnList;import org.intellij.sdk.language.psi.SdTokenType;
+import com.intellij.psi.tree.IElementType;
+import com.intellij.ui.components.MultiColumnList;
+import org.intellij.sdk.language.psi.SdTokenType;
-import static com.intellij.psi.TokenType.BAD_CHARACTER; // Pre-defined bad character token.
-import static com.intellij.psi.TokenType.WHITE_SPACE; // Pre-defined whitespace character token.
import static org.intellij.sdk.language.psi.SdTypes.*; // That is the class which is specified as `elementTypeHolderClass` in bnf
// grammar file. This will contain all other tokens which we will use.
+import static com.intellij.psi.TokenType.BAD_CHARACTER; // Pre-defined bad character token.
+import static com.intellij.psi.TokenType.WHITE_SPACE; // Pre-defined whitespace character token.
+
+/*
+* This file is used for the generation of the lexer of the SD language.
+* @author shahariel
+*/
%%
@@ -37,11 +44,19 @@ WORD = \w+
%%
<YYINITIAL> {
- // In here, we match keywords. So if a keyword is found, this returns a token which corresponds to that keyword.
- // These tokens are generated using the 'sd.bnf' file and located in the SdTypes class.
- // These tokens are Parsed uses these return values to match token squence to a parser rule.
+ /**
+ In here, we match keywords. So if a keyword is found, this returns a token which corresponds to that keyword.
+ These tokens are generated using the 'sd.bnf' file and located in the SdTypes class.
+ These tokens are Parsed uses these return values to match token squence to a parser rule.
+ */
+
+ /**
+ This list of keywords has to be synchronized with sd.bnf file. If you add a keyword here, you should add it to the
+ sd.bnf file as well (to the rule KeywordOrIdentifier / KeywordNotIdentifier).
+ */
"search" { return SEARCH; }
+ "schema" { return SCHEMA; }
"document" { return DOCUMENT; }
"inherits" { return INHERITS; }
"struct" { return STRUCT; }
@@ -118,6 +133,10 @@ WORD = \w+
"max-hits" { return MAX_HITS; }
"diversity" { return DIVERSITY; }
"min-groups" { return MIN_GROUPS; }
+ "cutoff-factor" { return CUTOFF_FACTOR; }
+ "cutoff-strategy" { return CUTOFF_STRATEGY; }
+ "loose" { return LOOSE; }
+ "strict" { return STRICT; }
"rank-properties" { return RANK_PROPERTIES; }
"first-phase" { return FIRST_PHASE; }
@@ -132,7 +151,6 @@ WORD = \w+
"min-hits-per-thread" { return MIN_HITS_PER_THREAD; }
"num-search-partition" { return NUM_SEARCH_PARTITION; }
"constants" { return CONSTANTS; }
- "literal" { return LITERAL; }
"second-phase" { return SECOND_PHASE; }
"rerank-count" { return RERANK_COUNT; }
@@ -170,6 +188,9 @@ WORD = \w+
"rank-type" { return RANK_TYPE; }
"onnx-model" { return ONNX_MODEL; }
"raw-as-base64-in-summary" { return RAW_AS_BASE64_IN_SUMMARY; }
+ "on-match" { return ON_MATCH; }
+ "on-rank" { return ON_RANK; }
+ "on-summary" { return ON_SUMMARY; }
"function" { return FUNCTION; }
"macro" { return MACRO; }
diff --git a/sd-plugin/src/main/java/org/intellij/sdk/language/structure/SdStructureViewElement.java b/sd-plugin/src/main/java/org/intellij/sdk/language/structure/SdStructureViewElement.java
index 125f894d1de..493047c0363 100644
--- a/sd-plugin/src/main/java/org/intellij/sdk/language/structure/SdStructureViewElement.java
+++ b/sd-plugin/src/main/java/org/intellij/sdk/language/structure/SdStructureViewElement.java
@@ -9,61 +9,67 @@ import com.intellij.navigation.ItemPresentation;
import com.intellij.psi.NavigatablePsiElement;
import com.intellij.psi.PsiElement;
import org.intellij.sdk.language.SdUtil;
+import org.intellij.sdk.language.psi.SdDocumentAnnotationDefinition;
import org.intellij.sdk.language.psi.SdDocumentDefinition;
import org.intellij.sdk.language.psi.SdDocumentStructDefinition;
import org.intellij.sdk.language.psi.SdDocumentSummaryDefinition;
import org.intellij.sdk.language.psi.SdFile;
import org.intellij.sdk.language.psi.SdRankProfileDefinition;
+import org.intellij.sdk.language.psi.SdSchemaAnnotationDefinition;
import org.jetbrains.annotations.NotNull;
import java.util.ArrayList;
import java.util.List;
+/**
+ * This class is used for the presentation of an element in the "Structure View" window.
+ * @author shahariel
+ */
public class SdStructureViewElement implements StructureViewTreeElement, SortableTreeElement {
-
+
private final NavigatablePsiElement myElement;
-
+
public SdStructureViewElement(NavigatablePsiElement element) {
this.myElement = element;
}
-
+
@Override
public Object getValue() {
return myElement;
}
-
+
@Override
public void navigate(boolean requestFocus) {
myElement.navigate(requestFocus);
}
-
+
@Override
public boolean canNavigate() {
return myElement.canNavigate();
}
-
+
@Override
public boolean canNavigateToSource() {
return myElement.canNavigateToSource();
}
-
+
@NotNull
@Override
public String getAlphaSortKey() {
String name = myElement.getName();
return name != null ? name : "";
}
-
+
@NotNull
@Override
public ItemPresentation getPresentation() {
ItemPresentation presentation = myElement.getPresentation();
return presentation != null ? presentation : new PresentationData();
}
-
+
@Override
public TreeElement @NotNull [] getChildren() {
- List<PsiElement> children = new ArrayList<>();;
+ List<PsiElement> children = new ArrayList<>();
if (myElement instanceof SdFile) {
children = SdUtil.findSchemaChildren(myElement);
} else if (myElement instanceof SdDocumentDefinition) {
@@ -74,6 +80,9 @@ public class SdStructureViewElement implements StructureViewTreeElement, Sortabl
children = SdUtil.findRankProfileChildren(myElement);
} else if (myElement instanceof SdDocumentSummaryDefinition) {
children = SdUtil.findDocumentSummaryChildren(myElement);
+ } else if (myElement instanceof SdSchemaAnnotationDefinition ||
+ myElement instanceof SdDocumentAnnotationDefinition) {
+ children = SdUtil.findAnnotationChildren(myElement);
}
List<TreeElement> treeElements = new ArrayList<>(children.size());
diff --git a/sd-plugin/src/main/java/org/intellij/sdk/language/structure/SdStructureViewFactory.java b/sd-plugin/src/main/java/org/intellij/sdk/language/structure/SdStructureViewFactory.java
index b1cc49f0265..6ca4c979ef0 100644
--- a/sd-plugin/src/main/java/org/intellij/sdk/language/structure/SdStructureViewFactory.java
+++ b/sd-plugin/src/main/java/org/intellij/sdk/language/structure/SdStructureViewFactory.java
@@ -10,6 +10,11 @@ import com.intellij.psi.PsiFile;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
+/**
+ * This class is used for the extension (in plugin.xml) to the class SdStructureViewModel. It make the IDE use our
+ * plugin's code when creating the "Structure View" window.
+ * @author shahariel
+ */
public class SdStructureViewFactory implements PsiStructureViewFactory {
@Nullable
diff --git a/sd-plugin/src/main/java/org/intellij/sdk/language/structure/SdStructureViewModel.java b/sd-plugin/src/main/java/org/intellij/sdk/language/structure/SdStructureViewModel.java
index 13cffbdb65e..00cf18565aa 100644
--- a/sd-plugin/src/main/java/org/intellij/sdk/language/structure/SdStructureViewModel.java
+++ b/sd-plugin/src/main/java/org/intellij/sdk/language/structure/SdStructureViewModel.java
@@ -8,6 +8,9 @@ import com.intellij.ide.util.treeView.smartTree.Sorter;
import com.intellij.psi.PsiFile;
import org.jetbrains.annotations.NotNull;
+/**
+ * This class represents the "Structure View" window.
+ */
public class SdStructureViewModel extends StructureViewModelBase implements StructureViewModel.ElementInfoProvider {
public SdStructureViewModel(PsiFile psiFile) {
super(psiFile, new SdStructureViewElement(psiFile));
diff --git a/sd-plugin/src/main/resources/META-INF/plugin.xml b/sd-plugin/src/main/resources/META-INF/plugin.xml
index 7466314a429..909efff1799 100644
--- a/sd-plugin/src/main/resources/META-INF/plugin.xml
+++ b/sd-plugin/src/main/resources/META-INF/plugin.xml
@@ -1,10 +1,10 @@
<!-- Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -->
<idea-plugin>
<id>org.intellij.sdk.language</id>
- <name>SdPlugin</name>
-
+ <name>SdReader</name>
+
<!-- Text to display as company information on Preferences/Settings | Plugin page -->
- <vendor email="shahar.ariel@verizonmedia.com">VerizonMedia</vendor>
+ <vendor email="shahar.ariel@verizonmedia.com">Yahoo</vendor>
<!-- Product and plugin compatibility requirements -->
<depends>com.intellij.java</depends>
@@ -21,12 +21,12 @@
<depends>com.intellij.java</depends>
<extensions defaultExtensionNs="com.intellij">
- <fileType name="Sd File" implementationClass="org.intellij.sdk.language.SdFileType" fieldName="INSTANCE"
+ <fileType name="Sd File" implementationClass="org.intellij.sdk.language.SdFileType" fieldName="INSTANCE"
language="Sd" extensions="sd"/>
<lang.parserDefinition language="Sd" implementationClass="org.intellij.sdk.language.parser.SdParserDefinition"/>
<lang.syntaxHighlighterFactory language="Sd" implementationClass="org.intellij.sdk.language.SdSyntaxHighlighterFactory"/>
<completion.contributor language="Sd" implementationClass="org.intellij.sdk.language.SdCompletionContributor"/>
-
+
<lang.findUsagesProvider language="Sd" implementationClass="org.intellij.sdk.language.findUsages.SdFindUsagesProvider"/>
<findUsagesHandlerFactory implementation="org.intellij.sdk.language.findUsages.SdFindUsagesHandlerFactory"/>
<fileStructureGroupRuleProvider implementation="org.intellij.sdk.language.findUsages.SdRankProfileGroupingRuleProvider"/>
@@ -34,7 +34,6 @@
<elementDescriptionProvider implementation="org.intellij.sdk.language.psi.SdElementDescriptionProvider"/>
<lang.psiStructureViewFactory language="Sd" implementationClass="org.intellij.sdk.language.structure.SdStructureViewFactory"/>
- <lang.formatter language="Sd" implementationClass="org.intellij.sdk.language.SdFormattingModelBuilder"/>
<codeStyleSettingsProvider implementation="org.intellij.sdk.language.SdCodeStyleSettingsProvider"/>
<langCodeStyleSettingsProvider implementation="org.intellij.sdk.language.SdLanguageCodeStyleSettingsProvider"/>
<lang.commenter language="Sd" implementationClass="org.intellij.sdk.language.SdCommenter"/>