From d2c16592644f703e896b4acb500fa8b8b8635be5 Mon Sep 17 00:00:00 2001 From: n24q02m Date: Mon, 23 Feb 2026 17:22:17 +0700 Subject: [PATCH] feat(lsp): enable ty and add ruff lsp support for python --- packages/opencode/src/lsp/index.ts | 4 +--- packages/opencode/src/lsp/server.ts | 34 +++++++++++++++++++++++++---- 2 files changed, 31 insertions(+), 7 deletions(-) diff --git a/packages/opencode/src/lsp/index.ts b/packages/opencode/src/lsp/index.ts index 9d7d30632ab3..77c6b0bc6f4c 100644 --- a/packages/opencode/src/lsp/index.ts +++ b/packages/opencode/src/lsp/index.ts @@ -70,9 +70,7 @@ export namespace LSP { } } else { // If experimental flag is disabled, disable ty - if (servers["ty"]) { - delete servers["ty"] - } + if (servers["ty"]) delete servers["ty"] } } diff --git a/packages/opencode/src/lsp/server.ts b/packages/opencode/src/lsp/server.ts index a4ebeb5a2567..ed75aa588d7e 100644 --- a/packages/opencode/src/lsp/server.ts +++ b/packages/opencode/src/lsp/server.ts @@ -451,10 +451,6 @@ export namespace LSPServer { "pyrightconfig.json", ]), async spawn(root) { - if (!Flag.OPENCODE_EXPERIMENTAL_LSP_TY) { - return undefined - } - let binary = Bun.which("ty") const initialization: Record = {} @@ -502,6 +498,36 @@ export namespace LSPServer { }, } + export const Ruff: Info = { + id: "ruff", + extensions: [".py", ".pyi"], + root: NearestRoot([ + "pyproject.toml", + "ruff.toml", + ".ruff.toml", + "setup.py", + "setup.cfg", + "requirements.txt", + "Pipfile", + ]), + async spawn(root) { + let binary = Bun.which("ruff") + + if (!binary) { + log.error("ruff not found, please install ruff first") + return + } + + const proc = spawn(binary, ["server"], { + cwd: root, + }) + + return { + process: proc, + } + }, + } + export const Pyright: Info = { id: "pyright", extensions: [".py", ".pyi"],