Skip to content

Commit 3d095d3

Browse files
committed
correct hover keywords and testcases
1 parent 76adcc4 commit 3d095d3

File tree

2 files changed

+32
-32
lines changed

2 files changed

+32
-32
lines changed

robotcode/language_server/robotframework/diagnostics/library_doc.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -384,7 +384,10 @@ def _matchers(self) -> Dict[KeywordMatcher, KeywordDoc]:
384384
self.__matchers = {KeywordMatcher(k): v for k, v in self.keywords.items()}
385385
return self.__matchers
386386

387-
def __getitem__(self, key: str) -> "KeywordDoc":
387+
def __getitem__(self, key: Union[KeywordMatcher, str]) -> "KeywordDoc":
388+
if isinstance(key, str):
389+
key = KeywordMatcher(key)
390+
388391
items = [(k, v) for k, v in self._matchers.items() if k == key]
389392

390393
if not items:
@@ -426,7 +429,7 @@ def keys(self) -> AbstractSet[str]:
426429
def values(self) -> ValuesView[KeywordDoc]:
427430
return self.keywords.values()
428431

429-
def get(self, key: str, default: Optional[KeywordDoc] = None) -> Optional[KeywordDoc]:
432+
def get(self, key: Union[KeywordMatcher, str], default: Optional[KeywordDoc] = None) -> Optional[KeywordDoc]:
430433
try:
431434
return self.__getitem__(key)
432435
except KeyError:

robotcode/language_server/robotframework/parts/hover.py

Lines changed: 27 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
from ...common.language import language_id
2020
from ...common.lsp_types import Hover, MarkupContent, MarkupKind, Position
2121
from ...common.text_document import TextDocument
22+
from ..diagnostics.library_doc import KeywordMatcher
2223
from ..utils.ast import (
2324
HasTokens,
2425
Token,
@@ -74,17 +75,13 @@ async def run() -> Optional[Hover]:
7475
if not result_nodes:
7576
return None
7677

77-
while result_nodes:
78-
result_node = result_nodes[-1]
79-
78+
for result_node in reversed(result_nodes):
8079
method = self._find_method(type(result_node))
8180
if method is not None:
8281
result = await method(result_node, document, position)
8382
if result is not None:
8483
return result
8584

86-
result_nodes = result_nodes[:-1]
87-
8885
return await self._hover_default(result_nodes, document, position)
8986

9087
return await run_coroutine_in_thread(run)
@@ -127,31 +124,6 @@ async def _hover_default(self, nodes: List[ast.AST], document: TextDocument, pos
127124
pass
128125
return None
129126

130-
async def hover_KeywordName( # noqa: N802
131-
self, node: ast.AST, document: TextDocument, position: Position
132-
) -> Optional[Hover]:
133-
from robot.parsing.lexer.tokens import Token as RobotToken
134-
from robot.parsing.model.statements import KeywordName
135-
136-
namespace = await self.parent.documents_cache.get_namespace(document)
137-
if namespace is None:
138-
return None
139-
140-
kw_node = cast(KeywordName, node)
141-
name_token = kw_node.get_token(RobotToken.KEYWORD_NAME)
142-
if not name_token:
143-
return None
144-
145-
result = await namespace.find_keyword(name_token.value)
146-
147-
if result is not None and not result.is_error_handler:
148-
return Hover(
149-
contents=MarkupContent(kind=MarkupKind.MARKDOWN, value=result.to_markdown()),
150-
range=range_from_token_or_node(node, name_token),
151-
)
152-
153-
return None
154-
155127
async def hover_KeywordCall( # noqa: N802
156128
self, node: ast.AST, document: TextDocument, position: Position
157129
) -> Optional[Hover]:
@@ -312,6 +284,31 @@ async def hover_ResourceImport( # noqa: N802
312284
pass
313285
return None
314286

287+
async def hover_KeywordName( # noqa: N802
288+
self, node: ast.AST, document: TextDocument, position: Position
289+
) -> Optional[Hover]:
290+
from robot.parsing.lexer.tokens import Token as RobotToken
291+
from robot.parsing.model.statements import KeywordName
292+
293+
namespace = await self.parent.documents_cache.get_namespace(document)
294+
if namespace is None:
295+
return None
296+
297+
kw_node = cast(KeywordName, node)
298+
name_token = kw_node.get_token(RobotToken.KEYWORD_NAME)
299+
if not name_token:
300+
return None
301+
302+
result = (await namespace.get_library_doc()).keywords.get(KeywordMatcher(name_token.value), None)
303+
304+
if result is not None and not result.is_error_handler:
305+
return Hover(
306+
contents=MarkupContent(kind=MarkupKind.MARKDOWN, value=result.to_markdown()),
307+
range=range_from_token_or_node(node, name_token),
308+
)
309+
310+
return None
311+
315312
async def hover_TestCase( # noqa: N802
316313
self, node: ast.AST, document: TextDocument, position: Position
317314
) -> Optional[Hover]:

0 commit comments

Comments
 (0)