Skip to content

Commit 77ce8f1

Browse files
committed
fix(langserver): corrected inlay hints for bdd style keyword calls
1 parent 41ff53f commit 77ce8f1

File tree

6 files changed

+19
-25
lines changed

6 files changed

+19
-25
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2144,7 +2144,7 @@ def _complete_KeywordCall_or_Fixture( # noqa: N802
21442144
keyword_token,
21452145
[t for t in kw_node.get_tokens(Token.ARGUMENT)],
21462146
self.namespace,
2147-
range_from_token(keyword_token).start,
2147+
range_from_token(keyword_token).end,
21482148
analyse_run_keywords=False,
21492149
)
21502150

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -107,13 +107,13 @@ def _handle_keywordcall_fixture_template(
107107
keyword_token,
108108
arguments,
109109
namespace,
110-
range_from_token(keyword_token).start,
110+
range_from_token(keyword_token).end,
111111
)
112112

113113
if kw_result is None:
114114
return None
115115

116-
kw_doc, _ = kw_result
116+
kw_doc, keyword_token = kw_result
117117

118118
if kw_doc is None:
119119
return None

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ def _signature_help_KeywordCall_or_Fixture( # noqa: N802
135135
keyword_token,
136136
[t for t in kw_node.get_tokens(RobotToken.ARGUMENT)],
137137
namespace,
138-
range_from_token(keyword_token).start,
138+
range_from_token(keyword_token).end,
139139
analyse_run_keywords=False,
140140
)
141141

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ def reset_diagnostics(self) -> None:
6666
self.multiple_keywords_result = None
6767
self.result_bdd_prefix = None
6868

69+
# TODO: make this threadsafe
6970
def find_keyword(
7071
self,
7172
name: Optional[str],
@@ -480,7 +481,7 @@ def _get_bdd_style_keyword(self, name: str) -> Optional[KeywordDoc]:
480481
name[match.end() :], handle_bdd_style=False if get_robot_version() >= (7, 0) else True
481482
)
482483
if result:
483-
self.result_bdd_prefix = str(match)
484+
self.result_bdd_prefix = str(match.group(0))
484485

485486
return result
486487
return None

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -210,10 +210,14 @@ def get_keyworddoc_and_token_from_position(
210210
position: Position,
211211
analyse_run_keywords: bool = True,
212212
) -> Optional[Tuple[Optional[KeywordDoc], Token]]:
213-
keyword_doc = namespace.find_keyword(keyword_name, raise_keyword_error=False)
213+
finder = namespace.get_finder()
214+
keyword_doc = finder.find_keyword(keyword_name, raise_keyword_error=False)
214215
if keyword_doc is None:
215216
return None
216217

218+
if finder.result_bdd_prefix:
219+
keyword_token = ModelHelper.strip_bdd_prefix(namespace, keyword_token)
220+
217221
if position.is_in_range(range_from_token(keyword_token)):
218222
return keyword_doc, keyword_token
219223

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

Lines changed: 8 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import ast
22
import enum
33
import itertools
4-
import time
54
import weakref
65
from collections import OrderedDict, defaultdict
76
from concurrent.futures import CancelledError
@@ -1804,28 +1803,18 @@ def iter_all_keywords(self) -> Iterator[KeywordDoc]:
18041803
def get_keywords(self) -> List[KeywordDoc]:
18051804
with self._keywords_lock:
18061805
if self._keywords is None:
1807-
current_time = time.monotonic()
1808-
self._logger.debug("start collecting keywords")
1809-
try:
1810-
i = 0
18111806

1812-
self.ensure_initialized()
1807+
i = 0
18131808

1814-
result: Dict[KeywordMatcher, KeywordDoc] = {}
1809+
self.ensure_initialized()
18151810

1816-
for doc in self.iter_all_keywords():
1817-
i += 1
1818-
result[doc.matcher] = doc
1811+
result: Dict[KeywordMatcher, KeywordDoc] = {}
18191812

1820-
self._keywords = list(result.values())
1821-
except BaseException:
1822-
self._logger.debug("Canceled collecting keywords ")
1823-
raise
1824-
else:
1825-
self._logger.debug(
1826-
lambda: f"end collecting {len(self._keywords) if self._keywords else 0}"
1827-
f" keywords in {time.monotonic() - current_time}s analyze {i} keywords"
1828-
)
1813+
for doc in self.iter_all_keywords():
1814+
i += 1
1815+
result[doc.matcher] = doc
1816+
1817+
self._keywords = list(result.values())
18291818

18301819
return self._keywords
18311820

0 commit comments

Comments
 (0)