Skip to content
Snippets Groups Projects
Commit 87c92099 authored by Johannes Mey's avatar Johannes Mey
Browse files

re-enable and improve completion

parent 4108efb3
Branches
Tags
No related merge requests found
...@@ -3,38 +3,119 @@ package org.jastadd.tooling; ...@@ -3,38 +3,119 @@ package org.jastadd.tooling;
import com.intellij.codeInsight.completion.*; import com.intellij.codeInsight.completion.*;
import com.intellij.codeInsight.lookup.LookupElementBuilder; import com.intellij.codeInsight.lookup.LookupElementBuilder;
import com.intellij.patterns.PlatformPatterns; import com.intellij.patterns.PlatformPatterns;
import com.intellij.psi.tree.TokenSet;
import com.intellij.util.ProcessingContext; import com.intellij.util.ProcessingContext;
import org.jastadd.tooling.parser.RelAstGrammarTypes; import org.jastadd.tooling.parser.RelAstGrammarTypes;
import org.jastadd.tooling.psi.RelAstGrammarElementFactory;
import org.jastadd.tooling.psi.RelAstGrammarTypeDecl; import org.jastadd.tooling.psi.RelAstGrammarTypeDecl;
import org.jastadd.tooling.psi.RelAstGrammarTypeReference;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
public class RelAstGrammarCompletionContributor extends CompletionContributor { public class RelAstGrammarCompletionContributor extends CompletionContributor {
public RelAstGrammarCompletionContributor() { public RelAstGrammarCompletionContributor() {
extend(CompletionType.BASIC, PlatformPatterns.psiElement(RelAstGrammarTypes.ID).withParent(RelAstGrammarTypeReference.class),
// add completion in definition of relations
extend(CompletionType.BASIC, PlatformPatterns.psiElement(RelAstGrammarTypes.ID).afterLeaf("rel", "<->", "->", "<-"),
new CompletionProvider<>() { new CompletionProvider<>() {
public void addCompletions(@NotNull CompletionParameters parameters, public void addCompletions(@NotNull CompletionParameters parameters,
@NotNull ProcessingContext context, @NotNull ProcessingContext context,
@NotNull CompletionResultSet resultSet) { @NotNull CompletionResultSet resultSet) {
for (RelAstGrammarTypeDecl decl : RelAstGrammarUtil.findTypeDecl(parameters.getPosition().getProject())) { for (RelAstGrammarTypeDecl decl : RelAstGrammarUtil.findTypeDecl(parameters.getPosition().getProject())) {
resultSet.addElement(LookupElementBuilder.create(decl.getDeclaredName().getText())); resultSet.addElement(LookupElementBuilder.create(RelAstGrammarElementFactory.createTypeReference(parameters.getPosition().getProject(), decl.getName())));
} }
} }
} }
); );
extend(CompletionType.BASIC, PlatformPatterns.psiElement(RelAstGrammarTypes.ID).afterLeaf("rel", "<->", "->", "<-", ":"), // add "* ", "? " after REL ID DOT ID
extend(CompletionType.BASIC, PlatformPatterns.psiElement(RelAstGrammarTypes.ID)
.withTextLengthLongerThan("IntellijIdeaRulezzz".length()) // see https://intellij-support.jetbrains.com/hc/en-us/community/posts/206752355-The-dreaded-IntellijIdeaRulezzz-string
.afterLeaf(".")
.afterLeaf(PlatformPatterns.psiElement().afterLeaf(PlatformPatterns.psiElement(RelAstGrammarTypes.ID)))
.afterLeaf(PlatformPatterns.psiElement().afterLeaf(PlatformPatterns.psiElement().afterLeaf("rel"))),
new CompletionProvider<>() { new CompletionProvider<>() {
public void addCompletions(@NotNull CompletionParameters parameters, public void addCompletions(@NotNull CompletionParameters parameters,
@NotNull ProcessingContext context, @NotNull ProcessingContext context,
@NotNull CompletionResultSet resultSet) { @NotNull CompletionResultSet resultSet) {
for (RelAstGrammarTypeDecl decl : RelAstGrammarUtil.findTypeDecl(parameters.getPosition().getProject())) { resultSet = resultSet.withPrefixMatcher("");
resultSet.addElement(LookupElementBuilder.create(decl.getDeclaredName().getText())); resultSet.addElement(LookupElementBuilder.create("* ").bold().withPresentableText("*"));
resultSet.addElement(LookupElementBuilder.create("? ").bold().withPresentableText("?"));
}
}
);
// add "*", "?" after <- ID DOT ID
// add "*", "?" after <-> ID DOT ID
extend(CompletionType.BASIC, PlatformPatterns.psiElement(RelAstGrammarTypes.ID)
.withTextLengthLongerThan("IntellijIdeaRulezzz".length()) // see https://intellij-support.jetbrains.com/hc/en-us/community/posts/206752355-The-dreaded-IntellijIdeaRulezzz-string
.afterLeaf(".")
.afterLeaf(PlatformPatterns.psiElement().afterLeaf(PlatformPatterns.psiElement(RelAstGrammarTypes.ID)))
.afterLeaf(PlatformPatterns.psiElement().afterLeaf(PlatformPatterns.psiElement().afterLeaf("<-", "<->"))),
new CompletionProvider<>() {
public void addCompletions(@NotNull CompletionParameters parameters,
@NotNull ProcessingContext context,
@NotNull CompletionResultSet resultSet) {
resultSet = resultSet.withPrefixMatcher("");
resultSet.addElement(LookupElementBuilder.create("*").bold());
resultSet.addElement(LookupElementBuilder.create("?").bold());
} }
} }
);
// add " -> ", " <-> " after REL ID DOT ID <SPACE>
extend(CompletionType.BASIC, PlatformPatterns.psiElement(RelAstGrammarTypes.ID)
.afterLeaf(PlatformPatterns.psiElement(RelAstGrammarTypes.ID))
.afterLeaf(PlatformPatterns.psiElement().afterLeaf("."))
.afterLeaf(PlatformPatterns.psiElement().afterLeaf(PlatformPatterns.psiElement().afterLeaf(PlatformPatterns.psiElement(RelAstGrammarTypes.ID))))
.afterLeaf(PlatformPatterns.psiElement().afterLeaf(PlatformPatterns.psiElement().afterLeaf(PlatformPatterns.psiElement().afterLeaf("rel")))),
new CompletionProvider<>() {
public void addCompletions(@NotNull CompletionParameters parameters,
@NotNull ProcessingContext context,
@NotNull CompletionResultSet resultSet) {
resultSet.addElement(LookupElementBuilder.create("-> ").bold().withPresentableText("->"));
resultSet.addElement(LookupElementBuilder.create("<-> ").bold().withPresentableText("<->"));
}
}
);
// add " -> ", " <-> " after REL ID DOT ID * <SPACE>
// add " -> ", " <-> " after REL ID DOT ID ? <SPACE>
extend(CompletionType.BASIC, PlatformPatterns.psiElement(RelAstGrammarTypes.ID)
.afterLeaf("?", "*")
.afterLeaf(PlatformPatterns.psiElement().afterLeaf(PlatformPatterns.psiElement(RelAstGrammarTypes.ID)))
.afterLeaf(PlatformPatterns.psiElement().afterLeaf(PlatformPatterns.psiElement().afterLeaf(".")))
.afterLeaf(PlatformPatterns.psiElement().afterLeaf(PlatformPatterns.psiElement().afterLeaf(PlatformPatterns.psiElement().afterLeaf(PlatformPatterns.psiElement(RelAstGrammarTypes.ID)))))
.afterLeaf(PlatformPatterns.psiElement().afterLeaf(PlatformPatterns.psiElement().afterLeaf(PlatformPatterns.psiElement().afterLeaf(PlatformPatterns.psiElement().afterLeaf("rel"))))),
new CompletionProvider<>() {
public void addCompletions(@NotNull CompletionParameters parameters,
@NotNull ProcessingContext context,
@NotNull CompletionResultSet resultSet) {
resultSet.addElement(LookupElementBuilder.create("-> ").bold().withPresentableText("->"));
resultSet.addElement(LookupElementBuilder.create("<-> ").bold().withPresentableText("<->"));
}
}
);
// add "." after REL ID
// add "." after <-> ID
// add "." after <- ID
extend(CompletionType.BASIC, PlatformPatterns.psiElement(RelAstGrammarTypes.ID)
.withTextLengthLongerThan("IntellijIdeaRulezzz".length()) // see https://intellij-support.jetbrains.com/hc/en-us/community/posts/206752355-The-dreaded-IntellijIdeaRulezzz-string
.afterLeaf("rel", "<->", "<-"),
new CompletionProvider<>() {
public void addCompletions(@NotNull CompletionParameters parameters,
@NotNull ProcessingContext context,
@NotNull CompletionResultSet resultSet) {
resultSet = resultSet.withPrefixMatcher("");
resultSet.addElement(LookupElementBuilder.create(".").bold());
}
}
);
// add " <- " after REL ID <SPACE>
extend(CompletionType.BASIC, PlatformPatterns.psiElement(RelAstGrammarTypes.ID)
.afterLeaf(PlatformPatterns.psiElement(RelAstGrammarTypes.ID))
.afterLeaf(PlatformPatterns.psiElement().afterLeaf("rel")),
new CompletionProvider<>() {
public void addCompletions(@NotNull CompletionParameters parameters,
@NotNull ProcessingContext context,
@NotNull CompletionResultSet resultSet) {
resultSet.addElement(LookupElementBuilder.create("<- ").bold().withPresentableText("<-"));
}
} }
); );
......
...@@ -28,15 +28,14 @@ ...@@ -28,15 +28,14 @@
<codeInsight.lineMarkerProvider language="JAVA" <codeInsight.lineMarkerProvider language="JAVA"
implementationClass="org.jastadd.tooling.RelAstGrammarLineMarkerProvider"/> implementationClass="org.jastadd.tooling.RelAstGrammarLineMarkerProvider"/>
<!-- <completion.contributor language="JastAddGrammar"--> <completion.contributor language="JastAddGrammar"
<!-- implementationClass="org.jastadd.tooling.RelAstGrammarCompletionContributor"/>--> implementationClass="org.jastadd.tooling.RelAstGrammarCompletionContributor"/>
<psi.referenceContributor implementation="org.jastadd.tooling.RelAstGrammarReferenceContributor"/> <psi.referenceContributor implementation="org.jastadd.tooling.RelAstGrammarReferenceContributor"/>
<lang.refactoringSupport language="JastAddGrammar" <lang.refactoringSupport language="JastAddGrammar"
implementationClass="org.jastadd.tooling.RelAstGrammarRefactoringSupportProvider"/> implementationClass="org.jastadd.tooling.RelAstGrammarRefactoringSupportProvider"/>
<lang.elementManipulator />
<lang.elementManipulator forClass="org.jastadd.tooling.psi.RelAstGrammarTypeReference" implementationClass="org.jastadd.tooling.psi.RelAstGrammarTypeReferenceManipulator"/> <lang.elementManipulator forClass="org.jastadd.tooling.psi.RelAstGrammarTypeReference" implementationClass="org.jastadd.tooling.psi.RelAstGrammarTypeReferenceManipulator"/>
</extensions> </extensions>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment