@@ -202,16 +202,14 @@ def _visit_Variable(self, node: Variable) -> None: # noqa: N802
202202 add_to_references = True
203203 first_overidden_reference : Optional [VariableDefinition ] = None
204204 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 ))
215213
216214 if add_to_references and existing_var .type in [
217215 VariableDefinitionType .GLOBAL_VARIABLE ,
@@ -336,13 +334,11 @@ def visit_Var(self, node: Statement) -> None: # noqa: N802
336334 self ._variable_references [var ] = set ()
337335 else :
338336 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 )
346342
347343 except VariableError :
348344 pass
@@ -377,43 +373,7 @@ def _analyze_token_expression_variables(
377373 self , token : Token , severity : DiagnosticSeverity = DiagnosticSeverity .ERROR
378374 ) -> None :
379375 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 )
417377
418378 def visit (self , node : ast .AST ) -> None :
419379 check_current_task_canceled ()
@@ -426,76 +386,62 @@ def visit(self, node: ast.AST) -> None:
426386
427387 def _analyze_token_variables (self , token : Token , severity : DiagnosticSeverity = DiagnosticSeverity .ERROR ) -> None :
428388 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 :
431413 self ._append_diagnostics (
432414 range = range_from_token (var_token ),
433- message = f"Variable '{ var .name } ' not found." ,
415+ message = f"Environment variable '{ var .name } ' not found." ,
434416 severity = severity ,
435417 source = DIAGNOSTICS_SOURCE_NAME ,
436- code = Error .VARIABLE_NOT_FOUND ,
418+ code = Error .ENVIROMMENT_VARIABLE_NOT_FOUND ,
437419 )
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 ("=" )
460420
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 )
462438
439+ if suite_var is not None and suite_var .type != VariableDefinitionType .VARIABLE :
463440 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- ]:
488441
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 ))
499445
500446 def _append_diagnostics (
501447 self ,
@@ -578,17 +524,14 @@ def _analyze_keyword_call(
578524 kw_range = range_from_token (keyword_token )
579525
580526 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 ))
592535
593536 if not ignore_errors_if_contains_variables or is_not_variable_token (keyword_token ):
594537 for e in self ._finder .diagnostics :
@@ -600,12 +543,12 @@ def _analyze_keyword_call(
600543 )
601544
602545 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 :
604547 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 ))
606549 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 ))
609552
610553 if result .errors :
611554 self ._append_diagnostics (
@@ -705,7 +648,7 @@ def _analyze_keyword_call(
705648 code = type (e ).__qualname__ ,
706649 )
707650
708- if self . _namespace . document is not None and result is not None :
651+ if result is not None :
709652 if result .longname in [
710653 "BuiltIn.Evaluate" ,
711654 "BuiltIn.Should Be True" ,
@@ -721,39 +664,8 @@ def _analyze_keyword_call(
721664 ]:
722665 tokens = argument_tokens
723666 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 )
743668
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- )
757669 if result .argument_definitions :
758670 for arg in argument_tokens :
759671 name , value = split_from_equals (arg .value )
@@ -766,7 +678,7 @@ def _analyze_keyword_call(
766678 name_token = Token (Token .ARGUMENT , name , arg .lineno , arg .col_offset )
767679 self ._variable_references [arg_def ].add (
768680 Location (
769- self ._namespace .document . document_uri ,
681+ self ._namespace .document_uri ,
770682 range_from_token (name_token ),
771683 )
772684 )
@@ -1152,13 +1064,12 @@ def _visit_Arguments(self, node: Statement) -> None: # noqa: N802
11521064 if arg_def not in self ._variable_references :
11531065 self ._variable_references [arg_def ] = set ()
11541066 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 )),
11611071 )
1072+ )
11621073
11631074 except VariableError :
11641075 pass
@@ -1191,14 +1102,14 @@ def _analyze_assign_statement(self, node: Statement) -> None:
11911102 )
11921103 self ._variables [matcher ] = var_def
11931104 self ._variable_references [var_def ] = set ()
1105+ self ._local_variable_assignments [var_def ].add (var_def .range )
11941106 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 )),
12011111 )
1112+ )
12021113
12031114 except VariableError :
12041115 pass
@@ -1233,13 +1144,13 @@ def visit_ForHeader(self, node: Statement) -> None: # noqa: N802
12331144 self ._variables [var_def .matcher ] = var_def
12341145 self ._variable_references [var_def ] = set ()
12351146 else :
1236- if self . _namespace . document is not None and existing_var .type in [
1147+ if existing_var .type in [
12371148 VariableDefinitionType .ARGUMENT ,
12381149 VariableDefinitionType .LOCAL_VARIABLE ,
12391150 ]:
12401151 self ._variable_references [existing_var ].add (
12411152 Location (
1242- self ._namespace .document . document_uri ,
1153+ self ._namespace .document_uri ,
12431154 range_from_token (strip_variable_token (variable_token )),
12441155 )
12451156 )
0 commit comments