1
+ package com.wavesplatform.rideplugin.completion
2
+
3
+ import com.intellij.codeInsight.completion.*
4
+ import com.intellij.codeInsight.lookup.LookupElementBuilder
5
+ import com.intellij.icons.AllIcons
6
+ import com.intellij.openapi.project.DumbAware
7
+ import com.intellij.psi.util.PsiTreeUtil
8
+ import com.intellij.util.ProcessingContext
9
+ import com.wavesplatform.rideplugin.icons.RideIcons
10
+ import com.wavesplatform.rideplugin.psi.RideFunctionDefinition
11
+
12
+ class RideFunctionsCompletionContributor : CompletionContributor (), DumbAware {
13
+ init {
14
+ val provider = object : CompletionProvider <CompletionParameters >() {
15
+ override fun addCompletions (
16
+ parameters : CompletionParameters ,
17
+ context : ProcessingContext ,
18
+ result : CompletionResultSet
19
+ ) {
20
+
21
+ val declaredFunctions = PsiTreeUtil
22
+ .findChildrenOfType(
23
+ parameters.originalPosition?.containingFile,
24
+ RideFunctionDefinition ::class .java
25
+ ).map { it.text }
26
+
27
+ declaredFunctions
28
+ .asSequence()
29
+ .map { " $it ()" }
30
+ .map(LookupElementBuilder ::create)
31
+ .map {
32
+ it.withInsertHandler { context, item ->
33
+ val start = context.startOffset
34
+ val end = context.selectionEndOffset
35
+ context.editor.caretModel.moveToOffset(end - 1 )
36
+ }
37
+ }
38
+ .map {
39
+ it.withIcon(RideIcons .FUNCTION )
40
+ .withTypeIconRightAligned(true )
41
+ }
42
+ .map(result::addElement)
43
+ .toList()
44
+ }
45
+ }
46
+ extend(
47
+ CompletionType .BASIC ,
48
+ RidePatterns .InvocationPattern .functionCallPattern(),
49
+ provider
50
+ )
51
+ }
52
+ }
0 commit comments