Skip to content

Commit 6db83ac

Browse files
committed
implement cancel progress received from client
1 parent f11d37e commit 6db83ac

File tree

4 files changed

+45
-6
lines changed

4 files changed

+45
-6
lines changed

robotcode/language_server/common/parts/window.py

Lines changed: 36 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
import uuid
2-
from typing import List, Optional
2+
from typing import Any, Dict, List, Optional
3+
4+
from robotcode.jsonrpc2.protocol import rpc_method
35

46
from ..lsp_types import (
57
URI,
@@ -54,6 +56,8 @@ async def show_document(
5456
)
5557
).success
5658

59+
__progress_tokens: Dict[ProgressToken, bool] = {}
60+
5761
async def create_progress(self) -> Optional[ProgressToken]:
5862

5963
if (
@@ -63,10 +67,28 @@ async def create_progress(self) -> Optional[ProgressToken]:
6367
):
6468
token = str(uuid.uuid4())
6569
await self.parent.send_request_async("window/workDoneProgress/create", WorkDoneProgressCreateParams(token))
70+
self.__progress_tokens[token] = False
6671
return token
6772

6873
return None
6974

75+
@rpc_method(name="window/workDoneProgress/cancel", param_type=WorkDoneProgressCancelParams)
76+
async def _window_work_done_progress_cancel(
77+
self,
78+
token: ProgressToken,
79+
*args: Any,
80+
**kwargs: Any,
81+
) -> None:
82+
83+
if token in self.__progress_tokens:
84+
self.__progress_tokens[token] = True
85+
86+
def progress_is_canceled(self, token: Optional[ProgressToken]) -> bool:
87+
if token is None:
88+
return False
89+
90+
return token in self.__progress_tokens and self.__progress_tokens.get(token, False)
91+
7092
def progress_cancel(self, token: Optional[ProgressToken]) -> None:
7193
if (
7294
token is not None
@@ -104,7 +126,10 @@ def progress_begin(
104126
self._progress(
105127
token,
106128
WorkDoneProgressBegin(
107-
title or self.parent.name or self._default_title, message, percentage, cancellable
129+
title or self.parent.short_name or self.parent.name or self._default_title,
130+
message,
131+
percentage,
132+
cancellable,
108133
),
109134
)
110135

@@ -125,7 +150,10 @@ def progress_report(
125150
self._progress(
126151
token,
127152
WorkDoneProgressReport(
128-
title or self.parent.name or self._default_title, message, percentage, cancellable
153+
title or self.parent.short_name or self.parent.name or self._default_title,
154+
message,
155+
percentage,
156+
cancellable,
129157
),
130158
)
131159

@@ -140,4 +168,8 @@ def progress_end(
140168
and self.parent.client_capabilities.window
141169
and self.parent.client_capabilities.window.work_done_progress
142170
):
143-
self._progress(token, WorkDoneProgressEnd(message))
171+
try:
172+
self._progress(token, WorkDoneProgressEnd(message))
173+
finally:
174+
if token in self.__progress_tokens:
175+
self.__progress_tokens.pop(token)

robotcode/language_server/common/protocol.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@ class LanguageServerProtocol(JsonRPCProtocol):
9090
rename = ProtocolPartDescriptor(RenameProtocolPart)
9191

9292
name: Optional[str] = None
93+
short_name: Optional[str] = None
9394
version: Optional[str] = None
9495

9596
file_extensions: Set[str] = set()

robotcode/language_server/robotframework/parts/robot_workspace.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ async def _on_change_configuration(self, sender: Any, settings: Dict[str, Any])
5656
async def run() -> None:
5757
token = await self.parent.window.create_progress()
5858

59-
self.parent.window.progress_begin(token, "Analyze files")
59+
self.parent.window.progress_begin(token, "Analyze...", cancellable=True)
6060
try:
6161
for folder in self.parent.workspace.workspace_folders:
6262
config = (
@@ -69,8 +69,12 @@ async def run() -> None:
6969
ignore_patterns=config.exclude_patterns or [], # type: ignore
7070
absolute=True,
7171
):
72+
if self.parent.window.progress_is_canceled(token):
73+
break
7274

73-
self.parent.window.progress_report(token, "analyze " + str(f.relative_to(folder.uri.to_path())))
75+
self.parent.window.progress_report(
76+
token, "analyze " + str(f.relative_to(folder.uri.to_path())), cancellable=True
77+
)
7478
try:
7579
document = await self.get_or_open_document(f, "robotframework")
7680

@@ -89,3 +93,4 @@ async def run() -> None:
8993
self.parent.window.progress_end(token)
9094

9195
await run()
96+
# await run()

robotcode/language_server/robotframework/protocol.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@ class RobotLanguageServerProtocol(LanguageServerProtocol):
9595
robot_debugging_utils = ProtocolPartDescriptor(RobotDebuggingUtilsProtocolPart)
9696

9797
name = "RobotCode Language Server"
98+
short_name = "RobotCode"
9899
version = __version__
99100

100101
file_extensions = {"robot", "resource", "py"}

0 commit comments

Comments
 (0)