|
@@ -9,6 +9,7 @@ import z from "zod"
|
|
|
import { Config } from "../config/config"
|
|
import { Config } from "../config/config"
|
|
|
import { spawn } from "child_process"
|
|
import { spawn } from "child_process"
|
|
|
import { Instance } from "../project/instance"
|
|
import { Instance } from "../project/instance"
|
|
|
|
|
+import { Flag } from "@/flag/flag"
|
|
|
|
|
|
|
|
export namespace LSP {
|
|
export namespace LSP {
|
|
|
const log = Log.create({ service: "lsp" })
|
|
const log = Log.create({ service: "lsp" })
|
|
@@ -60,6 +61,21 @@ export namespace LSP {
|
|
|
})
|
|
})
|
|
|
export type DocumentSymbol = z.infer<typeof DocumentSymbol>
|
|
export type DocumentSymbol = z.infer<typeof DocumentSymbol>
|
|
|
|
|
|
|
|
|
|
+ const filterExperimentalServers = (servers: Record<string, LSPServer.Info>) => {
|
|
|
|
|
+ if (Flag.OPENCODE_EXPERIMENTAL_LSP_TY) {
|
|
|
|
|
+ // If experimental flag is enabled, disable pyright
|
|
|
|
|
+ if(servers["pyright"]) {
|
|
|
|
|
+ log.info("LSP server pyright is disabled because OPENCODE_EXPERIMENTAL_LSP_TY is enabled")
|
|
|
|
|
+ delete servers["pyright"]
|
|
|
|
|
+ }
|
|
|
|
|
+ } else {
|
|
|
|
|
+ // If experimental flag is disabled, disable ty
|
|
|
|
|
+ if(servers["ty"]) {
|
|
|
|
|
+ delete servers["ty"]
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
const state = Instance.state(
|
|
const state = Instance.state(
|
|
|
async () => {
|
|
async () => {
|
|
|
const clients: LSPClient.Info[] = []
|
|
const clients: LSPClient.Info[] = []
|
|
@@ -79,6 +95,9 @@ export namespace LSP {
|
|
|
for (const server of Object.values(LSPServer)) {
|
|
for (const server of Object.values(LSPServer)) {
|
|
|
servers[server.id] = server
|
|
servers[server.id] = server
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ filterExperimentalServers(servers)
|
|
|
|
|
+
|
|
|
for (const [name, item] of Object.entries(cfg.lsp ?? {})) {
|
|
for (const [name, item] of Object.entries(cfg.lsp ?? {})) {
|
|
|
const existing = servers[name]
|
|
const existing = servers[name]
|
|
|
if (item.disabled) {
|
|
if (item.disabled) {
|
|
@@ -204,6 +223,7 @@ export namespace LSP {
|
|
|
|
|
|
|
|
for (const server of Object.values(s.servers)) {
|
|
for (const server of Object.values(s.servers)) {
|
|
|
if (server.extensions.length && !server.extensions.includes(extension)) continue
|
|
if (server.extensions.length && !server.extensions.includes(extension)) continue
|
|
|
|
|
+
|
|
|
const root = await server.root(file)
|
|
const root = await server.root(file)
|
|
|
if (!root) continue
|
|
if (!root) continue
|
|
|
if (s.broken.has(root + server.id)) continue
|
|
if (s.broken.has(root + server.id)) continue
|