11from __future__ import annotations
22
33from abc import ABC , abstractmethod
4- from collections .abc import AsyncGenerator , Sequence
4+ from collections .abc import AsyncGenerator
55from contextlib import asynccontextmanager
66from typing import Self
77
88import asyncer
9- from attrs import Factory , define , field
9+ from attrs import define , field
1010from loguru import logger
1111
1212from lsp_client .jsonrpc .channel import ResponseTable , response_channel
2323
2424@define (kw_only = True )
2525class Server (ABC ):
26- args : Sequence [ str ] = Factory ( list )
26+ """Base server implementation with JSON-RPC protocol handling."""
2727
2828 _resp_table : ResponseTable = field (factory = ResponseTable , init = False )
2929
@@ -43,11 +43,6 @@ async def receive(self) -> RawPackage | None:
4343 async def kill (self ) -> None :
4444 """Kill the runtime process."""
4545
46- @abstractmethod
47- @asynccontextmanager
48- def run_process (self , workspace : Workspace ) -> AsyncGenerator [None ]:
49- """Run the server process."""
50-
5146 async def _dispatch (self , sender : Sender [ServerRequest ] | None ) -> None :
5247 if not sender :
5348 logger .warning (
@@ -85,16 +80,12 @@ async def request(self, request: RawRequest) -> RawResponsePackage:
8580 async def notify (self , notification : RawNotification ) -> None :
8681 await self .send (notification )
8782
83+ @abstractmethod
8884 @asynccontextmanager
89- async def run (
85+ def run (
9086 self ,
9187 workspace : Workspace ,
9288 * ,
9389 sender : Sender [ServerRequest ] | None = None ,
9490 ) -> AsyncGenerator [Self ]:
95- async with (
96- self .run_process (workspace ),
97- asyncer .create_task_group () as tg ,
98- ):
99- tg .soonify (self ._dispatch )(sender )
100- yield self
91+ """Run the server."""
0 commit comments