Skip to content

Commit b561607

Browse files
committed
refactor(analyze): remove unused/unneeded call to find variable in namespace
1 parent 3a4ee79 commit b561607

File tree

2 files changed

+93
-178
lines changed

2 files changed

+93
-178
lines changed

packages/robot/src/robotcode/robot/diagnostics/namespace.py

+4
Original file line numberDiff line numberDiff line change
@@ -754,6 +754,10 @@ def has_analysed(sender) -> None: ...
754754
def document(self) -> Optional[TextDocument]:
755755
return self._document() if self._document is not None else None
756756

757+
@property
758+
def document_uri(self) -> str:
759+
return self.document.document_uri if self.document is not None else str(Uri.from_path(self.source))
760+
757761
@property
758762
def search_order(self) -> Tuple[str, ...]:
759763
if self._search_order is None:

packages/robot/src/robotcode/robot/diagnostics/namespace_analyzer.py

+89-178
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)