diff --git a/dependencies.json b/dependencies.json index c698a22..06a1d7c 100644 --- a/dependencies.json +++ b/dependencies.json @@ -2,6 +2,7 @@ "*": { "*": [ "Jinja2", + "jmespath", "lsp_utils", "markupsafe", "more-itertools", diff --git a/plugin/client.py b/plugin/client.py index 2cb7993..4aea41d 100644 --- a/plugin/client.py +++ b/plugin/client.py @@ -10,6 +10,7 @@ from pathlib import Path from typing import Any, cast +import jmespath import sublime from LSP.plugin import ClientConfig, DottedDict, MarkdownLangMap, Response, WorkspaceFolder from LSP.plugin.core.protocol import CompletionItem, Hover, SignatureHelp @@ -42,8 +43,6 @@ class LspBasedpyrightPlugin(NpmClientHandler): server_directory = "language-server" server_binary_path = os.path.join(server_directory, "node_modules", "basedpyright", "langserver.index.js") - server_package_json_path = os.path.join("node_modules", "basedpyright", "package.json") - """The path to the `package.json` file of the language server.""" server_version = "" """The version of the language server.""" @@ -67,6 +66,12 @@ def should_ignore(cls, view: sublime.View) -> bool: or view.substr(sublime.Region(0, 20)).startswith("# SYNTAX TEST ") ) + @classmethod + def setup(cls) -> None: + super().setup() + + cls.server_version = cls.parse_server_version() + @classmethod def can_start( cls, @@ -106,7 +111,6 @@ def on_pre_start( ) -> str | None: super().on_pre_start(window, initiating_view, workspace_folders, configuration) - cls.server_version = cls.parse_server_version() cls.update_venv_info(configuration.settings, workspace_folders, window=window) if venv_info := cls.window_attrs[window].venv_info: log_info(f"Using python executable: {venv_info.python_executable}") @@ -253,10 +257,8 @@ def find_package_dependency_dirs(self, py_ver: tuple[int, int] = (3, 3)) -> list @classmethod def parse_server_version(cls) -> str: - if server_dir := cls._server_directory_path(): - with open(Path(server_dir) / cls.server_package_json_path, "rb") as f: - return json.load(f).get("version", "") - return "" + lock_file_content = sublime.load_resource(f"Packages/{PACKAGE_NAME}/language-server/package-lock.json") + return jmespath.search("dependencies.basedpyright.version", json.loads(lock_file_content)) or "" @classmethod def update_venv_info( diff --git a/requirements-dev.in b/requirements-dev.in index 158f6b3..9f953a6 100644 --- a/requirements-dev.in +++ b/requirements-dev.in @@ -2,3 +2,5 @@ mypy ruff>=0.5 + +types-jmespath diff --git a/requirements-dev.txt b/requirements-dev.txt index 86c90ec..d5ad709 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -2,15 +2,19 @@ # uv pip compile requirements-dev.in -o requirements-dev.txt jinja2==3.1.4 # via -r requirements.in +jmespath==1.0.1 + # via -r requirements.in markupsafe==2.1.5 # via jinja2 more-itertools==10.3.0 # via -r requirements.in -mypy==1.10.1 +mypy==1.11.0 # via -r requirements-dev.in mypy-extensions==1.0.0 # via mypy -ruff==0.5.1 +ruff==0.5.3 + # via -r requirements-dev.in +types-jmespath==1.0.2.20240106 # via -r requirements-dev.in typing-extensions==4.12.2 # via diff --git a/requirements.in b/requirements.in index d7d01b5..c51737f 100644 --- a/requirements.in +++ b/requirements.in @@ -1,3 +1,4 @@ Jinja2>=3,<4 +jmespath>=1,<2 more-itertools>=10,<11 typing-extensions>=4.12 diff --git a/requirements.txt b/requirements.txt index 2532fb3..fac573d 100644 --- a/requirements.txt +++ b/requirements.txt @@ -2,6 +2,8 @@ # uv pip compile requirements.in -o requirements.txt jinja2==3.1.4 # via -r requirements.in +jmespath==1.0.1 + # via -r requirements.in markupsafe==2.1.5 # via jinja2 more-itertools==10.3.0