File tree Expand file tree Collapse file tree 6 files changed +36
-11
lines changed
Expand file tree Collapse file tree 6 files changed +36
-11
lines changed Original file line number Diff line number Diff line change 1010import anyio
1111import asyncer
1212from anyio import AsyncContextManagerMixin
13- from attrs import define , field
13+ from attrs import Factory , define , field
1414from loguru import logger
1515
1616from lsp_client .capability .build import (
@@ -51,7 +51,10 @@ class LSPClient(
5151 AsyncContextManagerMixin ,
5252 ABC ,
5353):
54- _server : LSPServer = field (alias = "server" )
54+ _server : LSPServer = field (
55+ alias = "server" ,
56+ default = Factory (lambda self : self .create_default_server (), takes_self = True ),
57+ )
5558
5659 _workspace : RawWorkspace = field (alias = "workspace" , factory = Path .cwd )
5760 sync_file : bool = True
@@ -87,6 +90,10 @@ def get_workspace(self) -> Workspace:
8790 def get_language_id (self ) -> lsp_type .LanguageKind :
8891 """The language ID of the client."""
8992
93+ @abstractmethod
94+ def create_default_server (self ) -> LSPServer :
95+ """Create the default server for this client."""
96+
9097 @abstractmethod
9198 async def ensure_installed (self ) -> None :
9299 """
Original file line number Diff line number Diff line change 77from .rust_analyzer import RustAnalyzerClient
88from .typescript import TypescriptClient
99
10- clients : Final = (
11- PyreflyClient ,
10+ local_clients : Final = (
1211 PyrightClient ,
1312 RustAnalyzerClient ,
13+ PyreflyClient ,
1414 TypescriptClient ,
1515)
1616
2222 "PythonClient" ,
2323 "RustClient" ,
2424 "TypeScriptClient" ,
25- "clients " ,
25+ "local_clients " ,
2626]
Original file line number Diff line number Diff line change 3636 WithRespondWorkspaceFoldersRequest ,
3737)
3838from lsp_client .client .abc import LSPClient
39+ from lsp_client .server .abc import LSPServer
40+ from lsp_client .server .docker import DockerServer
3941from lsp_client .server .local import LocalServer
4042from lsp_client .utils .types import lsp_type
4143
42- PyreflyLocalServer = partial (LocalServer , command = ["pyrefly" , "lsp" ])
44+ PyreflyDockerServer = partial (
45+ DockerServer , image = "docker.io/lspcontainers/pyrefly"
46+ )
4347
4448
4549@define
@@ -82,6 +86,10 @@ class PyreflyClient(
8286 def get_language_id (self ) -> lsp_type .LanguageKind :
8387 return lsp_type .LanguageKind .Python
8488
89+ @override
90+ def create_default_server (self ) -> LSPServer :
91+ return LocalServer (command = ["pyrefly" , "lsp" ])
92+
8593 @override
8694 def create_initialization_options (self ) -> dict [str , Any ]:
8795 options : dict [str , Any ] = {}
Original file line number Diff line number Diff line change 3535 WithRespondWorkspaceFoldersRequest ,
3636)
3737from lsp_client .client .abc import LSPClient
38+ from lsp_client .server .abc import LSPServer
3839from lsp_client .server .docker import DockerServer
3940from lsp_client .server .local import LocalServer
4041from lsp_client .utils .types import lsp_type
4142
42- PyrightLocalServer = partial (LocalServer , command = ["pyright-langserver" , "--stdio" ])
4343PyrightDockerServer = partial (
4444 DockerServer , image = "docker.io/lspcontainers/pyright-langserver"
4545)
@@ -81,6 +81,10 @@ class PyrightClient(
8181 def get_language_id (self ) -> lsp_type .LanguageKind :
8282 return lsp_type .LanguageKind .Python
8383
84+ @override
85+ def create_default_server (self ) -> LSPServer :
86+ return LocalServer (command = ["pyright-langserver" , "--stdio" ])
87+
8488 @override
8589 def create_initialization_options (self ) -> dict [str , Any ]:
8690 return {
Original file line number Diff line number Diff line change 3636 WithRespondWorkspaceFoldersRequest ,
3737)
3838from lsp_client .client .abc import LSPClient
39+ from lsp_client .server .abc import LSPServer
3940from lsp_client .server .docker import DockerServer
4041from lsp_client .server .local import LocalServer
4142from lsp_client .utils .types import lsp_type
4243
43- RustAnalyzerLocalServer = partial (LocalServer , command = ["rust-analyzer" ])
4444RustAnalyzerDockerServer = partial (
4545 DockerServer , image = "docker.io/lspcontainers/rust-analyzer"
4646)
@@ -86,6 +86,10 @@ class RustAnalyzerClient(
8686 def get_language_id (self ) -> lsp_type .LanguageKind :
8787 return lsp_type .LanguageKind .Rust
8888
89+ @override
90+ def create_default_server (self ) -> LSPServer :
91+ return LocalServer (command = ["rust-analyzer" ])
92+
8993 @override
9094 def create_initialization_options (self ) -> dict [str , Any ]:
9195 return {
Original file line number Diff line number Diff line change 3434 WithRespondWorkspaceFoldersRequest ,
3535)
3636from lsp_client .client .abc import LSPClient
37+ from lsp_client .server .abc import LSPServer
3738from lsp_client .server .docker import DockerServer
3839from lsp_client .server .local import LocalServer
3940from lsp_client .utils .types import lsp_type
4041
41- TypescriptServer = partial (
42- LocalServer , command = ["typescript-language-server" , "--stdio" ]
43- )
4442TypescriptDockerServer = partial (DockerServer , image = "docker.io/lspcontainers/tsserver" )
4543
4644
@@ -83,6 +81,10 @@ class TypescriptClient(
8381 def get_language_id (self ) -> lsp_type .LanguageKind :
8482 return lsp_type .LanguageKind .TypeScript
8583
84+ @override
85+ def create_default_server (self ) -> LSPServer :
86+ return LocalServer (command = ["typescript-language-server" , "--stdio" ])
87+
8688 @override
8789 def create_initialization_options (self ) -> dict [str , Any ]:
8890 return {
You can’t perform that action at this time.
0 commit comments