Skip to content

Commit f757fa1

Browse files
committed
implement renaming of keywords
1 parent 81f444d commit f757fa1

File tree

6 files changed

+259
-193
lines changed

6 files changed

+259
-193
lines changed

robotcode/jsonrpc2/protocol.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -525,10 +525,10 @@ def send_request(
525525
method: str,
526526
params: Optional[Any] = None,
527527
return_type_or_converter: Optional[Type[_TResult]] = None,
528-
) -> asyncio.Future[_TResult]:
528+
) -> asyncio.Future[Optional[_TResult]]:
529529

530530
with self._sended_request_lock:
531-
result: asyncio.Future[_TResult] = create_sub_future()
531+
result: asyncio.Future[Optional[_TResult]] = create_sub_future()
532532
self._sended_request_count += 1
533533
id = self._sended_request_count
534534

@@ -544,7 +544,7 @@ async def send_request_async(
544544
method: str,
545545
params: Optional[Any] = None,
546546
return_type: Optional[Type[_TResult]] = None,
547-
) -> _TResult:
547+
) -> Optional[_TResult]:
548548

549549
return await self.send_request(method, params, return_type)
550550

@@ -571,7 +571,9 @@ def handle_response(self, message: JsonRPCResponse) -> None:
571571

572572
try:
573573
if not entry.future.done():
574-
res = from_dict(message.result, entry.result_type)
574+
res = None
575+
if message.result is not None:
576+
res = from_dict(message.result, entry.result_type)
575577
if entry.future._loop == asyncio.get_running_loop():
576578
entry.future.set_result(res)
577579
else:

robotcode/language_server/common/parts/rename.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from asyncio import CancelledError
44
from typing import TYPE_CHECKING, Any, List, Optional
55

6-
from ....jsonrpc2.protocol import rpc_method
6+
from ....jsonrpc2.protocol import JsonRPCErrorException, rpc_method
77
from ....utils.async_tools import async_tasking_event
88
from ....utils.logging import LoggingDescriptor
99
from ..decorators import language_id_filter
@@ -26,6 +26,10 @@
2626
from .protocol_part import LanguageServerProtocolPart
2727

2828

29+
class CantRenameException(Exception):
30+
pass
31+
32+
2933
class RenameProtocolPart(LanguageServerProtocolPart, HasExtendCapabilities):
3034

3135
_logger = LoggingDescriptor()
@@ -118,6 +122,9 @@ async def _text_document_prepare_rename(
118122
self, document, position, callback_filter=language_id_filter(document)
119123
):
120124
if isinstance(result, BaseException):
125+
if isinstance(result, CantRenameException):
126+
raise JsonRPCErrorException(100, str(result))
127+
121128
if not isinstance(result, CancelledError):
122129
self._logger.exception(result, exc_info=result)
123130
else:

robotcode/language_server/common/parts/window.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -34,12 +34,13 @@ def show_log_message(self, message: str, type: MessageType = MessageType.INFO) -
3434

3535
async def show_message_request(
3636
self, message: str, actions: List[str] = [], type: MessageType = MessageType.INFO
37-
) -> MessageActionItem:
38-
return await self.parent.send_request_async(
37+
) -> Optional[str]:
38+
r = await self.parent.send_request_async(
3939
"window/showMessageRequest",
4040
ShowMessageRequestParams(type=type, message=message, actions=[MessageActionItem(title=a) for a in actions]),
4141
MessageActionItem,
4242
)
43+
return r.title if r is not None else None
4344

4445
async def show_document(
4546
self,
@@ -48,13 +49,12 @@ async def show_document(
4849
take_focus: Optional[bool] = None,
4950
selection: Optional[Range] = None,
5051
) -> bool:
51-
return (
52-
await self.parent.send_request_async(
53-
"window/showDocument",
54-
ShowDocumentParams(uri=uri, external=external, take_focus=take_focus, selection=selection),
55-
ShowDocumentResult,
56-
)
57-
).success
52+
r = await self.parent.send_request_async(
53+
"window/showDocument",
54+
ShowDocumentParams(uri=uri, external=external, take_focus=take_focus, selection=selection),
55+
ShowDocumentResult,
56+
)
57+
return r.success if r is not None else False
5858

5959
__progress_tokens: Dict[ProgressToken, bool] = {}
6060

robotcode/language_server/common/parts/workspace.py

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -303,20 +303,20 @@ async def get_configuration(
303303
and self.parent.client_capabilities.workspace
304304
and self.parent.client_capabilities.workspace.configuration
305305
):
306-
return (
307-
await self.parent.send_request_async(
308-
"workspace/configuration",
309-
ConfigurationParams(
310-
items=[
311-
ConfigurationItem(
312-
scope_uri=str(scope_uri) if isinstance(scope_uri, Uri) else scope_uri,
313-
section=str(section),
314-
)
315-
]
316-
),
317-
list,
318-
)
319-
)[0]
306+
r = await self.parent.send_request_async(
307+
"workspace/configuration",
308+
ConfigurationParams(
309+
items=[
310+
ConfigurationItem(
311+
scope_uri=str(scope_uri) if isinstance(scope_uri, Uri) else scope_uri,
312+
section=str(section),
313+
)
314+
]
315+
),
316+
list,
317+
)
318+
319+
return r[0] if r is not None else None
320320

321321
result = self.settings
322322
for sub_key in str(section).split("."):

robotcode/language_server/robotframework/diagnostics/library_doc.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -314,6 +314,14 @@ def __str__(self) -> str:
314314
def is_deprecated(self) -> bool:
315315
return self.deprecated or DEPRECATED_PATTERN.match(self.doc) is not None
316316

317+
@property
318+
def is_resource_keyword(self) -> bool:
319+
return self.libtype == "RESOURCE"
320+
321+
@property
322+
def is_library_keyword(self) -> bool:
323+
return self.libtype == "LIBRARY"
324+
317325
@property
318326
def deprecated_message(self) -> str:
319327
if (m := DEPRECATED_PATTERN.match(self.doc)) is not None:

0 commit comments

Comments
 (0)