Skip to content

Commit eb7b681

Browse files
committed
lsp: Use pygls' support for typed command handlers
1 parent 3c45a98 commit eb7b681

File tree

3 files changed

+23
-11
lines changed

3 files changed

+23
-11
lines changed

lib/esbonio/esbonio/server/features/preview_manager/__init__.py

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
from typing import Optional
33
from urllib.parse import urlencode
44

5+
import attrs
56
from lsprotocol import types
67
from pygls.capabilities import get_capability
78

@@ -18,6 +19,11 @@
1819
from .webview import make_ws_server
1920

2021

22+
@attrs.define
23+
class PreviewFileParams:
24+
uri: str
25+
26+
2127
class PreviewManager(server.LanguageFeature):
2228
"""Language feature for managing previews."""
2329

@@ -144,12 +150,12 @@ async def scroll_view(self, uri: str, line: int):
144150

145151
self.webview.scroll(uri, line)
146152

147-
async def preview_file(self, params, retry=True):
153+
async def preview_file(self, params: PreviewFileParams, retry=True):
148154
if self.preview is None:
149155
return None
150156

151157
# Always check the fully resolved uri.
152-
src_uri = Uri.parse(params["uri"]).resolve()
158+
src_uri = Uri.parse(params.uri).resolve()
153159
self.logger.debug("Previewing file: '%s'", src_uri)
154160

155161
if (client := await self.sphinx.get_client(src_uri)) is None:
@@ -227,5 +233,5 @@ async def on_scroll(ls: server.EsbonioLanguageServer, params):
227233
await manager.scroll_view(params.uri, params.line)
228234

229235
@esbonio.command("esbonio.server.previewFile")
230-
async def preview_file(ls: server.EsbonioLanguageServer, *args):
231-
return await manager.preview_file(args[0][0])
236+
async def preview_file(ls: server.EsbonioLanguageServer, params: PreviewFileParams):
237+
return await manager.preview_file(params)

lib/esbonio/esbonio/server/features/sphinx_manager/__init__.py

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
from .client import SphinxClient
88
from .client_subprocess import make_subprocess_sphinx_client
99
from .config import SphinxConfig
10+
from .manager import RestartSphinxParams
1011
from .manager import SphinxManager
1112

1213
__all__ = [
@@ -22,11 +23,8 @@ def esbonio_setup(server: EsbonioLanguageServer, project_manager: ProjectManager
2223
server.add_feature(manager)
2324

2425
@server.command("esbonio.sphinx.restart")
25-
async def restart_client(ls: EsbonioLanguageServer, params, *args):
26+
async def restart_client(
27+
ls: EsbonioLanguageServer, params: RestartSphinxParams, *args
28+
):
2629
ls.logger.debug("esbonio.sphinx.restart: %s", params)
27-
28-
for item in params:
29-
if item is None:
30-
continue
31-
32-
await manager.restart_client(item["id"])
30+
await manager.restart_client(params.id)

lib/esbonio/esbonio/server/features/sphinx_manager/manager.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,14 @@ class ManagerConfig:
9393
"""Options controlling when to trigger a Sphinx build."""
9494

9595

96+
@attrs.define
97+
class RestartSphinxParams:
98+
"""Parameters for the ``esbonio.sphinx.restart`` command"""
99+
100+
id: str
101+
"""The id of the sphinx client to restart"""
102+
103+
96104
class SphinxManager(server.LanguageFeature):
97105
"""Responsible for managing Sphinx application instances."""
98106

0 commit comments

Comments
 (0)