Skip to content

Commit 8a3f985

Browse files
committed
analyse parameters of run keywords
1 parent ccaefe6 commit 8a3f985

File tree

1 file changed

+27
-17
lines changed
  • robotcode/language_server/robotframework/diagnostics

1 file changed

+27
-17
lines changed

robotcode/language_server/robotframework/diagnostics/analyzer.py

Lines changed: 27 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
from ..utils.ast import (
1919
Token,
2020
is_not_variable_token,
21-
range_from_node,
2221
range_from_node_or_token,
2322
range_from_token,
2423
)
@@ -144,7 +143,12 @@ async def _analyze_keyword_call(
144143
except BaseException as e:
145144
self._results.append(
146145
Diagnostic(
147-
range=range_from_node(node, True),
146+
range=Range(
147+
start=range_from_token(keyword_token).start,
148+
end=range_from_token(argument_tokens[-1]).end
149+
if argument_tokens
150+
else range_from_token(keyword_token).end,
151+
),
148152
message=str(e),
149153
severity=DiagnosticSeverity.ERROR,
150154
source=DIAGNOSTICS_SOURCE_NAME,
@@ -232,32 +236,38 @@ async def _analyse_run_keyword(
232236

233237
elif keyword_doc.is_run_keyword_if() and len(argument_tokens) > 1:
234238

235-
def skip_args() -> None:
239+
def skip_args() -> List[Token]:
236240
nonlocal argument_tokens
237-
241+
result = []
238242
while argument_tokens:
239243
if argument_tokens[0].value in ["ELSE", "ELSE IF"]:
240244
break
245+
if argument_tokens:
246+
result.append(argument_tokens[0])
241247
argument_tokens = argument_tokens[1:]
242248

243-
result = (
244-
await self._analyze_keyword_call(
245-
unescape(argument_tokens[1].value),
246-
node,
247-
argument_tokens[1],
248-
argument_tokens[2:],
249-
analyse_run_keywords=False,
250-
)
251-
if is_not_variable_token(argument_tokens[1])
252-
else None
253-
)
249+
return result
254250

255-
argument_tokens = argument_tokens[2:]
251+
result = await self.finder.find_keyword(argument_tokens[1].value)
256252

257253
if result is not None and result.is_any_run_keyword():
254+
argument_tokens = argument_tokens[2:]
255+
258256
argument_tokens = await self._analyse_run_keyword(result, node, argument_tokens)
257+
else:
258+
kwt = argument_tokens[1]
259+
argument_tokens = argument_tokens[2:]
259260

260-
skip_args()
261+
args = skip_args()
262+
263+
if is_not_variable_token(kwt):
264+
await self._analyze_keyword_call(
265+
unescape(kwt.value),
266+
node,
267+
kwt,
268+
args,
269+
analyse_run_keywords=False,
270+
)
261271

262272
while argument_tokens:
263273
if argument_tokens[0].value == "ELSE" and len(argument_tokens) > 1:

0 commit comments

Comments
 (0)