Skip to content

Commit 8c76f8a

Browse files
committed
respect window.workDoneProgress capability to activate progress reporting
1 parent 03c5372 commit 8c76f8a

File tree

2 files changed

+33
-8
lines changed

2 files changed

+33
-8
lines changed

pylsp/workspace.py

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -136,15 +136,26 @@ def report_progress(
136136
message: Optional[str] = None,
137137
percentage: Optional[int] = None,
138138
) -> Generator[Callable[[str, Optional[int]], None], None, None]:
139-
token = self._progress_begin(title, message, percentage)
139+
if self._config:
140+
client_supports_progress_reporting = self._config.capabilities.get("window", {}).get("workDoneProgress", False)
141+
else:
142+
client_supports_progress_reporting = False
143+
144+
if client_supports_progress_reporting:
145+
token = self._progress_begin(title, message, percentage)
140146

141-
def progress_message(message: str, percentage: Optional[int] = None) -> None:
142-
self._progress_report(token, message, percentage)
147+
def progress_message(message: str, percentage: Optional[int] = None) -> None:
148+
self._progress_report(token, message, percentage)
149+
150+
try:
151+
yield progress_message
152+
finally:
153+
self._progress_end(token)
154+
else:
155+
def dummy_progress_message(message: str, percentage: Optional[int] = None) -> None:
156+
pass
143157

144-
try:
145-
yield progress_message
146-
finally:
147-
self._progress_end(token)
158+
yield dummy_progress_message
148159

149160
def _progress_begin(
150161
self,
@@ -154,7 +165,7 @@ def _progress_begin(
154165
) -> str:
155166
token = str(uuid.uuid4())
156167

157-
self._endpoint.request(self.M_INITIALIZE_PROGRESS, {'token': token}).result(_utils.CALL_TIMEOUT)
168+
self._endpoint.request(self.M_INITIALIZE_PROGRESS, {'token': token}).result()
158169

159170
value = {
160171
"kind": "begin",

test/test_workspace.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -294,8 +294,18 @@ def test_settings_of_added_workspace(pylsp, tmpdir):
294294
workspace1_jedi_settings = workspace1_object._config.plugin_settings('jedi')
295295
assert workspace1_jedi_settings == server_settings['pylsp']['plugins']['jedi']
296296

297+
def test_no_progress_without_capability(workspace, consumer):
298+
workspace._config.capabilities['window'] = {"workDoneProgress": False}
299+
300+
with workspace.report_progress("some_title"):
301+
pass
302+
303+
assert len(consumer.call_args_list) == 0
304+
297305

298306
def test_progress_simple(workspace, consumer):
307+
workspace._config.capabilities['window'] = {"workDoneProgress": True}
308+
299309
with workspace.report_progress("some_title"):
300310
pass
301311

@@ -316,6 +326,8 @@ def test_progress_simple(workspace, consumer):
316326

317327

318328
def test_progress_with_percent(workspace, consumer):
329+
workspace._config.capabilities['window'] = {"workDoneProgress": True}
330+
319331
with workspace.report_progress(
320332
"some_title", "initial message", percentage=1
321333
) as progress_message:
@@ -348,6 +360,8 @@ def test_progress_with_percent(workspace, consumer):
348360

349361

350362
def test_progress_with_exception(workspace, consumer):
363+
workspace._config.capabilities['window'] = {"workDoneProgress": True}
364+
351365
class DummyError(Exception):
352366
pass
353367

0 commit comments

Comments
 (0)