Skip to content

Commit c101452

Browse files
committed
feat(completion): add completion for top-level function definitions
Fixes #78
1 parent 87f22dd commit c101452

File tree

3 files changed

+56
-19
lines changed

3 files changed

+56
-19
lines changed

src/main/kotlin/org/tonstudio/tact/lang/completion/contributors/TactCompletionContributor.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import org.tonstudio.tact.lang.completion.TactCompletionPatterns.cachedReference
88
import org.tonstudio.tact.lang.completion.TactCompletionPatterns.onAsmInstruction
99
import org.tonstudio.tact.lang.completion.TactCompletionPatterns.onContractTraitTopLevel
1010
import org.tonstudio.tact.lang.completion.TactCompletionPatterns.onStatement
11+
import org.tonstudio.tact.lang.completion.TactCompletionPatterns.onTopLevel
1112
import org.tonstudio.tact.lang.completion.TactCompletionPatterns.referenceExpression
1213
import org.tonstudio.tact.lang.completion.providers.*
1314
import org.tonstudio.tact.lang.completion.sort.withTactSorter
@@ -18,6 +19,8 @@ class TactCompletionContributor : CompletionContributor() {
1819
extend(CompletionType.BASIC, cachedReferenceExpression(), ReferenceCompletionProvider)
1920
extend(CompletionType.BASIC, referenceExpression(), TlbTypesCompletionProvider)
2021

22+
extend(CompletionType.BASIC, onTopLevel(), FunctionDefinitionCompletionProvider)
23+
2124
extend(CompletionType.BASIC, onContractTraitTopLevel(), ReceiversCompletionProvider)
2225
extend(CompletionType.BASIC, onContractTraitTopLevel(), ContractInitCompletionProvider)
2326
extend(CompletionType.BASIC, onContractTraitTopLevel(), ContractTraitMembersCompletionProvider)

src/main/kotlin/org/tonstudio/tact/lang/completion/contributors/TactKeywordsCompletionContributor.kt

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -28,14 +28,6 @@ class TactKeywordsCompletionContributor : CompletionContributor() {
2828
extend(CompletionType.BASIC, onTopLevel(), ConstCompletionProvider)
2929
extend(CompletionType.BASIC, onTopLevel(), ImportsCompletionProvider())
3030

31-
extend(
32-
CompletionType.BASIC,
33-
onTopLevel(),
34-
ContextKeywordsCompletionProvider(
35-
"fun",
36-
needSpace = true,
37-
)
38-
)
3931
extend(
4032
CompletionType.BASIC,
4133
onTopLevel(),
@@ -174,17 +166,6 @@ class TactKeywordsCompletionContributor : CompletionContributor() {
174166
}
175167
}
176168

177-
open class ContextKeywordsCompletionProvider(
178-
vararg keywords: String,
179-
needSpace: Boolean = false,
180-
) : KeywordsCompletionProvider(
181-
*keywords,
182-
needSpace = needSpace,
183-
properties = TactLookupElementProperties(
184-
isContextElement = true,
185-
),
186-
)
187-
188169
open class KeywordsCompletionProvider(
189170
private vararg val keywords: String,
190171
private val needSpace: Boolean = false,
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package org.tonstudio.tact.lang.completion.providers
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.codeInsight.template.impl.ConstantNode
8+
import com.intellij.util.ProcessingContext
9+
import org.tonstudio.tact.lang.completion.TactCompletionUtil
10+
11+
object FunctionDefinitionCompletionProvider : CompletionProvider<CompletionParameters>() {
12+
override fun addCompletions(parameters: CompletionParameters, context: ProcessingContext, result: CompletionResultSet) {
13+
val modifiers = listOf("", "inline ", "extends ", "asm ")
14+
modifiers.forEach { modifier ->
15+
val element = LookupElementBuilder.create("${modifier}fun")
16+
.bold()
17+
.withTailText(" <name>() {}", true)
18+
.withInsertHandler(
19+
TactCompletionUtil.TemplateStringInsertHandler(
20+
" \$name$(\$params$)\$return$ {\$END$}",
21+
true,
22+
"name" to ConstantNode("foo"),
23+
"params" to ConstantNode(""),
24+
"return" to ConstantNode(""),
25+
)
26+
)
27+
28+
result.addElement(element)
29+
}
30+
31+
val extendsPrefixes = listOf("", "asm ")
32+
val extendsModifiers = listOf("", "mutates ")
33+
extendsPrefixes.forEach { prefix ->
34+
extendsModifiers.forEach { modifier ->
35+
val extendsElement = LookupElementBuilder.create("${prefix}extends ${modifier}fun")
36+
.bold()
37+
.withTailText(" <name>(self: Type) {}", true)
38+
.withInsertHandler(
39+
TactCompletionUtil.TemplateStringInsertHandler(
40+
" \$name$(self: \$type$\$params$)\$return$ {\$END$}",
41+
true,
42+
"name" to ConstantNode("add"),
43+
"type" to ConstantNode("Int"),
44+
"params" to ConstantNode(""),
45+
"return" to ConstantNode(""),
46+
)
47+
)
48+
49+
result.addElement(extendsElement)
50+
}
51+
}
52+
}
53+
}

0 commit comments

Comments
 (0)