3232 CompletionItem ,
3333 CompletionItemKind ,
3434 CompletionList ,
35- CompletionTriggerKind ,
3635 InsertTextFormat ,
3736 MarkupContent ,
3837 MarkupKind ,
@@ -262,7 +261,7 @@ async def _find_methods(self, cls: Type[Any]) -> AsyncIterator[_CompleteMethod]:
262261 async def collect (
263262 self , position : Position , context : Optional [CompletionContext ]
264263 ) -> Union [List [CompletionItem ], CompletionList , None ]:
265- result_nodes = await get_nodes_at_position (self .model , position )
264+ result_nodes = await get_nodes_at_position (self .model , position , include_end = True )
266265
267266 result_nodes .reverse ()
268267
@@ -980,7 +979,7 @@ async def complete_default(
980979 if len (nodes_at_position ) > 1 and isinstance (nodes_at_position [0 ], HasTokens ):
981980 node = nodes_at_position [0 ]
982981
983- tokens_at_position = get_tokens_at_position (node , position )
982+ tokens_at_position = get_tokens_at_position (node , position , True )
984983 if not tokens_at_position :
985984 return None
986985
@@ -1051,14 +1050,6 @@ async def complete_SettingSection( # noqa: N802
10511050 ) -> Union [List [CompletionItem ], CompletionList , None ]:
10521051 from robot .parsing .model .statements import SectionHeader , Statement
10531052
1054- # TODO should this be configurable?
1055- if (
1056- context is not None
1057- and context .trigger_kind == CompletionTriggerKind .TRIGGER_CHARACTER
1058- and context .trigger_character in [" " , "\t " ]
1059- ):
1060- return None
1061-
10621053 if nodes_at_position .index (node ) > 0 and not isinstance (nodes_at_position [0 ], SectionHeader ):
10631054 node_at_pos = nodes_at_position [0 ]
10641055 if (
@@ -1094,14 +1085,6 @@ async def _complete_TestCase_or_Keyword( # noqa: N802
10941085 from robot .parsing .lexer .tokens import Token as RobotToken
10951086 from robot .parsing .model .statements import KeywordName , Statement , TestCaseName
10961087
1097- # TODO should this be configurable?
1098- if (
1099- context is not None
1100- and context .trigger_kind == CompletionTriggerKind .TRIGGER_CHARACTER
1101- and context .trigger_character in [" " , "\t " ]
1102- ):
1103- return None
1104-
11051088 index = 0
11061089 in_assign = False
11071090
@@ -1262,14 +1245,6 @@ async def _complete_SuiteSetup_or_SuiteTeardown_or_TestTemplate( # noqa: N802
12621245 ) -> Union [List [CompletionItem ], CompletionList , None ]:
12631246 from robot .parsing .model .statements import Statement , TestTemplate
12641247
1265- # TODO should this be configurable?
1266- if (
1267- context is not None
1268- and context .trigger_kind == CompletionTriggerKind .TRIGGER_CHARACTER
1269- and context .trigger_character in [" " , "\t " ]
1270- ):
1271- return None
1272-
12731248 statement_node = cast (Statement , node )
12741249 if len (statement_node .tokens ) > 1 :
12751250 token = cast (Token , statement_node .tokens [1 ])
@@ -1387,14 +1362,6 @@ async def complete_Setup_or_Teardown_or_Template( # noqa: N802
13871362 ) -> Union [List [CompletionItem ], CompletionList , None ]:
13881363 from robot .parsing .model .statements import Statement , Template
13891364
1390- # TODO should this be configurable?
1391- if (
1392- context is not None
1393- and context .trigger_kind == CompletionTriggerKind .TRIGGER_CHARACTER
1394- and context .trigger_character in [" " , "\t " ]
1395- ):
1396- return None
1397-
13981365 statement_node = cast (Statement , node )
13991366 if len (statement_node .tokens ) > 2 :
14001367 token = cast (Token , statement_node .tokens [2 ])
@@ -1589,7 +1556,7 @@ async def complete_arguments() -> Optional[List[CompletionItem]]:
15891556
15901557 kw_node = cast (Statement , node )
15911558
1592- tokens_at_position = get_tokens_at_position (kw_node , position )
1559+ tokens_at_position = get_tokens_at_position (kw_node , position , True )
15931560
15941561 if not tokens_at_position :
15951562 return None
@@ -1853,7 +1820,7 @@ async def complete_arguments() -> Optional[List[CompletionItem]]:
18531820
18541821 kw_node = cast (Statement , node )
18551822
1856- tokens_at_position = get_tokens_at_position (kw_node , position )
1823+ tokens_at_position = get_tokens_at_position (kw_node , position , True )
18571824
18581825 if not tokens_at_position :
18591826 return None
@@ -1893,16 +1860,13 @@ async def _complete_KeywordCall_or_Fixture( # noqa: N802
18931860 from robot .parsing .lexer .tokens import Token as RobotToken
18941861 from robot .parsing .model .statements import Statement
18951862
1896- # if context is None or context.trigger_kind != CompletionTriggerKind.INVOKED:
1897- # return []
1898-
18991863 kw_node = cast (Statement , node )
19001864
19011865 keyword_token = kw_node .get_token (keyword_name_token_type )
19021866 if keyword_token is None :
19031867 return None
19041868
1905- tokens_at_position = get_tokens_at_position (kw_node , position )
1869+ tokens_at_position = get_tokens_at_position (kw_node , position , include_end = True )
19061870
19071871 if not tokens_at_position :
19081872 return None
@@ -1912,6 +1876,9 @@ async def _complete_KeywordCall_or_Fixture( # noqa: N802
19121876 if token_at_position .type not in [RobotToken .ARGUMENT , RobotToken .EOL , RobotToken .SEPARATOR ]:
19131877 return None
19141878
1879+ if len (tokens_at_position ) > 1 and tokens_at_position [- 2 ].type == RobotToken .KEYWORD :
1880+ return None
1881+
19151882 keyword_doc_and_token : Optional [Tuple [Optional [KeywordDoc ], Token ]] = None
19161883
19171884 keyword_token = kw_node .get_token (keyword_name_token_type )
@@ -2258,7 +2225,7 @@ async def _complete_ForceTags_or_KeywordTags_or_DefaultTags_Tags( # noqa: N802
22582225 from robot .parsing .model .statements import Statement
22592226
22602227 statement = cast (Statement , node )
2261- tokens = get_tokens_at_position (statement , position )
2228+ tokens = get_tokens_at_position (statement , position , True )
22622229
22632230 if not tokens :
22642231 return None
0 commit comments