1
1
package cc.unitmesh.devti.language.completion
2
2
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.*
6
4
import com.intellij.codeInsight.lookup.LookupElementBuilder
5
+ import com.intellij.ide.presentation.VirtualFilePresentation
6
+ import com.intellij.openapi.fileEditor.impl.EditorHistoryManager
7
+ import com.intellij.openapi.project.guessProjectDir
8
+ import com.intellij.openapi.vfs.VirtualFile
7
9
import com.intellij.util.ProcessingContext
10
+ import java.io.File
8
11
9
12
class FileReferenceLanguageProvider : CompletionProvider <CompletionParameters >() {
10
13
companion object {
@@ -16,13 +19,25 @@ class FileReferenceLanguageProvider : CompletionProvider<CompletionParameters>()
16
19
context : ProcessingContext ,
17
20
result : CompletionResultSet ,
18
21
) {
19
- // sample file: "file1", "file2"
20
- listOf (" file1" , " file2" ).forEach {
21
- result.addElement(
22
- LookupElementBuilder .create(it)
23
- .withTypeText(" file" , true )
24
- )
22
+ val project = parameters.position.project
23
+ val basePath = project.guessProjectDir()?.path ? : return
24
+
25
+ val editorHistoryManager = EditorHistoryManager .getInstance(project)
26
+ val fileList: List <VirtualFile > = editorHistoryManager.fileList
27
+
28
+ fileList.forEach {
29
+ val removePrefix = it.path.removePrefix(basePath)
30
+ val relativePath: String = removePrefix.removePrefix(File .separator)
31
+
32
+ val element = LookupElementBuilder .create(relativePath)
33
+ .withIcon(VirtualFilePresentation .getIcon(it))
34
+ .withInsertHandler { context, _ ->
35
+ context.editor.caretModel.moveCaretRelatively(
36
+ 1 , 0 , false , false , false
37
+ )
38
+ }
39
+
40
+ result.addElement(element)
25
41
}
26
42
}
27
-
28
43
}
0 commit comments