Skip to content

Commit 9f33f89

Browse files
committed
feat(devin-lang): improve code completion for DevInTypes.VARIABLE_ID #101
The completion provider now uses the `MyInsertHandler` to insert a newline and move the caret after inserting a variable identifier, providing a better user experience for code completion within DevInTypes.VARIABLE_ID. Additionally, the completion provider now iterates over all injectable languages and adds them as lookup elements, each with its type text and an insert handler, improving the overall functionality of the completion feature.
1 parent 0a863f7 commit 9f33f89

File tree

2 files changed

+20
-10
lines changed

2 files changed

+20
-10
lines changed

exts/devin-lang/src/main/kotlin/cc/unitmesh/language/DevInCompletionContributor.kt

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,7 @@ class DevInCompletionContributor : CompletionContributor() {
1212
private val INPUT_DUMMY_IDENTIFIER = "AutoDevDummy"
1313

1414
init {
15-
extend(
16-
CompletionType.BASIC,
17-
psiElement(DevInTypes.VARIABLE_ID),
18-
VariableProvider()
19-
)
15+
extend(CompletionType.BASIC, psiElement(DevInTypes.VARIABLE_ID), VariableProvider())
2016
}
2117

2218
override fun beforeCompletion(context: CompletionInitializationContext) {
Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,30 @@
11
package cc.unitmesh.language.completion
22

3-
import com.intellij.codeInsight.completion.CompletionParameters
4-
import com.intellij.codeInsight.completion.CompletionProvider
5-
import com.intellij.codeInsight.completion.CompletionResultSet
3+
import com.intellij.codeInsight.completion.*
4+
import com.intellij.codeInsight.lookup.LookupElement
5+
import com.intellij.codeInsight.lookup.LookupElementBuilder
6+
import com.intellij.lang.LanguageUtil
67
import com.intellij.util.ProcessingContext
78

8-
class CodeLanguageProvider: CompletionProvider<CompletionParameters>() {
9+
class CodeLanguageProvider : CompletionProvider<CompletionParameters>() {
910
override fun addCompletions(
1011
parameters: CompletionParameters,
1112
context: ProcessingContext,
1213
result: CompletionResultSet,
1314
) {
14-
TODO("Not yet implemented")
15+
for (language in LanguageUtil.getInjectableLanguages()) {
16+
val id = language.id
17+
val handler = LookupElementBuilder.create(id)
18+
.withTypeText(language.displayName, true)
19+
.withInsertHandler(MyInsertHandler())
20+
result.addElement(handler)
21+
}
22+
}
23+
24+
private class MyInsertHandler : InsertHandler<LookupElement> {
25+
override fun handleInsert(context: InsertionContext, item: LookupElement) {
26+
context.document.insertString(context.tailOffset, "\n\n")
27+
context.editor.caretModel.moveCaretRelatively(1, 0, false, false, false)
28+
}
1529
}
1630
}

0 commit comments

Comments
 (0)