Skip to content

Commit 68589b8

Browse files
committed
feat(devins-lang): add rule completion and update rule path
- Add RuleCompletionProvider for autocompleting rule names - Update rule file path from 'prompts/rule' to 'prompts/rules' - Extend DevInCompletionContributor to include rule completion
1 parent 58d8bcc commit 68589b8

File tree

3 files changed

+50
-1
lines changed

3 files changed

+50
-1
lines changed

exts/devins-lang/src/main/kotlin/cc/unitmesh/devti/language/compiler/exec/RuleInsCommand.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ class RuleInsCommand(val myProject: Project, private val filename: String) : Ins
1111
override val commandName: BuiltinCommand = BuiltinCommand.OPEN
1212

1313
override suspend fun execute(): String? {
14-
val fullname = "prompts/rule/$filename.md"
14+
val fullname = "prompts/rules/$filename.md"
1515
val file = myProject.lookupFile(fullname)
1616

1717
if (file != null) {

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,11 @@ class DevInCompletionContributor : CompletionContributor() {
5353
valuePattern(BuiltinCommand.DATABASE.commandName),
5454
DatabaseFuncCompletionProvider()
5555
)
56+
extend(
57+
CompletionType.BASIC,
58+
valuePattern(BuiltinCommand.RULE.commandName),
59+
RuleCompletionProvider()
60+
)
5661
}
5762

5863
private inline fun <reified I : PsiElement> psiElement() = PlatformPatterns.psiElement(I::class.java)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package cc.unitmesh.devti.language.completion.provider
2+
3+
import cc.unitmesh.devti.gui.chat.AutoDevFileLookupElement
4+
import com.intellij.codeInsight.completion.CompletionParameters
5+
import com.intellij.codeInsight.completion.CompletionProvider
6+
import com.intellij.codeInsight.completion.CompletionResultSet
7+
import com.intellij.codeInsight.lookup.LookupElement
8+
import com.intellij.codeInsight.lookup.LookupElementBuilder
9+
import com.intellij.openapi.project.guessProjectDir
10+
import com.intellij.openapi.roots.ProjectFileIndex
11+
import com.intellij.openapi.vfs.VirtualFile
12+
import com.intellij.openapi.vfs.isFile
13+
import com.intellij.util.ProcessingContext
14+
15+
class RuleCompletionProvider : CompletionProvider<CompletionParameters>() {
16+
override fun addCompletions(
17+
parameters: CompletionParameters,
18+
context: ProcessingContext,
19+
result: CompletionResultSet,
20+
) {
21+
val project = parameters.position.project
22+
23+
val rulePath = "prompts/rules"
24+
val ruleDir = project.guessProjectDir()?.findFileByRelativePath(rulePath) ?: return
25+
val files = ruleDir.children.filter { it.isFile && (it.extension == "md") }
26+
27+
files.forEach { file ->
28+
val priority = 1.0
29+
result.addElement(buildElement(file, priority))
30+
}
31+
}
32+
33+
private fun buildElement(virtualFile: VirtualFile, priority: Double): LookupElement {
34+
val filename = virtualFile.nameWithoutExtension
35+
36+
val elementBuilder = LookupElementBuilder.create(filename)
37+
.withInsertHandler { context, _ ->
38+
context.editor.caretModel.moveCaretRelatively(1, 1, false, false, false)
39+
}
40+
41+
return AutoDevFileLookupElement.withPriority(elementBuilder, priority, virtualFile)
42+
}
43+
}
44+

0 commit comments

Comments
 (0)