From 1b7b680bb5ff655087792df7fd81757b8d0795f2 Mon Sep 17 00:00:00 2001 From: Xavi Simpson Date: Tue, 8 Jul 2025 17:36:47 -0400 Subject: [PATCH] Add Pyrefly LSP specification --- CHANGELOG.md | 5 ++++ .../jupyter_lsp/jupyter_lsp/specs/__init__.py | 2 ++ .../jupyter_lsp/specs/config/README.md | 1 + .../specs/config/pyrefly.schema.json | 19 +++++++++++++++ .../jupyter_lsp/jupyter_lsp/specs/pyrefly.py | 23 +++++++++++++++++++ python_packages/jupyter_lsp/setup.cfg | 1 + 6 files changed, 51 insertions(+) create mode 100644 python_packages/jupyter_lsp/jupyter_lsp/specs/config/pyrefly.schema.json create mode 100644 python_packages/jupyter_lsp/jupyter_lsp/specs/pyrefly.py diff --git a/CHANGELOG.md b/CHANGELOG.md index 0fbe67cbc..5272c00c0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ ## Changelog +### `jupyter-lsp (next)` + +- features: + - add auto-detection of Pyrefly language server ([#1136](https://github.com/jupyter-lsp/jupyterlab-lsp/issues/1136)) + ### `@jupyter-lsp/jupyterlab-lsp 5.2.0` - enhancements: diff --git a/python_packages/jupyter_lsp/jupyter_lsp/specs/__init__.py b/python_packages/jupyter_lsp/jupyter_lsp/specs/__init__.py index f5b90072c..ce741e770 100644 --- a/python_packages/jupyter_lsp/jupyter_lsp/specs/__init__.py +++ b/python_packages/jupyter_lsp/jupyter_lsp/specs/__init__.py @@ -10,6 +10,7 @@ from .julia_language_server import JuliaLanguageServer from .pyls import PalantirPythonLanguageServer from .pyright import PyrightLanguageServer +from .pyrefly import PyreflyLanguageServer from .python_lsp_server import PythonLSPServer from .r_languageserver import RLanguageServer from .sql_language_server import SQLLanguageServer @@ -31,6 +32,7 @@ md = UnifiedLanguageServer() py_palantir = PalantirPythonLanguageServer() py_lsp_server = PythonLSPServer() +pyrefly = PyreflyLanguageServer() pyright = PyrightLanguageServer() r = RLanguageServer() tex = Texlab() diff --git a/python_packages/jupyter_lsp/jupyter_lsp/specs/config/README.md b/python_packages/jupyter_lsp/jupyter_lsp/specs/config/README.md index d8e1937cf..44d508df9 100644 --- a/python_packages/jupyter_lsp/jupyter_lsp/specs/config/README.md +++ b/python_packages/jupyter_lsp/jupyter_lsp/specs/config/README.md @@ -7,6 +7,7 @@ These are configuration schemas extracted from canonical upstreams: - [dockerfile-language-server-nodejs](https://github.com/microsoft/vscode-docker/blob/master/package.json) - [yaml-language-server](https://github.com/redhat-developer/vscode-yaml/blob/master/package.json) - [pyright](https://github.com/microsoft/pyright/blob/main/packages/vscode-pyright/package.json) +- [pyrefly](https://github.com/facebook/pyrefly/blob/main/lsp/package.json) > All of the configurations are sent to the Language Server, but only some of them > are actually acted upon, but we don't know which is which, yet. diff --git a/python_packages/jupyter_lsp/jupyter_lsp/specs/config/pyrefly.schema.json b/python_packages/jupyter_lsp/jupyter_lsp/specs/config/pyrefly.schema.json new file mode 100644 index 000000000..5b3ddd36f --- /dev/null +++ b/python_packages/jupyter_lsp/jupyter_lsp/specs/config/pyrefly.schema.json @@ -0,0 +1,19 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Pyrefly Language Server Configuration", + "type": "object", + "properties": { + "python.pyrefly.disableTypeErrors": { + "type": "boolean", + "default": false, + "description": "If true, pyrefly will not provide typecheck squiggles in the IDE. To control other IDE services, see `python.pyrefly.disableLanguageServices`", + "scope": "resource" + }, + "python.pyrefly.disableLanguageServices": { + "type": "boolean", + "default": false, + "description": "If true, pyrefly will not provide other IDE services like completions, hover, definition, etc. To control type errors, see `python.pyrefly.disableTypeErrors`", + "scope": "resource" + } + } +} diff --git a/python_packages/jupyter_lsp/jupyter_lsp/specs/pyrefly.py b/python_packages/jupyter_lsp/jupyter_lsp/specs/pyrefly.py new file mode 100644 index 000000000..884d8efd4 --- /dev/null +++ b/python_packages/jupyter_lsp/jupyter_lsp/specs/pyrefly.py @@ -0,0 +1,23 @@ +from .config import load_config_schema +from .utils import ShellSpec + + +class PyreflyLanguageServer(ShellSpec): + key = cmd = "pyrefly" + args = ["lsp"] + languages = ["python"] + spec = dict( + display_name="Pyrefly", + mime_types=["text/python", "text/x-ipython"], + urls=dict( + home="https://github.com/facebook/pyrefly", + issues="https://github.com/facebook/pyrefly/issues", + ), + install=dict( + pip="pip install pyrefly", + uv="uv add pyrefly", + conda="conda install -c conda-forge pyrefly", + ), + config_schema=load_config_schema(key), + requires_documents_on_disk=False + ) diff --git a/python_packages/jupyter_lsp/setup.cfg b/python_packages/jupyter_lsp/setup.cfg index 51f7f5e4d..8d092f459 100644 --- a/python_packages/jupyter_lsp/setup.cfg +++ b/python_packages/jupyter_lsp/setup.cfg @@ -44,6 +44,7 @@ jupyter_lsp_spec_v1 = julia-language-server = jupyter_lsp.specs:julia python-language-server = jupyter_lsp.specs:py_palantir python-lsp-server = jupyter_lsp.specs:py_lsp_server + pyrefly = jupyter_lsp.specs:pyrefly pyright = jupyter_lsp.specs:pyright r-languageserver = jupyter_lsp.specs:r texlab = jupyter_lsp.specs:tex