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
No related branches found
No related tags found
No related merge requests found
......@@ -3,38 +3,119 @@ package org.jastadd.tooling;
import com.intellij.codeInsight.completion.*;
import com.intellij.codeInsight.lookup.LookupElementBuilder;
import com.intellij.patterns.PlatformPatterns;
import com.intellij.psi.tree.TokenSet;
import com.intellij.util.ProcessingContext;
import org.jastadd.tooling.parser.RelAstGrammarTypes;
import org.jastadd.tooling.psi.RelAstGrammarElementFactory;
import org.jastadd.tooling.psi.RelAstGrammarTypeDecl;
import org.jastadd.tooling.psi.RelAstGrammarTypeReference;
import org.jetbrains.annotations.NotNull;
public class RelAstGrammarCompletionContributor extends CompletionContributor {
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<>() {
public void addCompletions(@NotNull CompletionParameters parameters,
@NotNull ProcessingContext context,
@NotNull CompletionResultSet resultSet) {
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<>() {
public void addCompletions(@NotNull CompletionParameters parameters,
@NotNull ProcessingContext context,
@NotNull CompletionResultSet resultSet) {
for (RelAstGrammarTypeDecl decl : RelAstGrammarUtil.findTypeDecl(parameters.getPosition().getProject())) {
resultSet.addElement(LookupElementBuilder.create(decl.getDeclaredName().getText()));
resultSet = resultSet.withPrefixMatcher("");
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 @@
<codeInsight.lineMarkerProvider language="JAVA"
implementationClass="org.jastadd.tooling.RelAstGrammarLineMarkerProvider"/>
<!-- <completion.contributor language="JastAddGrammar"-->
<!-- implementationClass="org.jastadd.tooling.RelAstGrammarCompletionContributor"/>-->
<completion.contributor language="JastAddGrammar"
implementationClass="org.jastadd.tooling.RelAstGrammarCompletionContributor"/>
<psi.referenceContributor implementation="org.jastadd.tooling.RelAstGrammarReferenceContributor"/>
<lang.refactoringSupport language="JastAddGrammar"
implementationClass="org.jastadd.tooling.RelAstGrammarRefactoringSupportProvider"/>
<lang.elementManipulator />
<lang.elementManipulator forClass="org.jastadd.tooling.psi.RelAstGrammarTypeReference" implementationClass="org.jastadd.tooling.psi.RelAstGrammarTypeReferenceManipulator"/>
</extensions>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment