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