@@ -55,12 +55,17 @@ async def run(self) -> List[Diagnostic]:
55
55
56
56
async def visit (self , node : ast .AST ) -> None :
57
57
from robot .parsing .lexer .tokens import Token as RobotToken
58
- from robot .parsing .model .statements import DocumentationOrMetadata , KeywordCall
58
+ from robot .parsing .model .statements import (
59
+ DocumentationOrMetadata ,
60
+ KeywordCall ,
61
+ Template ,
62
+ TestTemplate ,
63
+ )
59
64
from robot .variables .search import contains_variable
60
65
61
66
self .node_stack .append (node )
62
67
try :
63
- if isinstance (node , HasTokens ):
68
+ if isinstance (node , HasTokens ) and not isinstance ( node , ( TestTemplate , Template )) :
64
69
for token in (
65
70
t
66
71
for t in node .tokens
@@ -185,13 +190,14 @@ async def _analyze_keyword_call(
185
190
keyword_token : Token ,
186
191
argument_tokens : List [Token ],
187
192
analyse_run_keywords : bool = True ,
193
+ allow_variables : bool = False ,
188
194
) -> Optional [KeywordDoc ]:
189
195
from robot .parsing .model .statements import Template , TestTemplate
190
196
191
197
result : Optional [KeywordDoc ] = None
192
198
193
199
try :
194
- if not is_not_variable_token (keyword_token ):
200
+ if not allow_variables and not is_not_variable_token (keyword_token ):
195
201
return None
196
202
197
203
result = await self .finder .find_keyword (keyword )
@@ -475,14 +481,10 @@ async def visit_TestTemplate(self, node: ast.AST) -> None: # noqa: N802
475
481
value = cast (TestTemplate , node )
476
482
keyword_token = cast (Token , value .get_token (RobotToken .NAME ))
477
483
478
- # TODO: calculate possible variables in NAME
479
-
480
- if (
481
- keyword_token is not None
482
- and is_not_variable_token (keyword_token )
483
- and keyword_token .value .upper () not in ("" , "NONE" )
484
- ):
485
- await self ._analyze_keyword_call (value .value , value , keyword_token , [])
484
+ if keyword_token is not None and keyword_token .value .upper () not in ("" , "NONE" ):
485
+ await self ._analyze_keyword_call (
486
+ value .value , value , keyword_token , [], analyse_run_keywords = False , allow_variables = True
487
+ )
486
488
487
489
self .test_template = value
488
490
await self .generic_visit (node )
@@ -494,14 +496,10 @@ async def visit_Template(self, node: ast.AST) -> None: # noqa: N802
494
496
value = cast (Template , node )
495
497
keyword_token = cast (Token , value .get_token (RobotToken .NAME ))
496
498
497
- # TODO: calculate possible variables in NAME
498
-
499
- if (
500
- keyword_token is not None
501
- and is_not_variable_token (keyword_token )
502
- and keyword_token .value .upper () not in ("" , "NONE" )
503
- ):
504
- await self ._analyze_keyword_call (value .value , value , keyword_token , [])
499
+ if keyword_token is not None and keyword_token .value .upper () not in ("" , "NONE" ):
500
+ await self ._analyze_keyword_call (
501
+ value .value , value , keyword_token , [], analyse_run_keywords = False , allow_variables = True
502
+ )
505
503
506
504
await self .generic_visit (node )
507
505
0 commit comments