Skip to content

Commit d75ff21

Browse files
committed
Added code completion feature.
1 parent cd05c94 commit d75ff21

File tree

5 files changed

+56
-7
lines changed

5 files changed

+56
-7
lines changed

build.gradle

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ plugins {
44
id 'java'
55
id 'org.jetbrains.intellij' version '0.6.5'
66
id 'org.jetbrains.kotlin.jvm' version '1.4.10'
7-
id "org.jetbrains.grammarkit" version "2020.2.1"
7+
id "org.jetbrains.grammarkit" version "2020.3.2"
88
}
99

1010
grammarKit {
@@ -13,7 +13,7 @@ grammarKit {
1313
}
1414

1515
group 'co.anbora.labs'
16-
version '2.4.0-SNAPSHOT'
16+
version '2.5.0-SNAPSHOT'
1717

1818
repositories {
1919
mavenCentral()
@@ -61,7 +61,7 @@ sourceSets {
6161

6262
// See https://github.com/JetBrains/gradle-intellij-plugin/
6363
intellij {
64-
version = 'LATEST-EAP-SNAPSHOT'
64+
version = '2020.3.3'
6565
}
6666

6767
tasks.withType(JavaCompile) { options.encoding = 'UTF-8' }
@@ -77,6 +77,12 @@ publishPlugin {
7777
patchPluginXml {
7878
changeNotes """
7979
<ul>
80+
<li><b>2.5.0</b> <em>(2021-03-17)</em> - Added basic code completation</li>
81+
<ul>
82+
<li>Added basic code completation </li>
83+
<li>Fixed issue with access index array </li>
84+
</ul>
85+
</li>
8086
<li><b>2.4.0</b> <em>(2021-02-14)</em> - Added code folding</li>
8187
<ul>
8288
<li>Added code folding </li>

src/main/kotlin/co/anbora/labs/firebase/lang/core/FirebasePsiPatterns.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,11 @@ object FirebasePsiPatterns {
2323
fun serviceStatement(): PsiElementPattern.Capture<PsiElement> =
2424
psiElementWithParent<FirebaseRulesServiceDef>()
2525

26-
fun serviceBlock(): PsiElementPattern.Capture<PsiElement> =
27-
psiElementWithParent<FirebaseRulesServiceBlock>()
26+
fun pathStatement(): PsiElementPattern.Capture<PsiElement> =
27+
psiElementWithParent<FirebaseRulesPathStatement>()
2828

29-
fun matchStatement(): PsiElementPattern.Capture<PsiElement> =
30-
psiElementWithParent<FirebaseRulesMatchDef>()
29+
fun permissionStatement(): PsiElementPattern.Capture<PsiElement> =
30+
psiElementWithParent<FirebaseRulesPermissionStatement>()
3131

3232
fun allowStatement(): PsiElementPattern.Capture<PsiElement> =
3333
psiElementWithParent<FirebaseRulesAllowStatement>()

src/main/kotlin/co/anbora/labs/firebase/lang/core/completion/FirebaseCompletionContributor.kt

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
package co.anbora.labs.firebase.lang.core.completion
22

33
import co.anbora.labs.firebase.lang.FirebaseRulesLanguage
4+
import co.anbora.labs.firebase.lang.core.FirebasePsiPatterns.pathStatement
5+
import co.anbora.labs.firebase.lang.core.FirebasePsiPatterns.permissionStatement
6+
import co.anbora.labs.firebase.lang.core.FirebasePsiPatterns.serviceStatement
47
import com.intellij.codeInsight.completion.CompletionContributor
58
import com.intellij.codeInsight.completion.CompletionType.BASIC
69
import com.intellij.patterns.PlatformPatterns.psiElement
@@ -17,5 +20,20 @@ class FirebaseCompletionContributor: CompletionContributor() {
1720
psiElement().withLanguage(FirebaseRulesLanguage),
1821
FirebaseCompletionProvider()
1922
)
23+
extend(
24+
BASIC,
25+
serviceStatement(),
26+
KeywordCompletionProvider(*serviceNameCompletion)
27+
)
28+
extend(
29+
BASIC,
30+
pathStatement(),
31+
KeywordCompletionProvider(*matchPathCompletion)
32+
)
33+
extend(
34+
BASIC,
35+
permissionStatement(),
36+
KeywordCompletionProvider(*allowPermissionCompletion)
37+
)
2038
}
2139
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package co.anbora.labs.firebase.lang.core.completion
2+
3+
import com.intellij.codeInsight.completion.CompletionParameters
4+
import com.intellij.codeInsight.completion.CompletionProvider
5+
import com.intellij.codeInsight.completion.CompletionResultSet
6+
import com.intellij.codeInsight.lookup.LookupElementBuilder
7+
import com.intellij.util.ProcessingContext
8+
9+
class KeywordCompletionProvider(private vararg val keywords: String) : CompletionProvider<CompletionParameters>() {
10+
override fun addCompletions(
11+
parameters: CompletionParameters,
12+
context: ProcessingContext,
13+
result: CompletionResultSet
14+
) {
15+
keywords.forEach { keyword ->
16+
result.addElement(LookupElementBuilder.create(keyword))
17+
}
18+
}
19+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package co.anbora.labs.firebase.lang.core.psi.mixings
2+
3+
import com.intellij.psi.PsiNamedElement
4+
5+
abstract class MatchDefMixing: PsiNamedElement {
6+
}

0 commit comments

Comments
 (0)