4141 TextEdit ,
4242)
4343from ...common .text_document import TextDocument
44- from ..configuration import SyntaxConfig
44+ from ..configuration import CompletionConfig
4545from ..diagnostics .entities import VariableDefinitionType
4646from ..diagnostics .library_doc import (
4747 CompleteResultKind ,
@@ -81,11 +81,15 @@ def __init__(self, parent: RobotLanguageServerProtocol) -> None:
8181 parent .completion .collect .add (self .collect )
8282 parent .completion .resolve .add (self .resolve )
8383
84- async def get_header_style (self , document : TextDocument ) -> str :
84+ async def get_config (self , document : TextDocument ) -> CompletionConfig :
8585 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
8993
9094 return DEFAULT_HEADER_STYLE if get_robot_version () < (5 , 1 ) else DEFAULT_HEADER_STYLE_51
9195
@@ -116,8 +120,10 @@ async def collect(
116120
117121 model = await self .parent .documents_cache .get_model (document , False )
118122
123+ config = await self .get_config (document )
124+
119125 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
121127 ).collect (
122128 position ,
123129 context ,
@@ -135,8 +141,10 @@ async def resolve(self, sender: Any, completion_item: CompletionItem) -> Complet
135141 namespace = await self .parent .documents_cache .get_namespace (document )
136142 model = await self .parent .documents_cache .get_model (document , False )
137143 if namespace is not None :
144+ config = await self .get_config (document )
145+
138146 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
140148 ).resolve (completion_item )
141149
142150 return completion_item
@@ -231,12 +239,14 @@ def __init__(
231239 model : ast .AST ,
232240 namespace : Namespace ,
233241 header_style : str ,
242+ config : CompletionConfig ,
234243 ) -> None :
235244 self .parent = parent
236245 self .header_style = header_style
237246 self .document = document
238247 self .model = model
239248 self .namespace = namespace
249+ self .config = config
240250
241251 async def _find_methods (self , cls : Type [Any ]) -> AsyncGenerator [_CompleteMethod , None ]:
242252 if cls is ast .AST :
@@ -399,7 +409,16 @@ async def create_headers_completion_items(self, range: Optional[Range]) -> List[
399409 if self .namespace .languages is None :
400410 headers : Iterable [str ] = HEADERS
401411 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 ))
403422
404423 return [
405424 CompletionItem (
@@ -419,7 +438,7 @@ async def create_headers_completion_items(self, range: Optional[Range]) -> List[
419438 if range is not None
420439 else None ,
421440 )
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 ) )
423442 ]
424443
425444 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
491510 settings = {* settings_class .names , * settings_class .aliases .keys ()}
492511
493512 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 }
495525
496526 return [
497527 CompletionItem (
498528 label = setting ,
499529 kind = CompletionItemKind .KEYWORD ,
500530 detail = "Setting" ,
531+ documentation = self .namespace .languages .settings .get (setting )
532+ if self .namespace .languages is not None
533+ else None ,
501534 sort_text = f"090_{ setting } " ,
502535 insert_text_format = InsertTextFormat .PLAINTEXT ,
503536 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]
525558 settings = {* TestCaseSettings .names , * TestCaseSettings .aliases .keys ()}
526559
527560 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 }
529573
530574 return [
531575 CompletionItem (
532576 label = f"[{ setting } ]" ,
533577 kind = CompletionItemKind .KEYWORD ,
578+ documentation = self .namespace .languages .settings .get (setting )
579+ if self .namespace .languages is not None
580+ else None ,
534581 detail = "Setting" ,
535582 sort_text = f"070_{ setting } " ,
536583 insert_text_format = InsertTextFormat .PLAINTEXT ,
@@ -563,12 +610,26 @@ async def create_keyword_settings_completion_items(self, range: Optional[Range])
563610 settings = {* KeywordSettings .names , * KeywordSettings .aliases .keys ()}
564611
565612 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 }
567625
568626 return [
569627 CompletionItem (
570628 label = f"[{ setting } ]" ,
571629 kind = CompletionItemKind .KEYWORD ,
630+ documentation = self .namespace .languages .settings .get (setting )
631+ if self .namespace .languages is not None
632+ else None ,
572633 detail = "Setting" ,
573634 sort_text = f"070_{ setting } " ,
574635 insert_text_format = InsertTextFormat .PLAINTEXT ,
0 commit comments