Skip to content

Commit c2b127c

Browse files
committed
feat: expose run_server
1 parent fb1c239 commit c2b127c

File tree

1 file changed

+20
-20
lines changed

1 file changed

+20
-20
lines changed

src/lsp_client/client/abc.py

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,25 @@ async def _iter_candidate_servers(self) -> AsyncGenerator[Server]:
8888
yield defaults.container
8989
yield defaults.local
9090

91+
@asynccontextmanager
92+
async def run_server(
93+
self,
94+
) -> AsyncGenerator[tuple[Server, Receiver[ServerRequest]]]:
95+
async with channel[ServerRequest].create() as (sender, receiver):
96+
errors: list[ServerRuntimeError] = []
97+
async for candidate in self._iter_candidate_servers():
98+
try:
99+
async with candidate.run(self._workspace, sender=sender) as server: # ty: ignore[invalid-argument-type]
100+
yield server, receiver
101+
return
102+
except ServerRuntimeError as e:
103+
logger.debug("Failed to start server {}: {}", candidate, e)
104+
errors.append(e)
105+
106+
raise ExceptionGroup(
107+
f"All servers failed to start for {type(self).__name__}", errors
108+
)
109+
91110
@override
92111
def get_workspace(self) -> Workspace:
93112
return self._workspace
@@ -221,25 +240,6 @@ async def _exit(self) -> None:
221240

222241
await self.notify(lsp_type.ExitNotification())
223242

224-
@asynccontextmanager
225-
async def _run_server(
226-
self,
227-
) -> AsyncGenerator[tuple[Server, Receiver[ServerRequest]]]:
228-
async with channel[ServerRequest].create() as (sender, receiver):
229-
errors: list[ServerRuntimeError] = []
230-
async for candidate in self._iter_candidate_servers():
231-
try:
232-
async with candidate.run(self._workspace, sender=sender) as server: # ty: ignore[invalid-argument-type]
233-
yield server, receiver
234-
return
235-
except ServerRuntimeError as e:
236-
logger.debug("Failed to start server {}: {}", candidate, e)
237-
errors.append(e)
238-
239-
raise ExceptionGroup(
240-
f"All servers failed to start for {type(self).__name__}", errors
241-
)
242-
243243
@override
244244
@asynccontextmanager
245245
@logger.catch(reraise=True)
@@ -251,7 +251,7 @@ async def __asynccontextmanager__(self) -> AsyncGenerator[Self]:
251251

252252
async with (
253253
asyncer.create_task_group() as tg,
254-
self._run_server() as (server, receiver), # ty: ignore[invalid-argument-type]
254+
self.run_server() as (server, receiver), # ty: ignore[invalid-argument-type]
255255
):
256256
self._server = server
257257

0 commit comments

Comments
 (0)