41
41
TextEdit ,
42
42
)
43
43
from ...common .text_document import TextDocument
44
- from ..configuration import SyntaxConfig
44
+ from ..configuration import CompletionConfig
45
45
from ..diagnostics .entities import VariableDefinitionType
46
46
from ..diagnostics .library_doc import (
47
47
CompleteResultKind ,
@@ -81,11 +81,15 @@ def __init__(self, parent: RobotLanguageServerProtocol) -> None:
81
81
parent .completion .collect .add (self .collect )
82
82
parent .completion .resolve .add (self .resolve )
83
83
84
- async def get_header_style (self , document : TextDocument ) -> str :
84
+ async def get_config (self , document : TextDocument ) -> CompletionConfig :
85
85
if (folder := self .parent .workspace .get_workspace_folder (document .uri )) is not None :
86
- config = await self .parent .workspace .get_configuration (SyntaxConfig , folder .uri )
87
- if config .header_style is not None :
88
- return config .header_style
86
+ return await self .parent .workspace .get_configuration (CompletionConfig , folder .uri )
87
+
88
+ return CompletionConfig ()
89
+
90
+ async def get_header_style (self , config : CompletionConfig ) -> str :
91
+ if config .header_style is not None :
92
+ return config .header_style
89
93
90
94
return DEFAULT_HEADER_STYLE if get_robot_version () < (5 , 1 ) else DEFAULT_HEADER_STYLE_51
91
95
@@ -116,8 +120,10 @@ async def collect(
116
120
117
121
model = await self .parent .documents_cache .get_model (document , False )
118
122
123
+ config = await self .get_config (document )
124
+
119
125
return await CompletionCollector (
120
- self .parent , document , model , namespace , await self .get_header_style (document )
126
+ self .parent , document , model , namespace , await self .get_header_style (config ), config
121
127
).collect (
122
128
position ,
123
129
context ,
@@ -135,8 +141,10 @@ async def resolve(self, sender: Any, completion_item: CompletionItem) -> Complet
135
141
namespace = await self .parent .documents_cache .get_namespace (document )
136
142
model = await self .parent .documents_cache .get_model (document , False )
137
143
if namespace is not None :
144
+ config = await self .get_config (document )
145
+
138
146
return await CompletionCollector (
139
- self .parent , document , model , namespace , await self .get_header_style (document )
147
+ self .parent , document , model , namespace , await self .get_header_style (config ), config
140
148
).resolve (completion_item )
141
149
142
150
return completion_item
@@ -231,12 +239,14 @@ def __init__(
231
239
model : ast .AST ,
232
240
namespace : Namespace ,
233
241
header_style : str ,
242
+ config : CompletionConfig ,
234
243
) -> None :
235
244
self .parent = parent
236
245
self .header_style = header_style
237
246
self .document = document
238
247
self .model = model
239
248
self .namespace = namespace
249
+ self .config = config
240
250
241
251
async def _find_methods (self , cls : Type [Any ]) -> AsyncGenerator [_CompleteMethod , None ]:
242
252
if cls is ast .AST :
@@ -399,7 +409,16 @@ async def create_headers_completion_items(self, range: Optional[Range]) -> List[
399
409
if self .namespace .languages is None :
400
410
headers : Iterable [str ] = HEADERS
401
411
else :
402
- headers = itertools .chain (* (lang .headers for lang in self .namespace .languages ))
412
+ languages = self .namespace .languages .languages
413
+
414
+ if (
415
+ self .config .filter_default_language
416
+ and len (self .namespace .languages .languages ) > 1
417
+ and self .config .filter_default_language
418
+ ):
419
+ languages = [v for v in languages if v .code != "en" ]
420
+
421
+ headers = itertools .chain (* (lang .headers .keys () for lang in languages ))
403
422
404
423
return [
405
424
CompletionItem (
@@ -419,7 +438,7 @@ async def create_headers_completion_items(self, range: Optional[Range]) -> List[
419
438
if range is not None
420
439
else None ,
421
440
)
422
- for s in ((self .header_style .format (name = k ), k ) for k in headers )
441
+ for s in ((self .header_style .format (name = k ), k ) for k in ( v . title () for v in headers ) )
423
442
]
424
443
425
444
async def create_environment_variables_completion_items (self , range : Optional [Range ]) -> List [CompletionItem ]:
@@ -491,13 +510,27 @@ async def create_settings_completion_items(self, range: Optional[Range]) -> List
491
510
settings = {* settings_class .names , * settings_class .aliases .keys ()}
492
511
493
512
if self .namespace .languages is not None :
494
- settings = {k for k , v in self .namespace .languages .settings .items () if v in settings }
513
+
514
+ if self .config .filter_default_language and len (self .namespace .languages .languages ) > 1 :
515
+ languages = self .namespace .languages .languages
516
+
517
+ if self .config .filter_default_language :
518
+ languages = [v for v in languages if v .code != "en" ]
519
+
520
+ items : Iterable [Tuple [str , str ]] = itertools .chain (* (lang .settings .items () for lang in languages ))
521
+ else :
522
+ items = self .namespace .languages .settings .items ()
523
+
524
+ settings = {k .title () for k , v in items if v in settings }
495
525
496
526
return [
497
527
CompletionItem (
498
528
label = setting ,
499
529
kind = CompletionItemKind .KEYWORD ,
500
530
detail = "Setting" ,
531
+ documentation = self .namespace .languages .settings .get (setting )
532
+ if self .namespace .languages is not None
533
+ else None ,
501
534
sort_text = f"090_{ setting } " ,
502
535
insert_text_format = InsertTextFormat .PLAINTEXT ,
503
536
text_edit = TextEdit (range = range , new_text = setting ) if range is not None else None ,
@@ -525,12 +558,26 @@ async def create_testcase_settings_completion_items(self, range: Optional[Range]
525
558
settings = {* TestCaseSettings .names , * TestCaseSettings .aliases .keys ()}
526
559
527
560
if self .namespace .languages is not None :
528
- settings = {k for k , v in self .namespace .languages .settings .items () if v in settings }
561
+
562
+ if self .config .filter_default_language and len (self .namespace .languages .languages ) > 1 :
563
+ languages = self .namespace .languages .languages
564
+
565
+ if self .config .filter_default_language :
566
+ languages = [v for v in languages if v .code != "en" ]
567
+
568
+ items : Iterable [Tuple [str , str ]] = itertools .chain (* (lang .settings .items () for lang in languages ))
569
+ else :
570
+ items = self .namespace .languages .settings .items ()
571
+
572
+ settings = {k .title () for k , v in items if v in settings }
529
573
530
574
return [
531
575
CompletionItem (
532
576
label = f"[{ setting } ]" ,
533
577
kind = CompletionItemKind .KEYWORD ,
578
+ documentation = self .namespace .languages .settings .get (setting )
579
+ if self .namespace .languages is not None
580
+ else None ,
534
581
detail = "Setting" ,
535
582
sort_text = f"070_{ setting } " ,
536
583
insert_text_format = InsertTextFormat .PLAINTEXT ,
@@ -563,12 +610,26 @@ async def create_keyword_settings_completion_items(self, range: Optional[Range])
563
610
settings = {* KeywordSettings .names , * KeywordSettings .aliases .keys ()}
564
611
565
612
if self .namespace .languages is not None :
566
- settings = {k for k , v in self .namespace .languages .settings .items () if v in settings }
613
+
614
+ if self .config .filter_default_language and len (self .namespace .languages .languages ) > 1 :
615
+ languages = self .namespace .languages .languages
616
+
617
+ if self .config .filter_default_language :
618
+ languages = [v for v in languages if v .code != "en" ]
619
+
620
+ items : Iterable [Tuple [str , str ]] = itertools .chain (* (lang .settings .items () for lang in languages ))
621
+ else :
622
+ items = self .namespace .languages .settings .items ()
623
+
624
+ settings = {k .title () for k , v in items if v in settings }
567
625
568
626
return [
569
627
CompletionItem (
570
628
label = f"[{ setting } ]" ,
571
629
kind = CompletionItemKind .KEYWORD ,
630
+ documentation = self .namespace .languages .settings .get (setting )
631
+ if self .namespace .languages is not None
632
+ else None ,
572
633
detail = "Setting" ,
573
634
sort_text = f"070_{ setting } " ,
574
635
insert_text_format = InsertTextFormat .PLAINTEXT ,
0 commit comments