@@ -17,6 +17,24 @@ import org.eclipse.lsp4j.InsertTextMode
17
17
import org .eclipse .lsp4j .Range
18
18
import org .eclipse .lsp4j .TextEdit
19
19
20
+ enum CompletionSource :
21
+ case Empty
22
+ case OverrideKind
23
+ case ImplementAllKind
24
+ case CompilerKind
25
+ case KeywordKind
26
+ case ScopeKind
27
+ case WorkspaceKind
28
+ case ExtensionKind
29
+ case NamedArgKind
30
+ case AutoFillKind
31
+ case FileSystemMemberKind
32
+ case IvyImportKind
33
+ case InterpolatorKind
34
+ case MatchCompletionKind
35
+ case CaseKeywordKind
36
+ case DocumentKind
37
+
20
38
sealed trait CompletionValue :
21
39
def label : String
22
40
def insertText : Option [String ] = None
@@ -25,11 +43,12 @@ sealed trait CompletionValue:
25
43
def range : Option [Range ] = None
26
44
def filterText : Option [String ] = None
27
45
def completionItemKind (using Context ): CompletionItemKind
46
+ def completionItemDataKind : Integer = CompletionItemData .None
28
47
def description (printer : ShortenedTypePrinter )(using Context ): String = " "
29
48
def insertMode : Option [InsertTextMode ] = None
30
49
def completionData (buildTargetIdentifier : String )(
31
50
using Context
32
- ): Option [ CompletionItemData ] = None
51
+ ): CompletionItemData = CompletionItemData ( " <no-symbol> " , buildTargetIdentifier, kind = completionItemDataKind)
33
52
def command : Option [String ] = None
34
53
35
54
/**
@@ -45,17 +64,15 @@ object CompletionValue:
45
64
sealed trait Symbolic extends CompletionValue :
46
65
def symbol : Symbol
47
66
def isFromWorkspace : Boolean = false
48
- def completionItemDataKind = CompletionItemData .None
67
+ override def completionItemDataKind = CompletionItemData .None
49
68
50
69
override def completionData (
51
70
buildTargetIdentifier : String
52
- )(using Context ): Option [CompletionItemData ] =
53
- Some (
54
- CompletionItemData (
55
- SemanticdbSymbols .symbolName(symbol),
56
- buildTargetIdentifier,
57
- kind = completionItemDataKind
58
- )
71
+ )(using Context ): CompletionItemData =
72
+ CompletionItemData (
73
+ SemanticdbSymbols .symbolName(symbol),
74
+ buildTargetIdentifier,
75
+ kind = completionItemDataKind
59
76
)
60
77
def importSymbol : Symbol = symbol
61
78
@@ -105,19 +122,24 @@ object CompletionValue:
105
122
label : String ,
106
123
symbol : Symbol ,
107
124
override val snippetSuffix : CompletionSuffix
108
- ) extends Symbolic
125
+ ) extends Symbolic {
126
+ override def completionItemDataKind : Integer = CompletionSource .CompilerKind .ordinal
127
+ }
109
128
case class Scope (
110
129
label : String ,
111
130
symbol : Symbol ,
112
131
override val snippetSuffix : CompletionSuffix ,
113
- ) extends Symbolic
132
+ ) extends Symbolic {
133
+ override def completionItemDataKind : Integer = CompletionSource .ScopeKind .ordinal
134
+ }
114
135
case class Workspace (
115
136
label : String ,
116
137
symbol : Symbol ,
117
138
override val snippetSuffix : CompletionSuffix ,
118
139
override val importSymbol : Symbol
119
140
) extends Symbolic :
120
141
override def isFromWorkspace : Boolean = true
142
+ override def completionItemDataKind : Integer = CompletionSource .WorkspaceKind .ordinal
121
143
122
144
/**
123
145
* CompletionValue for extension methods via SymbolSearch
@@ -129,6 +151,7 @@ object CompletionValue:
129
151
) extends Symbolic :
130
152
override def completionItemKind (using Context ): CompletionItemKind =
131
153
CompletionItemKind .Method
154
+ override def completionItemDataKind : Integer = CompletionSource .ExtensionKind .ordinal
132
155
override def description (printer : ShortenedTypePrinter )(using Context ): String =
133
156
s " ${printer.completionSymbol(symbol)} (extension) "
134
157
@@ -149,8 +172,7 @@ object CompletionValue:
149
172
override val range : Option [Range ]
150
173
) extends Symbolic :
151
174
override def insertText : Option [String ] = Some (value)
152
- override def completionItemDataKind : Integer =
153
- CompletionItemData .OverrideKind
175
+ override def completionItemDataKind : Integer = CompletionSource .OverrideKind .ordinal
154
176
override def completionItemKind (using Context ): CompletionItemKind =
155
177
CompletionItemKind .Method
156
178
override def labelWithDescription (printer : ShortenedTypePrinter )(using Context ): String =
@@ -163,6 +185,7 @@ object CompletionValue:
163
185
symbol : Symbol
164
186
) extends Symbolic :
165
187
override def insertText : Option [String ] = Some (label.replace(" $" , " $$" ).nn)
188
+ override def completionItemDataKind : Integer = CompletionSource .OverrideKind .ordinal
166
189
override def completionItemKind (using Context ): CompletionItemKind =
167
190
CompletionItemKind .Field
168
191
override def description (printer : ShortenedTypePrinter )(using Context ): String =
@@ -177,11 +200,13 @@ object CompletionValue:
177
200
) extends CompletionValue :
178
201
override def completionItemKind (using Context ): CompletionItemKind =
179
202
CompletionItemKind .Enum
203
+ override def completionItemDataKind : Integer = CompletionSource .OverrideKind .ordinal
180
204
override def insertText : Option [String ] = Some (value)
181
205
override def label : String = " Autofill with default values"
182
206
183
207
case class Keyword (label : String , override val insertText : Option [String ])
184
208
extends CompletionValue :
209
+ override def completionItemDataKind : Integer = CompletionSource .KeywordKind .ordinal
185
210
override def completionItemKind (using Context ): CompletionItemKind =
186
211
CompletionItemKind .Keyword
187
212
@@ -192,6 +217,7 @@ object CompletionValue:
192
217
) extends CompletionValue :
193
218
override def label : String = filename
194
219
override def insertText : Option [String ] = Some (filename.stripSuffix(" .sc" ))
220
+ override def completionItemDataKind : Integer = CompletionSource .FileSystemMemberKind .ordinal
195
221
override def completionItemKind (using Context ): CompletionItemKind =
196
222
CompletionItemKind .File
197
223
@@ -201,6 +227,7 @@ object CompletionValue:
201
227
override val range : Option [Range ]
202
228
) extends CompletionValue :
203
229
override val filterText : Option [String ] = insertText
230
+ override def completionItemDataKind : Integer = CompletionSource .IvyImportKind .ordinal
204
231
override def completionItemKind (using Context ): CompletionItemKind =
205
232
CompletionItemKind .Folder
206
233
@@ -215,6 +242,7 @@ object CompletionValue:
215
242
isWorkspace : Boolean = false ,
216
243
isExtension : Boolean = false
217
244
) extends Symbolic :
245
+ override def completionItemDataKind : Integer = CompletionSource .InterpolatorKind .ordinal
218
246
override def description (
219
247
printer : ShortenedTypePrinter
220
248
)(using Context ): String =
@@ -228,6 +256,7 @@ object CompletionValue:
228
256
override val additionalEdits : List [TextEdit ],
229
257
desc : String
230
258
) extends CompletionValue :
259
+ override def completionItemDataKind : Integer = CompletionSource .MatchCompletionKind .ordinal
231
260
override def completionItemKind (using Context ): CompletionItemKind =
232
261
CompletionItemKind .Enum
233
262
override def description (printer : ShortenedTypePrinter )(using Context ): String =
@@ -241,6 +270,7 @@ object CompletionValue:
241
270
override val range : Option [Range ] = None ,
242
271
override val command : Option [String ] = None
243
272
) extends Symbolic :
273
+ override def completionItemDataKind : Integer = CompletionSource .CaseKeywordKind .ordinal
244
274
override def completionItemKind (using Context ): CompletionItemKind =
245
275
CompletionItemKind .Method
246
276
@@ -253,6 +283,7 @@ object CompletionValue:
253
283
override def filterText : Option [String ] = Some (description)
254
284
255
285
override def insertText : Option [String ] = Some (doc)
286
+ override def completionItemDataKind : Integer = CompletionSource .DocumentKind .ordinal
256
287
override def completionItemKind (using Context ): CompletionItemKind =
257
288
CompletionItemKind .Snippet
258
289
0 commit comments