@@ -127,7 +127,7 @@ class RobotCompletionProtocolPart(RobotLanguageServerProtocolPart):
127127
128128 def __init__ (self , parent : "RobotLanguageServerProtocol" ) -> None :
129129 super ().__init__ (parent )
130-
130+ self . doc_cache : Dict [ str , str ] = {}
131131 parent .completion .collect .add (self .collect )
132132 parent .completion .resolve .add (self .resolve )
133133
@@ -171,9 +171,9 @@ def collect(
171171 model = self .parent .documents_cache .get_model (document , False )
172172
173173 config = self .get_config (document )
174-
174+ self . doc_cache = {}
175175 return CompletionCollector (
176- self . parent ,
176+ self ,
177177 document ,
178178 model ,
179179 namespace ,
@@ -195,7 +195,7 @@ def resolve(self, sender: Any, completion_item: CompletionItem) -> CompletionIte
195195 config = self .get_config (document )
196196
197197 return CompletionCollector (
198- self . parent ,
198+ self ,
199199 document ,
200200 model ,
201201 namespace ,
@@ -331,7 +331,7 @@ class CompletionCollector(ModelHelper):
331331
332332 def __init__ (
333333 self ,
334- parent : "RobotLanguageServerProtocol " ,
334+ parent : "RobotCompletionProtocolPart " ,
335335 document : TextDocument ,
336336 model : ast .AST ,
337337 namespace : Namespace ,
@@ -407,7 +407,7 @@ def resolve(self, completion_item: CompletionItem) -> CompletionItem:
407407 if data is not None :
408408 document_uri = data .get ("document_uri" , None )
409409 if document_uri is not None :
410- document = self .parent .documents .get (document_uri )
410+ document = self .parent .parent . documents .get (document_uri )
411411 if document is not None and (comp_type := data .get ("type" , None )) is not None :
412412 if comp_type in [
413413 CompleteResultKind .MODULE .name ,
@@ -532,11 +532,15 @@ def resolve(self, completion_item: CompletionItem) -> CompletionItem:
532532 raise
533533 except BaseException :
534534 pass
535+ elif comp_type == CompleteResultKind .DOC_CACHE .name :
536+ if (name := data .get ("name" , None )) is not None :
537+ if (doc := self .parent .doc_cache .get (name , None )) is not None :
538+ completion_item .documentation = MarkupContent (kind = MarkupKind .MARKDOWN , value = doc )
535539
536540 return completion_item
537541
538542 def create_headers_completion_items (self , range : Optional [Range ]) -> List [CompletionItem ]:
539- doc_type = self .parent .documents_cache .get_document_type (self .document )
543+ doc_type = self .parent .parent . documents_cache .get_document_type (self .document )
540544
541545 if self .namespace .languages is None :
542546 if doc_type in [DocumentType .RESOURCE , DocumentType .INIT ]:
@@ -624,7 +628,7 @@ def create_variables_completion_items(
624628 ]
625629
626630 def create_settings_completion_items (self , range : Optional [Range ]) -> List [CompletionItem ]:
627- doc_type = self .parent .documents_cache .get_document_type (self .document )
631+ doc_type = self .parent .parent . documents_cache .get_document_type (self .document )
628632
629633 settings_class : Type [Settings ] = SuiteFileSettings
630634 if doc_type == DocumentType .RESOURCE :
@@ -2283,21 +2287,24 @@ def _complete_keyword_arguments_at_position(
22832287
22842288 for i , b_snippet in enumerate (bool_snippets ):
22852289 if b_snippet [0 ]:
2290+ cache_name = f"BOOL{ id (type_info )} _{ i } "
2291+ self .parent .doc_cache [cache_name ] = type_info .to_markdown ()
22862292 result .append (
22872293 CompletionItem (
22882294 label = b_snippet [0 ],
22892295 kind = CompletionItemKind .CONSTANT ,
22902296 detail = f"{ type_info .name } ({ b_snippet [1 ]} )" ,
2291- documentation = MarkupContent (
2292- MarkupKind .MARKDOWN ,
2293- type_info .to_markdown (),
2294- ),
22952297 sort_text = f"01_000_{ int (not b_snippet [1 ])} _{ b_snippet [0 ]} " ,
22962298 insert_text_format = InsertTextFormat .PLAIN_TEXT ,
22972299 text_edit = TextEdit (
22982300 range = completion_range ,
22992301 new_text = b_snippet [0 ],
23002302 ),
2303+ data = CompletionItemData (
2304+ document_uri = str (self .document .uri ),
2305+ type = CompleteResultKind .DOC_CACHE .name ,
2306+ name = cache_name ,
2307+ ),
23012308 )
23022309 )
23032310 elif type_info .name == "None" :
@@ -2325,18 +2332,29 @@ def _complete_keyword_arguments_at_position(
23252332 )
23262333 if type_info .members :
23272334 for member_index , member in enumerate (type_info .members ):
2335+ cache_name = f"TYPE_MEMBER{ id (type_info )} _{ member_index } "
2336+ self .parent .doc_cache [cache_name ] = (
2337+ f"```python\n { member .name } = { member .value } \n ```"
2338+ "\n \n ---"
2339+ f"\n { type_info .to_markdown (only_doc = True )} "
2340+ )
23282341 result .append (
23292342 CompletionItem (
23302343 label = member .name ,
23312344 kind = CompletionItemKind .ENUM_MEMBER ,
2332- detail = type_info .name ,
2345+ detail = f" { type_info .name } ( { type_info . type } )" ,
23332346 documentation = MarkupContent (
23342347 MarkupKind .MARKDOWN ,
2335- f"```python\n { member .name } = { member .value } \n ```\n \n { type_info . to_markdown () } " ,
2348+ f"```python\n { member .name } = { member .value } \n ```" ,
23362349 ),
2337- sort_text = f"09_{ i :03 } _{ member_index :03 } _{ member .name } " ,
2350+ sort_text = f"09_{ i :9 } _{ member_index :09 } _{ member .name } " ,
23382351 insert_text_format = InsertTextFormat .PLAIN_TEXT ,
23392352 text_edit = TextEdit (range = completion_range , new_text = member .name ),
2353+ data = CompletionItemData (
2354+ document_uri = str (self .document .uri ),
2355+ type = CompleteResultKind .DOC_CACHE .name ,
2356+ name = cache_name ,
2357+ ),
23402358 )
23412359 )
23422360 if type_info .items :
@@ -2357,19 +2375,22 @@ def _complete_keyword_arguments_at_position(
23572375 + "}" ,
23582376 ]
23592377 for i , snippet in enumerate (snippets ):
2378+ cache_name = f"TYPE_ITEMS{ id (type_info )} _{ i } "
2379+ self .parent .doc_cache [cache_name ] = type_info .to_markdown ()
23602380 if snippet :
23612381 result .append (
23622382 CompletionItem (
23632383 label = snippet ,
23642384 kind = CompletionItemKind .STRUCT ,
2365- detail = type_info .name ,
2366- documentation = MarkupContent (
2367- MarkupKind .MARKDOWN ,
2368- type_info .to_markdown (),
2369- ),
2370- sort_text = f"08_{ i :03} _{ snippet } " ,
2385+ detail = f"{ type_info .name } ({ type_info .type } )" ,
2386+ sort_text = f"08_{ i :09} _{ snippet } " ,
23712387 insert_text_format = InsertTextFormat .SNIPPET ,
23722388 text_edit = TextEdit (range = completion_range , new_text = snippet ),
2389+ data = CompletionItemData (
2390+ document_uri = str (self .document .uri ),
2391+ type = CompleteResultKind .DOC_CACHE .name ,
2392+ name = cache_name ,
2393+ ),
23732394 )
23742395 )
23752396
0 commit comments