Skip to content

Commit 2c8ed56

Browse files
committed
fix(analyzer): correct handling of variables in embedded args in keyword calls
closes #360
1 parent 18b6cb8 commit 2c8ed56

File tree

2 files changed

+9
-8
lines changed

2 files changed

+9
-8
lines changed

packages/language_server/src/robotcode/language_server/robotframework/parts/semantic_tokens.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -404,7 +404,7 @@ def generate_sem_sub_tokens(
404404
):
405405
if (
406406
namespace.find_keyword(
407-
token.value,
407+
unescape(token.value), # TODO: this must be resovle possible variables
408408
raise_keyword_error=False,
409409
handle_bdd_style=False,
410410
)
@@ -458,7 +458,9 @@ def generate_sem_sub_tokens(
458458

459459
kw_namespace: Optional[str] = None
460460
kw: str = token.value
461-
kw_doc = namespace.find_keyword(token.value, raise_keyword_error=False)
461+
kw_doc = namespace.find_keyword(
462+
unescape(token.value), raise_keyword_error=False
463+
) # TODO: this must be resovle possible variables
462464

463465
(
464466
lib_entry,
@@ -1121,14 +1123,14 @@ def get_tokens() -> Iterator[Tuple[Token, ast.AST]]:
11211123
kw: Optional[str] = None
11221124

11231125
for _, n in iter_over_keyword_names_and_owners(
1124-
ModelHelper.strip_bdd_prefix(namespace, kw_token).value
1126+
unescape(ModelHelper.strip_bdd_prefix(namespace, kw_token).value)
11251127
):
11261128
if n is not None:
11271129
matcher = KeywordMatcher(n)
11281130
if matcher in ALL_RUN_KEYWORDS_MATCHERS:
11291131
kw = n
11301132
if kw:
1131-
kw_doc = namespace.find_keyword(kw_token.value)
1133+
kw_doc = namespace.find_keyword(unescape(kw_token.value))
11321134
if kw_doc is not None and kw_doc.is_any_run_keyword():
11331135
for kw_res in self.generate_run_kw_tokens(
11341136
namespace,

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

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -584,10 +584,11 @@ def _analyze_keyword_call(
584584
analyze_run_keywords: bool = True,
585585
allow_variables: bool = False,
586586
ignore_errors_if_contains_variables: bool = False,
587+
unescape_keyword: bool = True,
587588
) -> Optional[KeywordDoc]:
588589
result: Optional[KeywordDoc] = None
589590

590-
keyword = unescape(keyword_token.value)
591+
keyword = unescape(keyword_token.value) if unescape_keyword else keyword_token.value
591592

592593
try:
593594
lib_entry = None
@@ -1008,9 +1009,7 @@ def visit_KeywordCall(self, node: KeywordCall) -> None: # noqa: N802
10081009
self._analyze_statement_variables(node)
10091010

10101011
self._analyze_keyword_call(
1011-
node,
1012-
keyword_token,
1013-
[e for e in node.get_tokens(Token.ARGUMENT)],
1012+
node, keyword_token, [e for e in node.get_tokens(Token.ARGUMENT)], unescape_keyword=False
10141013
)
10151014

10161015
if not self._current_testcase_or_keyword_name:

0 commit comments

Comments
 (0)