Skip to content

Commit 0a5bd29

Browse files
committed
Correct error in find variable references with invalid variables in variable section
1 parent 35a4253 commit 0a5bd29

12 files changed

+576
-479
lines changed

CHANGELOG.md

Lines changed: 470 additions & 468 deletions
Large diffs are not rendered by default.

robotcode/language_server/robotframework/diagnostics/namespace.py

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@
5454
CommandLineVariableDefinition,
5555
EnvironmentVariableDefinition,
5656
Import,
57+
InvalidVariableError,
5758
LibraryImport,
5859
LocalVariableDefinition,
5960
ResourceImport,
@@ -847,22 +848,27 @@ async def find_variable(
847848
nodes: Optional[List[ast.AST]] = None,
848849
position: Optional[Position] = None,
849850
skip_commandline_variables: bool = False,
851+
ignore_error: bool = False,
850852
) -> Optional[VariableDefinition]:
851853

852854
await self.ensure_initialized()
853855

854856
if name[:2] == "%{" and name[-1] == "}":
855857
return EnvironmentVariableDefinition(0, 0, 0, 0, "", name, None)
856858

857-
matcher = VariableMatcher(name)
859+
try:
860+
matcher = VariableMatcher(name)
858861

859-
async for m, v in self.yield_variables(
860-
nodes,
861-
position,
862-
skip_commandline_variables=skip_commandline_variables,
863-
):
864-
if matcher == m:
865-
return v
862+
async for m, v in self.yield_variables(
863+
nodes,
864+
position,
865+
skip_commandline_variables=skip_commandline_variables,
866+
):
867+
if matcher == m:
868+
return v
869+
except InvalidVariableError:
870+
if not ignore_error:
871+
raise
866872

867873
return None
868874

robotcode/language_server/robotframework/parts/model_helper.py

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -249,7 +249,11 @@ async def iter_expression_variables_from_token(
249249
if variable_started:
250250
if toknum == python_token.NAME:
251251
var = await namespace.find_variable(
252-
f"${{{tokval}}}", nodes, position, skip_commandline_variables=skip_commandline_variables
252+
f"${{{tokval}}}",
253+
nodes,
254+
position,
255+
skip_commandline_variables=skip_commandline_variables,
256+
ignore_error=True,
253257
)
254258
sub_token = RobotToken(
255259
expression.type,
@@ -411,7 +415,7 @@ async def iter_token(
411415
sub_token = token_or_var
412416
name = sub_token.value
413417
var = await namespace.find_variable(
414-
name, nodes, position, skip_commandline_variables=skip_commandline_variables
418+
name, nodes, position, skip_commandline_variables=skip_commandline_variables, ignore_error=True
415419
)
416420
if var is not None:
417421
yield strip_variable_token(sub_token), var
@@ -431,7 +435,11 @@ async def iter_token(
431435
base_name, _ = match.groups()
432436
name = f"{name[0]}{{{base_name.strip()}}}"
433437
var = await namespace.find_variable(
434-
name, nodes, position, skip_commandline_variables=skip_commandline_variables
438+
name,
439+
nodes,
440+
position,
441+
skip_commandline_variables=skip_commandline_variables,
442+
ignore_error=True,
435443
)
436444
sub_sub_token = RobotToken(sub_token.type, name, sub_token.lineno, sub_token.col_offset)
437445
if var is not None:

tests/robotcode/language_server/robotframework/parts/test_references/test_references_robot_003_018_Variable_in_library_import_path_.yml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,3 +120,12 @@ result:
120120
character: 18
121121
line: 9
122122
uri: tests/references.robot
123+
- !Location
124+
range:
125+
end:
126+
character: 19
127+
line: 15
128+
start:
129+
character: 13
130+
line: 15
131+
uri: tests/variables.robot

tests/robotcode/language_server/robotframework/parts/test_references/test_references_robot_003_021_Variable_in_library_import_path_.yml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,3 +120,12 @@ result:
120120
character: 18
121121
line: 9
122122
uri: tests/references.robot
123+
- !Location
124+
range:
125+
end:
126+
character: 19
127+
line: 15
128+
start:
129+
character: 13
130+
line: 15
131+
uri: tests/variables.robot

tests/robotcode/language_server/robotframework/parts/test_references/test_references_robot_003_023_Variable_in_library_import_path_.yml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,3 +120,12 @@ result:
120120
character: 18
121121
line: 9
122122
uri: tests/references.robot
123+
- !Location
124+
range:
125+
end:
126+
character: 19
127+
line: 15
128+
start:
129+
character: 13
130+
line: 15
131+
uri: tests/variables.robot

tests/robotcode/language_server/robotframework/parts/test_references/test_references_robot_006_018_Variable_in_variables_import_path_.yml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,3 +120,12 @@ result:
120120
character: 18
121121
line: 9
122122
uri: tests/references.robot
123+
- !Location
124+
range:
125+
end:
126+
character: 19
127+
line: 15
128+
start:
129+
character: 13
130+
line: 15
131+
uri: tests/variables.robot

tests/robotcode/language_server/robotframework/parts/test_references/test_references_robot_006_021_Variable_in_variables_import_path_.yml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,3 +120,12 @@ result:
120120
character: 18
121121
line: 9
122122
uri: tests/references.robot
123+
- !Location
124+
range:
125+
end:
126+
character: 19
127+
line: 15
128+
start:
129+
character: 13
130+
line: 15
131+
uri: tests/variables.robot

tests/robotcode/language_server/robotframework/parts/test_references/test_references_robot_006_023_Variable_in_variables_import_path_.yml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,3 +120,12 @@ result:
120120
character: 18
121121
line: 9
122122
uri: tests/references.robot
123+
- !Location
124+
range:
125+
end:
126+
character: 19
127+
line: 15
128+
start:
129+
character: 13
130+
line: 15
131+
uri: tests/variables.robot

tests/robotcode/language_server/robotframework/parts/test_references/test_references_robot_009_018_Variable_in_resource_import_path_.yml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,3 +120,12 @@ result:
120120
character: 18
121121
line: 9
122122
uri: tests/references.robot
123+
- !Location
124+
range:
125+
end:
126+
character: 19
127+
line: 15
128+
start:
129+
character: 13
130+
line: 15
131+
uri: tests/variables.robot

0 commit comments

Comments
 (0)