21
21
cast ,
22
22
)
23
23
24
- from ....utils .async_itertools import async_chain , async_chain_iterator
24
+ from ....utils .async_itertools import async_chain , async_chain_iterator , async_next
25
25
from ....utils .async_tools import threaded
26
26
from ....utils .logging import LoggingDescriptor
27
27
from ...common .decorators import language_id , trigger_characters
@@ -325,13 +325,11 @@ async def resolve(self, completion_item: CompletionItem) -> CompletionItem:
325
325
kind = MarkupKind .MARKDOWN , value = f"Error:\n { e } "
326
326
)
327
327
elif type in [CompleteResultKind .KEYWORD .name ]:
328
- libname = completion_item .data .get ("libname" , None )
329
- name = completion_item .data .get ("name" , None )
330
-
331
- if libname is not None and name is not None :
328
+ id = completion_item .data .get ("id" , None )
329
+ if id is not None :
332
330
try :
333
- kw_doc = next (
334
- (kw for kw in await self .namespace .get_keywords () if kw . name == name ),
331
+ kw_doc = await async_next (
332
+ (kw async for kw in self .namespace .iter_all_keywords () if hash ( kw ) == id ),
335
333
None ,
336
334
)
337
335
@@ -511,104 +509,118 @@ def enumerate_indexes(s: str, c: str) -> Iterator[int]:
511
509
for kw in libraries [library_name ].library_doc .keywords .values ():
512
510
if kw .is_error_handler :
513
511
continue
514
- c = CompletionItem (
515
- label = kw .name ,
516
- kind = CompletionItemKind .FUNCTION ,
517
- detail = CompleteResultKind .KEYWORD .value ,
518
- sort_text = f"020_{ kw .name } " ,
519
- insert_text_format = InsertTextFormat .PLAINTEXT ,
520
- text_edit = TextEdit (range = r , new_text = kw .name ) if r is not None else None ,
521
- data = {
522
- "document_uri" : str (self .document .uri ),
523
- "type" : CompleteResultKind .KEYWORD .name ,
524
- "libname" : kw .libname ,
525
- "name" : kw .name ,
526
- },
512
+ result .append (
513
+ CompletionItem (
514
+ label = kw .name ,
515
+ kind = CompletionItemKind .FUNCTION ,
516
+ detail = f"{ CompleteResultKind .KEYWORD .value } { f'({ kw .libname } )' if kw .libname is not None else '' } " ,
517
+ sort_text = f"020_{ kw .name } " ,
518
+ insert_text_format = InsertTextFormat .PLAINTEXT ,
519
+ text_edit = TextEdit (range = r , new_text = kw .name ) if r is not None else None ,
520
+ data = {
521
+ "document_uri" : str (self .document .uri ),
522
+ "type" : CompleteResultKind .KEYWORD .name ,
523
+ "libname" : kw .libname ,
524
+ "name" : kw .name ,
525
+ "id" : hash (kw ),
526
+ },
527
+ )
527
528
)
528
- result .append (c )
529
529
530
- resources = await self .namespace .get_resources ()
531
- if library_name in resources :
530
+ resources = {
531
+ k : v
532
+ for k , v in (await self .namespace .get_resources ()).items ()
533
+ if library_name_matcher == KeywordMatcher (v .name )
534
+ }
535
+
536
+ if resources :
532
537
r .start .character = lib_name_index + 1
533
- for kw in resources [library_name ].library_doc .keywords .values ():
534
- if kw .is_error_handler :
535
- continue
536
- c = CompletionItem (
537
- label = kw .name ,
538
- kind = CompletionItemKind .FUNCTION ,
539
- detail = CompleteResultKind .KEYWORD .value ,
540
- sort_text = f"020_{ kw .name } " ,
541
- insert_text_format = InsertTextFormat .PLAINTEXT ,
542
- text_edit = TextEdit (range = r , new_text = kw .name ) if r is not None else None ,
543
- data = {
544
- "document_uri" : str (self .document .uri ),
545
- "type" : CompleteResultKind .KEYWORD .name ,
546
- "libname" : kw .libname ,
547
- "name" : kw .name ,
548
- },
549
- )
550
- result .append (c )
538
+ for res in resources .values ():
539
+ for kw in res .library_doc .keywords .values ():
540
+ if kw .is_error_handler :
541
+ continue
542
+ result .append (
543
+ CompletionItem (
544
+ label = kw .name ,
545
+ kind = CompletionItemKind .FUNCTION ,
546
+ detail = f"{ CompleteResultKind .KEYWORD .value } { f'({ kw .libname } )' if kw .libname is not None else '' } " ,
547
+ sort_text = f"020_{ kw .name } " ,
548
+ insert_text_format = InsertTextFormat .PLAINTEXT ,
549
+ text_edit = TextEdit (range = r , new_text = kw .name ) if r is not None else None ,
550
+ data = {
551
+ "document_uri" : str (self .document .uri ),
552
+ "type" : CompleteResultKind .KEYWORD .name ,
553
+ "libname" : kw .libname ,
554
+ "name" : kw .name ,
555
+ "id" : hash (kw ),
556
+ },
557
+ )
558
+ )
551
559
552
560
return result
553
561
554
562
for kw in await self .namespace .get_keywords ():
555
563
if kw .is_error_handler :
556
564
continue
557
565
558
- c = CompletionItem (
559
- label = kw .name ,
560
- kind = CompletionItemKind .FUNCTION ,
561
- detail = f"{ CompleteResultKind .KEYWORD .value } { f'({ kw .libname } )' if kw .libname is not None else '' } " ,
562
- deprecated = kw .is_deprecated ,
563
- sort_text = f"020_{ kw .name } " ,
564
- insert_text_format = InsertTextFormat .PLAINTEXT ,
565
- text_edit = TextEdit (range = r , new_text = kw .name ) if r is not None else None ,
566
- data = {
567
- "document_uri" : str (self .document .uri ),
568
- "type" : CompleteResultKind .KEYWORD .name ,
569
- "libname" : kw .libname ,
570
- "name" : kw .name ,
571
- },
566
+ result .append (
567
+ CompletionItem (
568
+ label = kw .name ,
569
+ kind = CompletionItemKind .FUNCTION ,
570
+ detail = f"{ CompleteResultKind .KEYWORD .value } { f'({ kw .libname } )' if kw .libname is not None else '' } " ,
571
+ deprecated = kw .is_deprecated ,
572
+ sort_text = f"020_{ kw .name } " ,
573
+ insert_text_format = InsertTextFormat .PLAINTEXT ,
574
+ text_edit = TextEdit (range = r , new_text = kw .name ) if r is not None else None ,
575
+ data = {
576
+ "document_uri" : str (self .document .uri ),
577
+ "type" : CompleteResultKind .KEYWORD .name ,
578
+ "libname" : kw .libname ,
579
+ "name" : kw .name ,
580
+ "id" : hash (kw ),
581
+ },
582
+ )
572
583
)
573
- result .append (c )
574
584
575
585
for k , v in (await self .namespace .get_libraries ()).items ():
576
- c = CompletionItem (
577
- label = k ,
578
- kind = CompletionItemKind .MODULE ,
579
- detail = "Library" ,
580
- sort_text = f"030_{ k } " ,
581
- deprecated = v .library_doc .is_deprecated ,
582
- insert_text_format = InsertTextFormat .PLAINTEXT ,
583
- text_edit = TextEdit (range = r , new_text = k ) if r is not None else None ,
584
- data = {
585
- "document_uri" : str (self .document .uri ),
586
- "type" : CompleteResultKind .MODULE .name ,
587
- "name" : k ,
588
- "import_name" : v .import_name ,
589
- "args" : v .args ,
590
- "alias" : v .alias ,
591
- },
586
+ result .append (
587
+ CompletionItem (
588
+ label = k ,
589
+ kind = CompletionItemKind .MODULE ,
590
+ detail = "Library" ,
591
+ sort_text = f"030_{ v .name } " ,
592
+ deprecated = v .library_doc .is_deprecated ,
593
+ insert_text_format = InsertTextFormat .PLAINTEXT ,
594
+ text_edit = TextEdit (range = r , new_text = k ) if r is not None else None ,
595
+ data = {
596
+ "document_uri" : str (self .document .uri ),
597
+ "type" : CompleteResultKind .MODULE .name ,
598
+ "name" : v .name ,
599
+ "import_name" : v .import_name ,
600
+ "args" : v .args ,
601
+ "alias" : v .alias ,
602
+ },
603
+ )
592
604
)
593
- result .append (c )
594
605
595
606
for k , v in (await self .namespace .get_resources ()).items ():
596
- c = CompletionItem (
597
- label = k ,
598
- kind = CompletionItemKind .MODULE ,
599
- detail = "Resource" ,
600
- deprecated = v .library_doc .is_deprecated ,
601
- sort_text = f"030_{ k } " ,
602
- insert_text_format = InsertTextFormat .PLAINTEXT ,
603
- text_edit = TextEdit (range = r , new_text = k ) if r is not None else None ,
604
- data = {
605
- "document_uri" : str (self .document .uri ),
606
- "type" : CompleteResultKind .RESOURCE .name ,
607
- "name" : v .name ,
608
- "import_name" : v .import_name ,
609
- },
607
+ result .append (
608
+ CompletionItem (
609
+ label = v .name ,
610
+ kind = CompletionItemKind .MODULE ,
611
+ detail = "Resource" ,
612
+ deprecated = v .library_doc .is_deprecated ,
613
+ sort_text = f"030_{ v .name } " ,
614
+ insert_text_format = InsertTextFormat .PLAINTEXT ,
615
+ text_edit = TextEdit (range = r , new_text = v .name ) if r is not None else None ,
616
+ data = {
617
+ "document_uri" : str (self .document .uri ),
618
+ "type" : CompleteResultKind .RESOURCE .name ,
619
+ "name" : k ,
620
+ "import_name" : v .import_name ,
621
+ },
622
+ )
610
623
)
611
- result .append (c )
612
624
613
625
if add_none :
614
626
result .append (
@@ -623,14 +635,15 @@ def enumerate_indexes(s: str, c: str) -> Iterator[int]:
623
635
624
636
if add_reserverd :
625
637
for k in get_reserved_keywords ():
626
- c = CompletionItem (
627
- label = k ,
628
- kind = CompletionItemKind .KEYWORD ,
629
- sort_text = f"999_{ k } " ,
630
- insert_text_format = InsertTextFormat .PLAINTEXT ,
631
- text_edit = TextEdit (range = r , new_text = k ) if r is not None else None ,
638
+ result .append (
639
+ CompletionItem (
640
+ label = k ,
641
+ kind = CompletionItemKind .KEYWORD ,
642
+ sort_text = f"999_{ k } " ,
643
+ insert_text_format = InsertTextFormat .PLAINTEXT ,
644
+ text_edit = TextEdit (range = r , new_text = k ) if r is not None else None ,
645
+ )
632
646
)
633
- result .append (c )
634
647
635
648
return result
636
649
0 commit comments