Skip to content

Commit 4e974c6

Browse files
committed
refactor(server): improve request dispatching and sender handling
1 parent 37abf3d commit 4e974c6

File tree

1 file changed

+21
-11
lines changed

1 file changed

+21
-11
lines changed

src/lsp_client/server/abc.py

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -43,18 +43,31 @@ async def kill(self) -> None:
4343
def run_process(self) -> AsyncGenerator[None]:
4444
"""Run the server process."""
4545

46-
async def _dispatch(self, sender: Sender[ServerRequest]) -> None:
46+
async def _dispatch(self, sender: Sender[ServerRequest] | None) -> None:
47+
if not sender:
48+
logger.warning(
49+
"No ServerRequest sender provided, all server requests and notifications will be ignored."
50+
)
51+
4752
async def handle(package: RawPackage) -> None:
4853
match package:
49-
case {"result": _, "id": id} | {"error": _, "id": id} as resp:
50-
self._resp_table.send(id, resp)
51-
case {"id": id, "method": _} as req:
54+
case {"result": _, "id": id} | {"error": _, "id": id}:
55+
self._resp_table.send(id, package)
56+
case {"id": id, "method": _}:
57+
if not sender:
58+
raise RuntimeError(
59+
"Received a server request without a sender provided."
60+
)
61+
5262
tx, rx = response_channel.create()
53-
await sender.send((req, tx))
63+
await sender.send((package, tx))
5464
resp = await rx.receive()
5565
await self.send(resp)
56-
case {"method": _} as noti:
57-
await sender.send(noti)
66+
case {"method": _}:
67+
if not sender:
68+
return
69+
70+
await sender.send(package)
5871

5972
async with asyncer.create_task_group() as tg:
6073
while package := await self.receive():
@@ -75,9 +88,6 @@ async def serve(
7588
self.run_process(),
7689
asyncer.create_task_group() as tg,
7790
):
78-
if sender:
79-
tg.soonify(self._dispatch)(sender)
80-
else:
81-
logger.debug("Server request sender not provided, skipping dispatch.")
91+
tg.soonify(self._dispatch)(sender)
8292

8393
yield self

0 commit comments

Comments
 (0)