33
33
Position ,
34
34
Range ,
35
35
)
36
- from ..utils .ast import Token as AstToken
37
- from ..utils .ast import is_non_variable_token , range_from_token_or_node
36
+ from ..utils .ast import Token , is_non_variable_token , range_from_token_or_node
38
37
from ..utils .async_ast import AsyncVisitor
39
38
from .imports_manager import ImportsManager
40
39
from .library_doc import (
@@ -61,13 +60,6 @@ class ImportError(DiagnosticsError):
61
60
pass
62
61
63
62
64
- @dataclass
65
- class Token :
66
- line_no : int
67
- col_offset : int
68
- end_col_offset : int
69
-
70
-
71
63
@dataclass
72
64
class Import :
73
65
name : Optional [str ]
@@ -81,11 +73,11 @@ class Import:
81
73
def range (self ) -> Range :
82
74
return Range (
83
75
start = Position (
84
- line = self .name_token .line_no - 1 if self .name_token is not None else self .line_no - 1 ,
76
+ line = self .name_token .lineno - 1 if self .name_token is not None else self .line_no - 1 ,
85
77
character = self .name_token .col_offset if self .name_token is not None else self .col_offset ,
86
78
),
87
79
end = Position (
88
- line = self .name_token .line_no - 1 if self .name_token is not None else self .end_line_no - 1 ,
80
+ line = self .name_token .lineno - 1 if self .name_token is not None else self .end_line_no - 1 ,
89
81
character = self .name_token .end_col_offset if self .name_token is not None else self .end_col_offset ,
90
82
),
91
83
)
@@ -171,9 +163,7 @@ async def visit_LibraryImport(self, node: ast.AST) -> None: # noqa: N802
171
163
self ._results .append (
172
164
LibraryImport (
173
165
name = n .name ,
174
- name_token = Token (line_no = name .lineno , col_offset = name .col_offset , end_col_offset = name .end_col_offset )
175
- if name is not None
176
- else None ,
166
+ name_token = name if name is not None else None ,
177
167
args = n .args ,
178
168
alias = n .alias ,
179
169
line_no = node .lineno ,
@@ -194,9 +184,7 @@ async def visit_ResourceImport(self, node: ast.AST) -> None: # noqa: N802
194
184
self ._results .append (
195
185
ResourceImport (
196
186
name = n .name ,
197
- name_token = Token (line_no = name .lineno , col_offset = name .col_offset , end_col_offset = name .end_col_offset )
198
- if name is not None
199
- else None ,
187
+ name_token = name if name is not None else None ,
200
188
line_no = node .lineno ,
201
189
col_offset = node .col_offset ,
202
190
end_line_no = node .end_lineno if node .end_lineno is not None else - 1 ,
@@ -217,9 +205,7 @@ async def visit_VariablesImport(self, node: ast.AST) -> None: # noqa: N802
217
205
self ._results .append (
218
206
VariablesImport (
219
207
name = n .name ,
220
- name_token = Token (line_no = name .lineno , col_offset = name .col_offset , end_col_offset = name .end_col_offset )
221
- if name is not None
222
- else None ,
208
+ name_token = name if name is not None else None ,
223
209
args = n .args ,
224
210
line_no = node .lineno ,
225
211
col_offset = node .col_offset ,
@@ -244,8 +230,8 @@ async def _analyze_keyword_call(
244
230
self ,
245
231
keyword : Optional [str ],
246
232
value : ast .AST ,
247
- keyword_token : AstToken ,
248
- argument_tokens : List [AstToken ],
233
+ keyword_token : Token ,
234
+ argument_tokens : List [Token ],
249
235
analyse_run_keywords : bool = True ,
250
236
) -> Optional [KeywordDoc ]:
251
237
result : Optional [KeywordDoc ] = None
@@ -351,8 +337,8 @@ async def _analyze_keyword_call(
351
337
return result
352
338
353
339
async def _analyse_run_keyword (
354
- self , keyword_doc : Optional [KeywordDoc ], node : ast .AST , argument_tokens : List [AstToken ]
355
- ) -> List [AstToken ]:
340
+ self , keyword_doc : Optional [KeywordDoc ], node : ast .AST , argument_tokens : List [Token ]
341
+ ) -> List [Token ]:
356
342
357
343
if keyword_doc is None or not keyword_doc .is_any_run_keyword ():
358
344
return argument_tokens
@@ -445,11 +431,13 @@ async def visit_Fixture(self, node: ast.AST) -> None: # noqa: N802
445
431
from robot .parsing .model .statements import Fixture
446
432
447
433
value = cast (Fixture , node )
448
- keyword_token = cast (AstToken , value .get_token (RobotToken .NAME ))
434
+ keyword_token = cast (Token , value .get_token (RobotToken .NAME ))
435
+
436
+ # TODO: calculate possible variables in NAME
449
437
450
- if keyword_token is not None :
438
+ if keyword_token is not None and is_non_variable_token ( keyword_token ) :
451
439
await self ._analyze_keyword_call (
452
- value .name , value , keyword_token , [cast (AstToken , e ) for e in value .get_tokens (RobotToken .ARGUMENT )]
440
+ value .name , value , keyword_token , [cast (Token , e ) for e in value .get_tokens (RobotToken .ARGUMENT )]
453
441
)
454
442
455
443
await self .generic_visit (node )
@@ -459,9 +447,11 @@ async def visit_TestTemplate(self, node: ast.AST) -> None: # noqa: N802
459
447
from robot .parsing .model .statements import TestTemplate
460
448
461
449
value = cast (TestTemplate , node )
462
- keyword_token = cast (AstToken , value .get_token (RobotToken .NAME ))
450
+ keyword_token = cast (Token , value .get_token (RobotToken .NAME ))
463
451
464
- if keyword_token is not None :
452
+ # TODO: calculate possible variables in NAME
453
+
454
+ if keyword_token is not None and is_non_variable_token (keyword_token ):
465
455
await self ._analyze_keyword_call (value .value , value , keyword_token , [])
466
456
467
457
await self .generic_visit (node )
@@ -471,9 +461,11 @@ async def visit_Template(self, node: ast.AST) -> None: # noqa: N802
471
461
from robot .parsing .model .statements import Template
472
462
473
463
value = cast (Template , node )
474
- keyword_token = cast (AstToken , value .get_token (RobotToken .NAME ))
464
+ keyword_token = cast (Token , value .get_token (RobotToken .NAME ))
465
+
466
+ # TODO: calculate possible variables in NAME
475
467
476
- if keyword_token is not None :
468
+ if keyword_token is not None and is_non_variable_token ( keyword_token ) :
477
469
await self ._analyze_keyword_call (value .value , value , keyword_token , [])
478
470
479
471
await self .generic_visit (node )
@@ -497,7 +489,7 @@ async def visit_KeywordCall(self, node: ast.AST) -> None: # noqa: N802
497
489
)
498
490
else :
499
491
await self ._analyze_keyword_call (
500
- value .keyword , value , keyword_token , [cast (AstToken , e ) for e in value .get_tokens (RobotToken .ARGUMENT )]
492
+ value .keyword , value , keyword_token , [cast (Token , e ) for e in value .get_tokens (RobotToken .ARGUMENT )]
501
493
)
502
494
503
495
if not self .current_testcase_or_keyword_name :
0 commit comments