Skip to content

Commit 4e1b23c

Browse files
committed
refactor(langserver): remove async code from inline value
1 parent 7535bfa commit 4e1b23c

File tree

4 files changed

+30
-34
lines changed

4 files changed

+30
-34
lines changed

packages/core/src/robotcode/core/concurrent.py

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -91,19 +91,22 @@ def is_current_thread_cancelled() -> bool:
9191
return local_future is not None and local_future.cancelation_requested
9292

9393

94-
def check_current_thread_canceled(at_least_seconds: Optional[float] = None) -> None:
94+
def check_current_thread_canceled(at_least_seconds: Optional[float] = None, raise_exception: bool = True) -> bool:
9595
local_future = _local_storage._local_future
9696
if local_future is None:
97-
return
97+
return False
9898

9999
if at_least_seconds is None or at_least_seconds <= 0:
100100
if not local_future.cancelation_requested:
101-
return
101+
return False
102102
elif not local_future.cancelation_requested_event.wait(at_least_seconds):
103-
return
103+
return False
104+
105+
if raise_exception:
106+
name = current_thread().name
107+
raise CancelledError(f"Thread {name+' ' if name else ' '}cancelled")
104108

105-
name = current_thread().name
106-
raise CancelledError(f"Thread {name+' ' if name else ' '}cancelled")
109+
return True
107110

108111

109112
_running_callables_lock = RLock()

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,4 +105,4 @@ def refresh(self) -> None:
105105
and self.parent.client_capabilities.workspace.inlay_hint is not None
106106
and self.parent.client_capabilities.workspace.inlay_hint.refresh_support
107107
):
108-
self.parent.send_request("workspace/inlayHint/refresh").result()
108+
self.parent.send_request("workspace/inlayHint/refresh").result(30)

packages/language_server/src/robotcode/language_server/common/parts/inline_value.py

Lines changed: 14 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,8 @@
1-
from __future__ import annotations
2-
31
from asyncio import CancelledError
42
from typing import TYPE_CHECKING, Any, Final, List, Optional
53

6-
from robotcode.core.async_tools import async_tasking_event
7-
from robotcode.core.concurrent import threaded
4+
from robotcode.core.concurrent import check_current_thread_canceled, threaded
5+
from robotcode.core.event import event
86
from robotcode.core.lsp.types import (
97
DocumentSelector,
108
InlineValue,
@@ -18,10 +16,7 @@
1816
)
1917
from robotcode.core.utils.logging import LoggingDescriptor
2018
from robotcode.jsonrpc2.protocol import rpc_method
21-
from robotcode.language_server.common.decorators import (
22-
LANGUAGE_ID_ATTR,
23-
language_id_filter,
24-
)
19+
from robotcode.language_server.common.decorators import LANGUAGE_ID_ATTR, language_id_filter
2520
from robotcode.language_server.common.parts.protocol_part import (
2621
LanguageServerProtocolPart,
2722
)
@@ -34,11 +29,11 @@
3429
class InlineValueProtocolPart(LanguageServerProtocolPart):
3530
_logger: Final = LoggingDescriptor()
3631

37-
def __init__(self, parent: LanguageServerProtocol) -> None:
32+
def __init__(self, parent: "LanguageServerProtocol") -> None:
3833
super().__init__(parent)
3934

40-
@async_tasking_event
41-
async def collect(
35+
@event
36+
def collect(
4237
sender,
4338
document: TextDocument,
4439
range: Range,
@@ -60,7 +55,7 @@ def extend_capabilities(self, capabilities: ServerCapabilities) -> None:
6055

6156
@rpc_method(name="textDocument/inlineValue", param_type=InlineValueParams)
6257
@threaded
63-
async def _text_document_inline_value(
58+
def _text_document_inline_value(
6459
self,
6560
text_document: TextDocumentIdentifier,
6661
range: Range,
@@ -73,9 +68,11 @@ async def _text_document_inline_value(
7368
if document is None:
7469
return None
7570

76-
for result in await self.collect(
71+
for result in self.collect(
7772
self, document, document.range_from_utf16(range), context, callback_filter=language_id_filter(document)
7873
):
74+
check_current_thread_canceled()
75+
7976
if isinstance(result, BaseException):
8077
if not isinstance(result, CancelledError):
8178
self._logger.exception(result, exc_info=result)
@@ -86,16 +83,16 @@ async def _text_document_inline_value(
8683
if not results:
8784
return None
8885

89-
for result in results:
90-
result.range = document.range_to_utf16(result.range)
86+
for r in results:
87+
r.range = document.range_to_utf16(r.range)
9188

9289
return results
9390

94-
async def refresh(self) -> None:
91+
def refresh(self) -> None:
9592
if (
9693
self.parent.client_capabilities
9794
and self.parent.client_capabilities.workspace
9895
and self.parent.client_capabilities.workspace.inline_value
9996
and self.parent.client_capabilities.workspace.inline_value.refresh_support
10097
):
101-
await self.parent.send_request_async("workspace/inlineValue/refresh")
98+
self.parent.send_request("workspace/inlineValue/refresh").result(30)

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

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
1-
from __future__ import annotations
2-
31
import ast
2+
from itertools import dropwhile, takewhile
43
from typing import TYPE_CHECKING, Any, Iterator, List, Optional, Tuple
54

65
from robot.parsing.lexer.tokens import Token
76
from robot.parsing.model.statements import Statement
8-
from robotcode.core.async_itertools import async_dropwhile, async_takewhile
97
from robotcode.core.lsp.types import InlineValue, InlineValueContext, InlineValueEvaluatableExpression, Range
108
from robotcode.core.utils.logging import LoggingDescriptor
119
from robotcode.robot.utils.ast import get_nodes_at_position, iter_nodes, range_from_node, range_from_token
@@ -16,22 +14,20 @@
1614
from .protocol_part import RobotLanguageServerProtocolPart
1715

1816
if TYPE_CHECKING:
19-
from robotcode.language_server.robotframework.protocol import (
20-
RobotLanguageServerProtocol,
21-
)
17+
from robotcode.language_server.robotframework.protocol import RobotLanguageServerProtocol
2218

2319

2420
class RobotInlineValueProtocolPart(RobotLanguageServerProtocolPart, ModelHelperMixin):
2521
_logger = LoggingDescriptor()
2622

27-
def __init__(self, parent: RobotLanguageServerProtocol) -> None:
23+
def __init__(self, parent: "RobotLanguageServerProtocol") -> None:
2824
super().__init__(parent)
2925

3026
parent.inline_value.collect.add(self.collect)
3127

3228
@language_id("robotframework")
3329
@_logger.call
34-
async def collect(
30+
def collect(
3531
self,
3632
sender: Any,
3733
document: TextDocument,
@@ -60,9 +56,9 @@ def get_tokens() -> Iterator[Tuple[Token, ast.AST]]:
6056
break
6157

6258
result: List[InlineValue] = []
63-
async for token, node in async_takewhile(
59+
for token, node in takewhile(
6460
lambda t: range_from_token(t[0]).end.line <= real_range.end.line,
65-
async_dropwhile(
61+
dropwhile(
6662
lambda t: range_from_token(t[0]).start < real_range.start,
6763
get_tokens(),
6864
),

0 commit comments

Comments
 (0)