Skip to content

Commit 24b4c92

Browse files
committed
completion and reference resolving
1 parent 3e219a8 commit 24b4c92

File tree

4 files changed

+96
-8
lines changed

4 files changed

+96
-8
lines changed

build.gradle

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,9 @@ intellij {
6161
patchPluginXml {
6262
changeNotes """
6363
<ul>
64-
<li>Support for 2020.1</li>
64+
<li>Line comment action</li>
65+
<li>Scope based reference resolving</li>
66+
<li>Basic keywords completion</li>
6567
</ul>
6668
"""
6769
}
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
package com.interfaced.brs.lang.completion
2+
3+
import com.intellij.codeInsight.completion.*
4+
import com.intellij.codeInsight.lookup.LookupElementBuilder
5+
import com.intellij.patterns.PlatformPatterns.psiElement
6+
import com.intellij.patterns.StandardPatterns
7+
import com.intellij.util.ProcessingContext
8+
import com.interfaced.brs.lang.psi.BrsTypes.T_AS
9+
import com.interfaced.brs.lang.psi.BrsTypes.T_LINE_TERMINATOR
10+
11+
class BrsCompletionContributor : CompletionContributor() {
12+
private object KeywordCompletionProvider : CompletionProvider<CompletionParameters>() {
13+
private val keywords = listOf(
14+
"And",
15+
"Dim",
16+
"Each",
17+
"Else",
18+
"ElseIf",
19+
"End",
20+
"EndFunction",
21+
"EndIf",
22+
"EndSub",
23+
"EndWhile",
24+
"Exit",
25+
"ExitWhile",
26+
"False",
27+
"For",
28+
"Function",
29+
"Goto",
30+
"If",
31+
"Next",
32+
"Not",
33+
"Or",
34+
"Print",
35+
"Rem",
36+
"Return",
37+
"Step",
38+
"Stop",
39+
"Sub",
40+
"Then",
41+
"To",
42+
"True",
43+
"While"
44+
)
45+
override fun addCompletions(parameters: CompletionParameters, context: ProcessingContext, resultSet: CompletionResultSet) {
46+
resultSet.addAllElements(listOf(keywords, keywords.map { it.toLowerCase() })
47+
.flatMap { it.map { str -> LookupElementBuilder.create(str) } })
48+
}
49+
}
50+
51+
private object TypesCompletionProvider : CompletionProvider<CompletionParameters>() {
52+
private val keywords = listOf(
53+
"Boolean",
54+
"Integer",
55+
"LongInteger",
56+
"Float",
57+
"Double",
58+
"String",
59+
"Object",
60+
"Function",
61+
"Interface",
62+
"Invalid"
63+
)
64+
override fun addCompletions(parameters: CompletionParameters, context: ProcessingContext, resultSet: CompletionResultSet) {
65+
resultSet.addAllElements(listOf(keywords, keywords.map { it.toLowerCase() })
66+
.flatMap { it.map { str -> LookupElementBuilder.create(str) } })
67+
}
68+
}
69+
70+
init {
71+
extend(CompletionType.BASIC, StandardPatterns.or(psiElement().afterLeaf(psiElement(T_LINE_TERMINATOR)), psiElement().isNull), KeywordCompletionProvider)
72+
extend(CompletionType.BASIC, psiElement().afterLeaf(psiElement(T_AS)), TypesCompletionProvider)
73+
}
74+
}

src/main/kotlin/com/interfaced/brs/lang/psi/BrsReference.kt

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -88,14 +88,25 @@ class BrsReference(element: BrsElement, textRange: TextRange) : PsiReferenceBase
8888
val candidates = mutableListOf<PsiElement>()
8989
val file = element.containingFile
9090

91-
PsiTreeUtil.treeWalkUp(element, file) { current, _ ->
91+
PsiTreeUtil.treeWalkUp(element, file) { current, prev ->
9292
when (current) {
93-
is PsiFile, is BrsForStmt, is BrsFunctionStmt, is BrsAnonFunctionStmtExpr, is BrsSubStmt -> {
94-
val scopeCandidate = resolveInLocalScope(current)
95-
if (scopeCandidate != null) {
96-
candidates.add(scopeCandidate)
97-
false
98-
} else true
93+
is PsiFile,
94+
is BrsIfStmt,
95+
is BrsElseIfStmt,
96+
is BrsElseStmt,
97+
is BrsForStmt,
98+
is BrsFunctionStmt,
99+
is BrsWhileStmt,
100+
is BrsAnonFunctionStmtExpr,
101+
is BrsSubStmt -> {
102+
if (current is BrsIfStmt && (prev is BrsElseIfStmt || prev is BrsElseStmt)) true
103+
else {
104+
val scopeCandidate = resolveInLocalScope(current)
105+
if (scopeCandidate != null) {
106+
candidates.add(scopeCandidate)
107+
false
108+
} else true
109+
}
99110
}
100111
else -> true
101112
}

src/main/resources/META-INF/plugin.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,5 +31,6 @@
3131
<colorSettingsPage implementation="com.interfaced.brs.ide.colors.BrsColorSettingsPage"/>
3232
<highlightVisitor implementation="com.interfaced.brs.editor.highlight.BrsHighlighterVisitor"/>
3333
<elementDescriptionProvider implementation="com.interfaced.brs.lang.BrsDescriptionProvider"/>
34+
<completion.contributor language="BrightScript" implementationClass="com.interfaced.brs.lang.completion.BrsCompletionContributor"/>
3435
</extensions>
3536
</idea-plugin>

0 commit comments

Comments
 (0)