oh-my-opencode/src/tools/lsp/server-resolution.ts
YeonGyu-Kim 29155ec7bc refactor: wave 1 - extract leaf modules, rename catch-all files, split index.ts hooks
- Split 25+ index.ts files into hook.ts + extracted modules
- Rename all catch-all utils.ts/helpers.ts to domain-specific names
- Split src/tools/lsp/ into ~15 focused modules
- Split src/tools/delegate-task/ into ~18 focused modules
- Separate shared types from implementation
- 155 files changed, 60+ new files created
- All typecheck clean, 61 tests pass
2026-02-08 13:57:26 +09:00

110 lines
2.7 KiB
TypeScript

import { BUILTIN_SERVERS, LSP_INSTALL_HINTS } from "./constants"
import { getConfigPaths, getMergedServers, loadAllConfigs } from "./server-config-loader"
import { isServerInstalled } from "./server-installation"
import type { ServerLookupResult } from "./types"
export function findServerForExtension(ext: string): ServerLookupResult {
const servers = getMergedServers()
for (const server of servers) {
if (server.extensions.includes(ext) && isServerInstalled(server.command)) {
return {
status: "found",
server: {
id: server.id,
command: server.command,
extensions: server.extensions,
priority: server.priority,
env: server.env,
initialization: server.initialization,
},
}
}
}
for (const server of servers) {
if (server.extensions.includes(ext)) {
const installHint = LSP_INSTALL_HINTS[server.id] || `Install '${server.command[0]}' and ensure it's in your PATH`
return {
status: "not_installed",
server: {
id: server.id,
command: server.command,
extensions: server.extensions,
},
installHint,
}
}
}
const availableServers = [...new Set(servers.map((s) => s.id))]
return {
status: "not_configured",
extension: ext,
availableServers,
}
}
export function getAllServers(): Array<{
id: string
installed: boolean
extensions: string[]
disabled: boolean
source: string
priority: number
}> {
const configs = loadAllConfigs()
const servers = getMergedServers()
const disabled = new Set<string>()
for (const config of configs.values()) {
if (!config.lsp) continue
for (const [id, entry] of Object.entries(config.lsp)) {
if (entry.disabled) disabled.add(id)
}
}
const result: Array<{
id: string
installed: boolean
extensions: string[]
disabled: boolean
source: string
priority: number
}> = []
const seen = new Set<string>()
for (const server of servers) {
if (seen.has(server.id)) continue
result.push({
id: server.id,
installed: isServerInstalled(server.command),
extensions: server.extensions,
disabled: false,
source: server.source,
priority: server.priority,
})
seen.add(server.id)
}
for (const id of disabled) {
if (seen.has(id)) continue
const builtin = BUILTIN_SERVERS[id]
result.push({
id,
installed: builtin ? isServerInstalled(builtin.command) : false,
extensions: builtin?.extensions || [],
disabled: true,
source: "disabled",
priority: 0,
})
}
return result
}
export function getConfigPaths_(): { project: string; user: string; opencode: string } {
return getConfigPaths()
}