summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--packages/opencode/src/lsp/client.ts1
-rw-r--r--packages/opencode/src/lsp/server.ts18
2 files changed, 19 insertions, 0 deletions
diff --git a/packages/opencode/src/lsp/client.ts b/packages/opencode/src/lsp/client.ts
index a03a26514..c6ccfbb0d 100644
--- a/packages/opencode/src/lsp/client.ts
+++ b/packages/opencode/src/lsp/client.ts
@@ -60,6 +60,7 @@ export namespace LSPClient {
return null
})
connection.onRequest("workspace/configuration", async () => {
+ // Return server initialization options
return [input.server.initialization ?? {}]
})
connection.listen()
diff --git a/packages/opencode/src/lsp/server.ts b/packages/opencode/src/lsp/server.ts
index da743628d..9861a5798 100644
--- a/packages/opencode/src/lsp/server.ts
+++ b/packages/opencode/src/lsp/server.ts
@@ -298,6 +298,23 @@ export namespace LSPServer {
args.push(...["run", js])
}
args.push("--stdio")
+
+ const initialization: Record<string, string> = {}
+
+ const potentialVenvPaths = [process.env["VIRTUAL_ENV"], path.join(root, ".venv"), path.join(root, "venv")].filter(
+ (p): p is string => p !== undefined,
+ )
+ for (const venvPath of potentialVenvPaths) {
+ const isWindows = process.platform === "win32"
+ const potentialPythonPath = isWindows
+ ? path.join(venvPath, "Scripts", "python.exe")
+ : path.join(venvPath, "bin", "python")
+ if (await Bun.file(potentialPythonPath).exists()) {
+ initialization["pythonPath"] = potentialPythonPath
+ break
+ }
+ }
+
const proc = spawn(binary, args, {
cwd: root,
env: {
@@ -307,6 +324,7 @@ export namespace LSPServer {
})
return {
process: proc,
+ initialization,
}
},
}