Skip to content

Commit d83285e

Browse files
committed
feat(completion): add toolchain command completion support #308
Introduce ToolchainCommandCompletion to provide autocompletion for toolchain commands. Extend DevInCompletionContributor to include the new completion provider and add allToolchains() method in BuiltinCommand to fetch toolchain commands.
1 parent 037a64c commit d83285e

File tree

3 files changed

+47
-0
lines changed

3 files changed

+47
-0
lines changed

core/src/main/kotlin/cc/unitmesh/devti/devin/dataprovider/BuiltinCommand.kt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,18 @@ enum class BuiltinCommand(
158158
return providerName
159159
}
160160

161+
fun allToolchains(): List<String> {
162+
return ToolchainFunctionProvider.all().map {
163+
val toolInfo = it.toolInfo()
164+
if (toolInfo != null) {
165+
val base = toolInfo.commandName
166+
return@map it.funcNames().map { "$base:$it" }
167+
}
168+
169+
it.funcNames()
170+
}.flatten()
171+
}
172+
161173
val READ_COMMANDS =
162174
setOf(DIR, LOCAL_SEARCH, FILE, REV, STRUCTURE, SYMBOL, DATABASE, RELATED, RIPGREP_SEARCH, BROWSE)
163175
}

exts/devins-lang/src/main/kotlin/cc/unitmesh/devti/language/completion/DevInCompletionContributor.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ class DevInCompletionContributor : CompletionContributor() {
2020
extend(CompletionType.BASIC, PlatformPatterns.psiElement(DevInTypes.VARIABLE_ID), AgentToolOverviewCompletion())
2121

2222
extend(CompletionType.BASIC, PlatformPatterns.psiElement(DevInTypes.COMMAND_ID), BuiltinCommandCompletion())
23+
extend(CompletionType.BASIC, PlatformPatterns.psiElement(DevInTypes.COMMAND_ID), ToolchainCommandCompletion())
2324
extend(CompletionType.BASIC, PlatformPatterns.psiElement(DevInTypes.AGENT_ID), CustomAgentCompletion())
2425

2526
extend(
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package cc.unitmesh.devti.language.completion.provider
2+
3+
import cc.unitmesh.devti.devin.dataprovider.BuiltinCommand
4+
import com.intellij.codeInsight.AutoPopupController
5+
import com.intellij.codeInsight.completion.*
6+
import com.intellij.codeInsight.lookup.LookupElementBuilder
7+
import com.intellij.util.ProcessingContext
8+
9+
class ToolchainCommandCompletion : CompletionProvider<CompletionParameters>() {
10+
override fun addCompletions(
11+
parameters: CompletionParameters,
12+
context: ProcessingContext,
13+
result: CompletionResultSet,
14+
) {
15+
BuiltinCommand.allToolchains().forEach {
16+
val lookupElement = createCommandCompletionCandidate(it)
17+
result.addElement(lookupElement)
18+
}
19+
}
20+
21+
private fun createCommandCompletionCandidate(it: String) =
22+
PrioritizedLookupElement.withPriority(
23+
LookupElementBuilder.create(it)
24+
.withInsertHandler { context, _ ->
25+
context.document.insertString(context.tailOffset, ":")
26+
context.editor.caretModel.moveCaretRelatively(1, 0, false, false, false)
27+
28+
val editor = context.editor
29+
AutoPopupController.getInstance(editor.project!!).scheduleAutoPopup(editor)
30+
},
31+
98.0
32+
)
33+
}
34+

0 commit comments

Comments
 (0)