@@ -17,6 +17,24 @@ import org.eclipse.lsp4j.InsertTextMode
1717import org .eclipse .lsp4j .Range
1818import org .eclipse .lsp4j .TextEdit
1919
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+
2038sealed trait CompletionValue :
2139 def label : String
2240 def insertText : Option [String ] = None
@@ -25,11 +43,12 @@ sealed trait CompletionValue:
2543 def range : Option [Range ] = None
2644 def filterText : Option [String ] = None
2745 def completionItemKind (using Context ): CompletionItemKind
46+ def completionItemDataKind : Integer = CompletionItemData .None
2847 def description (printer : ShortenedTypePrinter )(using Context ): String = " "
2948 def insertMode : Option [InsertTextMode ] = None
3049 def completionData (buildTargetIdentifier : String )(
3150 using Context
32- ): Option [ CompletionItemData ] = None
51+ ): CompletionItemData = CompletionItemData ( " <no-symbol> " , buildTargetIdentifier, kind = completionItemDataKind)
3352 def command : Option [String ] = None
3453
3554 /**
@@ -45,17 +64,15 @@ object CompletionValue:
4564 sealed trait Symbolic extends CompletionValue :
4665 def symbol : Symbol
4766 def isFromWorkspace : Boolean = false
48- def completionItemDataKind = CompletionItemData .None
67+ override def completionItemDataKind = CompletionItemData .None
4968
5069 override def completionData (
5170 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
5976 )
6077 def importSymbol : Symbol = symbol
6178
@@ -105,19 +122,24 @@ object CompletionValue:
105122 label : String ,
106123 symbol : Symbol ,
107124 override val snippetSuffix : CompletionSuffix
108- ) extends Symbolic
125+ ) extends Symbolic {
126+ override def completionItemDataKind : Integer = CompletionSource .CompilerKind .ordinal
127+ }
109128 case class Scope (
110129 label : String ,
111130 symbol : Symbol ,
112131 override val snippetSuffix : CompletionSuffix ,
113- ) extends Symbolic
132+ ) extends Symbolic {
133+ override def completionItemDataKind : Integer = CompletionSource .ScopeKind .ordinal
134+ }
114135 case class Workspace (
115136 label : String ,
116137 symbol : Symbol ,
117138 override val snippetSuffix : CompletionSuffix ,
118139 override val importSymbol : Symbol
119140 ) extends Symbolic :
120141 override def isFromWorkspace : Boolean = true
142+ override def completionItemDataKind : Integer = CompletionSource .WorkspaceKind .ordinal
121143
122144 /**
123145 * CompletionValue for extension methods via SymbolSearch
@@ -129,6 +151,7 @@ object CompletionValue:
129151 ) extends Symbolic :
130152 override def completionItemKind (using Context ): CompletionItemKind =
131153 CompletionItemKind .Method
154+ override def completionItemDataKind : Integer = CompletionSource .ExtensionKind .ordinal
132155 override def description (printer : ShortenedTypePrinter )(using Context ): String =
133156 s " ${printer.completionSymbol(symbol)} (extension) "
134157
@@ -149,8 +172,7 @@ object CompletionValue:
149172 override val range : Option [Range ]
150173 ) extends Symbolic :
151174 override def insertText : Option [String ] = Some (value)
152- override def completionItemDataKind : Integer =
153- CompletionItemData .OverrideKind
175+ override def completionItemDataKind : Integer = CompletionSource .OverrideKind .ordinal
154176 override def completionItemKind (using Context ): CompletionItemKind =
155177 CompletionItemKind .Method
156178 override def labelWithDescription (printer : ShortenedTypePrinter )(using Context ): String =
@@ -163,6 +185,7 @@ object CompletionValue:
163185 symbol : Symbol
164186 ) extends Symbolic :
165187 override def insertText : Option [String ] = Some (label.replace(" $" , " $$" ).nn)
188+ override def completionItemDataKind : Integer = CompletionSource .OverrideKind .ordinal
166189 override def completionItemKind (using Context ): CompletionItemKind =
167190 CompletionItemKind .Field
168191 override def description (printer : ShortenedTypePrinter )(using Context ): String =
@@ -177,11 +200,13 @@ object CompletionValue:
177200 ) extends CompletionValue :
178201 override def completionItemKind (using Context ): CompletionItemKind =
179202 CompletionItemKind .Enum
203+ override def completionItemDataKind : Integer = CompletionSource .OverrideKind .ordinal
180204 override def insertText : Option [String ] = Some (value)
181205 override def label : String = " Autofill with default values"
182206
183207 case class Keyword (label : String , override val insertText : Option [String ])
184208 extends CompletionValue :
209+ override def completionItemDataKind : Integer = CompletionSource .KeywordKind .ordinal
185210 override def completionItemKind (using Context ): CompletionItemKind =
186211 CompletionItemKind .Keyword
187212
@@ -192,6 +217,7 @@ object CompletionValue:
192217 ) extends CompletionValue :
193218 override def label : String = filename
194219 override def insertText : Option [String ] = Some (filename.stripSuffix(" .sc" ))
220+ override def completionItemDataKind : Integer = CompletionSource .FileSystemMemberKind .ordinal
195221 override def completionItemKind (using Context ): CompletionItemKind =
196222 CompletionItemKind .File
197223
@@ -201,6 +227,7 @@ object CompletionValue:
201227 override val range : Option [Range ]
202228 ) extends CompletionValue :
203229 override val filterText : Option [String ] = insertText
230+ override def completionItemDataKind : Integer = CompletionSource .IvyImportKind .ordinal
204231 override def completionItemKind (using Context ): CompletionItemKind =
205232 CompletionItemKind .Folder
206233
@@ -215,6 +242,7 @@ object CompletionValue:
215242 isWorkspace : Boolean = false ,
216243 isExtension : Boolean = false
217244 ) extends Symbolic :
245+ override def completionItemDataKind : Integer = CompletionSource .InterpolatorKind .ordinal
218246 override def description (
219247 printer : ShortenedTypePrinter
220248 )(using Context ): String =
@@ -228,6 +256,7 @@ object CompletionValue:
228256 override val additionalEdits : List [TextEdit ],
229257 desc : String
230258 ) extends CompletionValue :
259+ override def completionItemDataKind : Integer = CompletionSource .MatchCompletionKind .ordinal
231260 override def completionItemKind (using Context ): CompletionItemKind =
232261 CompletionItemKind .Enum
233262 override def description (printer : ShortenedTypePrinter )(using Context ): String =
@@ -241,6 +270,7 @@ object CompletionValue:
241270 override val range : Option [Range ] = None ,
242271 override val command : Option [String ] = None
243272 ) extends Symbolic :
273+ override def completionItemDataKind : Integer = CompletionSource .CaseKeywordKind .ordinal
244274 override def completionItemKind (using Context ): CompletionItemKind =
245275 CompletionItemKind .Method
246276
@@ -253,6 +283,7 @@ object CompletionValue:
253283 override def filterText : Option [String ] = Some (description)
254284
255285 override def insertText : Option [String ] = Some (doc)
286+ override def completionItemDataKind : Integer = CompletionSource .DocumentKind .ordinal
256287 override def completionItemKind (using Context ): CompletionItemKind =
257288 CompletionItemKind .Snippet
258289
0 commit comments