@@ -16,7 +16,7 @@ type CompletionItemOptions = {
1616 insertText ?: string ;
1717 triggerParameterHints ?: boolean ;
1818}
19- type CompletionItemKind = "vars" | "ghosts" | "aliases" | "keywords" | "types" | "decls" | " packages";
19+ type CompletionItemKind = "vars" | "ghosts" | "aliases" | "keywords" | "types" | "packages" ;
2020
2121/**
2222 * Registers a completion provider for LiquidJava annotations, providing context-aware suggestions based on the current context
@@ -61,19 +61,23 @@ function getContextCompletionItems(context: LJContext, file: string, annotation:
6161 aliases : ( ) => getAliasCompletionItems ( context . aliases , triggerParameterHints ) ,
6262 keywords : ( ) => getKeywordsCompletionItems ( triggerParameterHints , inScope ) ,
6363 types : ( ) => getTypesCompletionItems ( ) ,
64- decls : ( ) => getDeclsCompletionItems ( ) ,
6564 packages : ( ) => [ ] , // TODO
6665 }
66+ const varCompletions : CompletionItemKind [ ] = [ "vars" , "ghosts" , "aliases" , "keywords" ] ;
67+ const typeCompletions : CompletionItemKind [ ] = [ "types" ] ;
6768 const itemsMap : Record < LJAnnotation , CompletionItemKind [ ] > = {
68- Refinement : [ "vars" , "ghosts" , "aliases" , "keywords" ] ,
69- StateRefinement : [ "vars" , "ghosts" , "aliases" , "keywords" ] ,
70- Ghost : [ "types" ] ,
71- RefinementAlias : [ "types" ] ,
72- RefinementPredicate : [ "types" , "decls" ] ,
73- StateSet : [ ] ,
74- ExternalRefinementsFor : [ "packages" ]
75- }
76- return itemsMap [ annotation ] . map ( key => itemsHandlers [ key ] ( ) ) . flat ( ) ;
69+ Refinement : varCompletions ,
70+ StateRefinement : varCompletions ,
71+ Ghost : typeCompletions ,
72+ RefinementAlias : typeCompletions ,
73+ RefinementPredicate : typeCompletions ,
74+ StateSet : [ ] ,
75+ ExternalRefinementsFor : [ ] , // TODO
76+ } ;
77+ return itemsMap [ annotation ]
78+ . map ( key => itemsHandlers [ key ] )
79+ . filter ( ( handler ) : handler is ( ) => vscode . CompletionItem [ ] => Boolean ( handler ) )
80+ . flatMap ( handler => handler ( ) ) ;
7781}
7882
7983function getVariableCompletionItems ( variables : LJVariable [ ] ) : vscode . CompletionItem [ ] {
@@ -190,16 +194,6 @@ function getTypesCompletionItems(): vscode.CompletionItem[] {
190194 } ) ) ;
191195}
192196
193- function getDeclsCompletionItems ( ) : vscode . CompletionItem [ ] {
194- const decls = [ "ghost" , "type" ]
195- return decls . map ( decl => createCompletionItem ( {
196- name : decl ,
197- kind : vscode . CompletionItemKind . Keyword ,
198- description : "" ,
199- detail : "keyword" ,
200- } ) ) ;
201- }
202-
203197function createCompletionItem ( { name, kind, labelDetail, description, detail, documentationBlocks, codeBlocks, insertText, triggerParameterHints } : CompletionItemOptions ) : vscode . CompletionItem {
204198 const item = new vscode . CompletionItem ( name , kind ) ;
205199 item . label = { label : name , detail : labelDetail , description } ;
@@ -251,4 +245,4 @@ function getReceiverBeforeDot(document: vscode.TextDocument, position: vscode.Po
251245 const receiver = match [ 1 ] . trim ( ) ;
252246 if ( / ^ o l d \s * \( \s * t h i s \s * \) $ / . test ( receiver ) ) return "old(this)" ;
253247 return receiver ;
254- }
248+ }
0 commit comments