@@ -202,16 +202,14 @@ def _visit_Variable(self, node: Variable) -> None: # noqa: N802
202
202
add_to_references = True
203
203
first_overidden_reference : Optional [VariableDefinition ] = None
204
204
if existing_var is not None :
205
- if self ._namespace .document is not None :
206
- self ._variable_references [existing_var ].add (Location (self ._namespace .document .document_uri , r ))
207
- if existing_var not in self ._overridden_variables :
208
- self ._overridden_variables [existing_var ] = var_def
209
- else :
210
- add_to_references = False
211
- first_overidden_reference = self ._overridden_variables [existing_var ]
212
- self ._variable_references [first_overidden_reference ].add (
213
- Location (self ._namespace .document .document_uri , r )
214
- )
205
+
206
+ self ._variable_references [existing_var ].add (Location (self ._namespace .document_uri , r ))
207
+ if existing_var not in self ._overridden_variables :
208
+ self ._overridden_variables [existing_var ] = var_def
209
+ else :
210
+ add_to_references = False
211
+ first_overidden_reference = self ._overridden_variables [existing_var ]
212
+ self ._variable_references [first_overidden_reference ].add (Location (self ._namespace .document_uri , r ))
215
213
216
214
if add_to_references and existing_var .type in [
217
215
VariableDefinitionType .GLOBAL_VARIABLE ,
@@ -336,13 +334,11 @@ def visit_Var(self, node: Statement) -> None: # noqa: N802
336
334
self ._variable_references [var ] = set ()
337
335
else :
338
336
existing_var = self ._variables [var .matcher ]
339
- if self ._namespace .document is not None :
340
- location = Location (
341
- self ._namespace .document .document_uri , range_from_token (strip_variable_token (variable ))
342
- )
343
- self ._variable_references [existing_var ].add (location )
344
- if existing_var in self ._overridden_variables :
345
- self ._variable_references [self ._overridden_variables [existing_var ]].add (location )
337
+
338
+ location = Location (self ._namespace .document_uri , range_from_token (strip_variable_token (variable )))
339
+ self ._variable_references [existing_var ].add (location )
340
+ if existing_var in self ._overridden_variables :
341
+ self ._variable_references [self ._overridden_variables [existing_var ]].add (location )
346
342
347
343
except VariableError :
348
344
pass
@@ -377,43 +373,7 @@ def _analyze_token_expression_variables(
377
373
self , token : Token , severity : DiagnosticSeverity = DiagnosticSeverity .ERROR
378
374
) -> None :
379
375
for var_token , var in self ._iter_expression_variables_from_token (token ):
380
- if var .type == VariableDefinitionType .VARIABLE_NOT_FOUND :
381
- if var_token .type not in [
382
- Token .ASSIGN ,
383
- Token .VARIABLE ,
384
- ]:
385
- self ._append_diagnostics (
386
- range = range_from_token (var_token ),
387
- message = f"Variable '{ var .name } ' not found." ,
388
- severity = severity ,
389
- source = DIAGNOSTICS_SOURCE_NAME ,
390
- code = Error .VARIABLE_NOT_FOUND ,
391
- )
392
- else :
393
- if self ._namespace .document is not None :
394
- var_range = range_from_token (var_token )
395
-
396
- if var .name_range != var_range :
397
- self ._variable_references [var ].add (
398
- Location (
399
- self ._namespace .document .document_uri ,
400
- range_from_token (var_token ),
401
- )
402
- )
403
-
404
- if var .type == VariableDefinitionType .COMMAND_LINE_VARIABLE :
405
- suite_var = self ._namespace .find_variable (
406
- var .name ,
407
- skip_commandline_variables = True ,
408
- ignore_error = True ,
409
- )
410
- if suite_var is not None and suite_var .type == VariableDefinitionType .VARIABLE :
411
- self ._variable_references [suite_var ].add (
412
- Location (
413
- self ._namespace .document .document_uri ,
414
- range_from_token (var_token ),
415
- )
416
- )
376
+ self ._handle_find_variable_result (token , var_token , var , severity )
417
377
418
378
def visit (self , node : ast .AST ) -> None :
419
379
check_current_task_canceled ()
@@ -426,76 +386,62 @@ def visit(self, node: ast.AST) -> None:
426
386
427
387
def _analyze_token_variables (self , token : Token , severity : DiagnosticSeverity = DiagnosticSeverity .ERROR ) -> None :
428
388
for var_token , var in self ._iter_variables_from_token (token ):
429
- if var .type == VariableDefinitionType .VARIABLE_NOT_FOUND :
430
- if token .type not in [Token .ASSIGN , Token .VARIABLE ]:
389
+ self ._handle_find_variable_result (token , var_token , var , severity )
390
+
391
+ def _handle_find_variable_result (
392
+ self ,
393
+ token : Token ,
394
+ var_token : Token ,
395
+ var : VariableDefinition ,
396
+ severity : DiagnosticSeverity = DiagnosticSeverity .ERROR ,
397
+ ) -> None :
398
+ if var .type == VariableDefinitionType .VARIABLE_NOT_FOUND :
399
+ self ._append_diagnostics (
400
+ range = range_from_token (var_token ),
401
+ message = f"Variable '{ var .name } ' not found." ,
402
+ severity = severity ,
403
+ source = DIAGNOSTICS_SOURCE_NAME ,
404
+ code = Error .VARIABLE_NOT_FOUND ,
405
+ )
406
+ else :
407
+ if (
408
+ var .type == VariableDefinitionType .ENVIRONMENT_VARIABLE
409
+ and cast (EnvironmentVariableDefinition , var ).default_value is None
410
+ ):
411
+ env_name = var .name [2 :- 1 ]
412
+ if os .environ .get (env_name , None ) is None :
431
413
self ._append_diagnostics (
432
414
range = range_from_token (var_token ),
433
- message = f"Variable '{ var .name } ' not found." ,
415
+ message = f"Environment variable '{ var .name } ' not found." ,
434
416
severity = severity ,
435
417
source = DIAGNOSTICS_SOURCE_NAME ,
436
- code = Error .VARIABLE_NOT_FOUND ,
418
+ code = Error .ENVIROMMENT_VARIABLE_NOT_FOUND ,
437
419
)
438
- else :
439
- if (
440
- var .type == VariableDefinitionType .ENVIRONMENT_VARIABLE
441
- and cast (EnvironmentVariableDefinition , var ).default_value is None
442
- ):
443
- env_name = var .name [2 :- 1 ]
444
- if os .environ .get (env_name , None ) is None :
445
- self ._append_diagnostics (
446
- range = range_from_token (var_token ),
447
- message = f"Environment variable '{ var .name } ' not found." ,
448
- severity = severity ,
449
- source = DIAGNOSTICS_SOURCE_NAME ,
450
- code = Error .ENVIROMMENT_VARIABLE_NOT_FOUND ,
451
- )
452
-
453
- if self ._namespace .document is not None :
454
- if var .type == VariableDefinitionType .ENVIRONMENT_VARIABLE :
455
- (
456
- var_token .value ,
457
- _ ,
458
- _ ,
459
- ) = var_token .value .partition ("=" )
460
420
461
- var_range = range_from_token (var_token )
421
+ if var .type == VariableDefinitionType .ENVIRONMENT_VARIABLE :
422
+ (
423
+ var_token .value ,
424
+ _ ,
425
+ _ ,
426
+ ) = var_token .value .partition ("=" )
427
+
428
+ var_range = range_from_token (var_token )
429
+
430
+ suite_var = None
431
+ if var .type in [
432
+ VariableDefinitionType .COMMAND_LINE_VARIABLE ,
433
+ VariableDefinitionType .GLOBAL_VARIABLE ,
434
+ VariableDefinitionType .TEST_VARIABLE ,
435
+ VariableDefinitionType .VARIABLE ,
436
+ ]:
437
+ suite_var = self ._overridden_variables .get (var , None )
462
438
439
+ if suite_var is not None and suite_var .type != VariableDefinitionType .VARIABLE :
463
440
suite_var = None
464
- if var .type == VariableDefinitionType .COMMAND_LINE_VARIABLE :
465
- suite_var = self ._overridden_variables .get (var , None )
466
-
467
- if suite_var is not None and suite_var .type != VariableDefinitionType .VARIABLE :
468
- suite_var = None
469
-
470
- if var .name_range != var_range :
471
- self ._variable_references [var ].add (
472
- Location (
473
- self ._namespace .document .document_uri ,
474
- var_range ,
475
- )
476
- )
477
- if suite_var is not None :
478
- self ._variable_references [suite_var ].add (
479
- Location (
480
- self ._namespace .document .document_uri ,
481
- var_range ,
482
- )
483
- )
484
- if token .type == Token .ASSIGN and var .type in [
485
- VariableDefinitionType .LOCAL_VARIABLE ,
486
- VariableDefinitionType .ARGUMENT ,
487
- ]:
488
441
489
- self ._local_variable_assignments [var ].add (var_range )
490
-
491
- elif var not in self ._variable_references and token .type in [
492
- Token .ASSIGN ,
493
- Token .ARGUMENT ,
494
- Token .VARIABLE ,
495
- ]:
496
- self ._variable_references [var ] = set ()
497
- if suite_var is not None :
498
- self ._variable_references [suite_var ] = set ()
442
+ self ._variable_references [var ].add (Location (self ._namespace .document_uri , var_range ))
443
+ if suite_var is not None :
444
+ self ._variable_references [suite_var ].add (Location (self ._namespace .document_uri , var_range ))
499
445
500
446
def _append_diagnostics (
501
447
self ,
@@ -578,17 +524,14 @@ def _analyze_keyword_call(
578
524
kw_range = range_from_token (keyword_token )
579
525
580
526
if kw_namespace and lib_entry is not None and lib_range is not None :
581
- if self ._namespace .document is not None :
582
- entries = [lib_entry ]
583
- if self ._finder .multiple_keywords_result is not None :
584
- entries = next (
585
- (v for k , v in (self ._namespace .get_namespaces ()).items () if k == kw_namespace ),
586
- entries ,
587
- )
588
- for entry in entries :
589
- self ._namespace_references [entry ].add (
590
- Location (self ._namespace .document .document_uri , lib_range )
591
- )
527
+ entries = [lib_entry ]
528
+ if self ._finder .multiple_keywords_result is not None :
529
+ entries = next (
530
+ (v for k , v in (self ._namespace .get_namespaces ()).items () if k == kw_namespace ),
531
+ entries ,
532
+ )
533
+ for entry in entries :
534
+ self ._namespace_references [entry ].add (Location (self ._namespace .document_uri , lib_range ))
592
535
593
536
if not ignore_errors_if_contains_variables or is_not_variable_token (keyword_token ):
594
537
for e in self ._finder .diagnostics :
@@ -600,12 +543,12 @@ def _analyze_keyword_call(
600
543
)
601
544
602
545
if result is None :
603
- if self ._namespace . document is not None and self . _finder .multiple_keywords_result is not None :
546
+ if self ._finder .multiple_keywords_result is not None :
604
547
for d in self ._finder .multiple_keywords_result :
605
- self ._keyword_references [d ].add (Location (self ._namespace .document . document_uri , kw_range ))
548
+ self ._keyword_references [d ].add (Location (self ._namespace .document_uri , kw_range ))
606
549
else :
607
- if self . _namespace . document is not None :
608
- self ._keyword_references [result ].add (Location (self ._namespace . document .document_uri , kw_range ))
550
+
551
+ self ._keyword_references [result ].add (Location (self ._namespace .document_uri , kw_range ))
609
552
610
553
if result .errors :
611
554
self ._append_diagnostics (
@@ -705,7 +648,7 @@ def _analyze_keyword_call(
705
648
code = type (e ).__qualname__ ,
706
649
)
707
650
708
- if self . _namespace . document is not None and result is not None :
651
+ if result is not None :
709
652
if result .longname in [
710
653
"BuiltIn.Evaluate" ,
711
654
"BuiltIn.Should Be True" ,
@@ -721,39 +664,8 @@ def _analyze_keyword_call(
721
664
]:
722
665
tokens = argument_tokens
723
666
if tokens and (token := tokens [0 ]):
724
- for (
725
- var_token ,
726
- var ,
727
- ) in self ._iter_expression_variables_from_token (token ):
728
- if var .type == VariableDefinitionType .VARIABLE_NOT_FOUND :
729
- self ._append_diagnostics (
730
- range = range_from_token (var_token ),
731
- message = f"Variable '{ var .name } ' not found." ,
732
- severity = DiagnosticSeverity .ERROR ,
733
- code = Error .VARIABLE_NOT_FOUND ,
734
- )
735
- else :
736
- if self ._namespace .document is not None :
737
- self ._variable_references [var ].add (
738
- Location (
739
- self ._namespace .document .document_uri ,
740
- range_from_token (var_token ),
741
- )
742
- )
667
+ self ._analyze_token_expression_variables (token )
743
668
744
- if var .type == VariableDefinitionType .COMMAND_LINE_VARIABLE :
745
- suite_var = self ._namespace .find_variable (
746
- var .name ,
747
- skip_commandline_variables = True ,
748
- ignore_error = True ,
749
- )
750
- if suite_var is not None and suite_var .type == VariableDefinitionType .VARIABLE :
751
- self ._variable_references [suite_var ].add (
752
- Location (
753
- self ._namespace .document .document_uri ,
754
- range_from_token (var_token ),
755
- )
756
- )
757
669
if result .argument_definitions :
758
670
for arg in argument_tokens :
759
671
name , value = split_from_equals (arg .value )
@@ -766,7 +678,7 @@ def _analyze_keyword_call(
766
678
name_token = Token (Token .ARGUMENT , name , arg .lineno , arg .col_offset )
767
679
self ._variable_references [arg_def ].add (
768
680
Location (
769
- self ._namespace .document . document_uri ,
681
+ self ._namespace .document_uri ,
770
682
range_from_token (name_token ),
771
683
)
772
684
)
@@ -1152,13 +1064,12 @@ def _visit_Arguments(self, node: Statement) -> None: # noqa: N802
1152
1064
if arg_def not in self ._variable_references :
1153
1065
self ._variable_references [arg_def ] = set ()
1154
1066
else :
1155
- if self ._namespace .document is not None :
1156
- self ._variable_references [args [matcher ]].add (
1157
- Location (
1158
- self ._namespace .document .document_uri ,
1159
- range_from_token (strip_variable_token (argument )),
1160
- )
1067
+ self ._variable_references [args [matcher ]].add (
1068
+ Location (
1069
+ self ._namespace .document_uri ,
1070
+ range_from_token (strip_variable_token (argument )),
1161
1071
)
1072
+ )
1162
1073
1163
1074
except VariableError :
1164
1075
pass
@@ -1191,14 +1102,14 @@ def _analyze_assign_statement(self, node: Statement) -> None:
1191
1102
)
1192
1103
self ._variables [matcher ] = var_def
1193
1104
self ._variable_references [var_def ] = set ()
1105
+ self ._local_variable_assignments [var_def ].add (var_def .range )
1194
1106
else :
1195
- if self ._namespace .document is not None :
1196
- self ._variable_references [existing_var ].add (
1197
- Location (
1198
- self ._namespace .document .document_uri ,
1199
- range_from_token (strip_variable_token (variable_token )),
1200
- )
1107
+ self ._variable_references [existing_var ].add (
1108
+ Location (
1109
+ self ._namespace .document_uri ,
1110
+ range_from_token (strip_variable_token (variable_token )),
1201
1111
)
1112
+ )
1202
1113
1203
1114
except VariableError :
1204
1115
pass
@@ -1233,13 +1144,13 @@ def visit_ForHeader(self, node: Statement) -> None: # noqa: N802
1233
1144
self ._variables [var_def .matcher ] = var_def
1234
1145
self ._variable_references [var_def ] = set ()
1235
1146
else :
1236
- if self . _namespace . document is not None and existing_var .type in [
1147
+ if existing_var .type in [
1237
1148
VariableDefinitionType .ARGUMENT ,
1238
1149
VariableDefinitionType .LOCAL_VARIABLE ,
1239
1150
]:
1240
1151
self ._variable_references [existing_var ].add (
1241
1152
Location (
1242
- self ._namespace .document . document_uri ,
1153
+ self ._namespace .document_uri ,
1243
1154
range_from_token (strip_variable_token (variable_token )),
1244
1155
)
1245
1156
)
0 commit comments