|
1 | 1 | from __future__ import annotations
|
2 | 2 |
|
| 3 | +import json |
3 | 4 | import os
|
4 | 5 | import re
|
5 | 6 | import shutil
|
@@ -38,6 +39,11 @@ class LspBasedpyrightPlugin(NpmClientHandler):
|
38 | 39 | server_directory = "language-server"
|
39 | 40 | server_binary_path = os.path.join(server_directory, "node_modules", "basedpyright", "langserver.index.js")
|
40 | 41 |
|
| 42 | + server_package_json_path = os.path.join("node_modules", "basedpyright", "package.json") |
| 43 | + """The path to the `package.json` file of the language server.""" |
| 44 | + server_version = "" |
| 45 | + """The version of the language server.""" |
| 46 | + |
41 | 47 | window_attrs: defaultdict[int, WindowAttr] = defaultdict(WindowAttr)
|
42 | 48 | """Per-window attributes. I.e., per-session attributes. The key is the window ID."""
|
43 | 49 |
|
@@ -74,6 +80,7 @@ def on_pre_start(
|
74 | 80 | ) -> str | None:
|
75 | 81 | super().on_pre_start(window, initiating_view, workspace_folders, configuration)
|
76 | 82 |
|
| 83 | + cls.server_version = cls.parse_server_version() |
77 | 84 | cls.update_venv_info(configuration.settings, workspace_folders, window=window)
|
78 | 85 | if venv_info := cls.window_attrs[window.id()].venv_info:
|
79 | 86 | log_info(f"Using python executable: {venv_info.python_executable}")
|
@@ -127,7 +134,7 @@ def update_status_bar_text(self) -> None:
|
127 | 134 | window_id = session.window.id()
|
128 | 135 |
|
129 | 136 | variables: dict[str, Any] = {
|
130 |
| - "server_version": "", # no way to get it? |
| 137 | + "server_version": self.server_version, |
131 | 138 | "venv": {},
|
132 | 139 | }
|
133 | 140 |
|
@@ -207,6 +214,13 @@ def find_package_dependency_dirs(self, py_ver: tuple[int, int] = (3, 3)) -> list
|
207 | 214 |
|
208 | 215 | return list(filter(os.path.isdir, dep_dirs))
|
209 | 216 |
|
| 217 | + @classmethod |
| 218 | + def parse_server_version(cls) -> str: |
| 219 | + if server_dir := cls._server_directory_path(): |
| 220 | + with open(Path(server_dir) / cls.server_package_json_path, "rb") as f: |
| 221 | + return json.load(f).get("version", "") |
| 222 | + return "" |
| 223 | + |
210 | 224 | @classmethod
|
211 | 225 | def update_venv_info(
|
212 | 226 | cls,
|
|
0 commit comments