feat(lsp): add LSP tools integration with workspace/configuration support
- Add 7 LSP tools: hover, goto_definition, find_references, document_symbols, workspace_symbols, diagnostics, servers - Support multiple LSP servers: typescript, gopls, pyrefly, basedpyright, ruff, rust-analyzer, clangd, sourcekit-lsp, ruby-lsp - Read LSP config from opencode.json with disabled server support - Handle server requests: workspace/configuration, client/registerCapability, window/workDoneProgress/create - Send workspace/didChangeConfiguration after initialized for basedpyright compatibility - Uint8Array-based buffer for reliable LSP message parsing
This commit is contained in:
@@ -0,0 +1,174 @@
|
||||
import type { LSPServerConfig } from "./types"
|
||||
|
||||
export const SYMBOL_KIND_MAP: Record<number, string> = {
|
||||
1: "File",
|
||||
2: "Module",
|
||||
3: "Namespace",
|
||||
4: "Package",
|
||||
5: "Class",
|
||||
6: "Method",
|
||||
7: "Property",
|
||||
8: "Field",
|
||||
9: "Constructor",
|
||||
10: "Enum",
|
||||
11: "Interface",
|
||||
12: "Function",
|
||||
13: "Variable",
|
||||
14: "Constant",
|
||||
15: "String",
|
||||
16: "Number",
|
||||
17: "Boolean",
|
||||
18: "Array",
|
||||
19: "Object",
|
||||
20: "Key",
|
||||
21: "Null",
|
||||
22: "EnumMember",
|
||||
23: "Struct",
|
||||
24: "Event",
|
||||
25: "Operator",
|
||||
26: "TypeParameter",
|
||||
}
|
||||
|
||||
export const SEVERITY_MAP: Record<number, string> = {
|
||||
1: "error",
|
||||
2: "warning",
|
||||
3: "information",
|
||||
4: "hint",
|
||||
}
|
||||
|
||||
export const BUILTIN_SERVERS: Record<string, Omit<LSPServerConfig, "id">> = {
|
||||
typescript: {
|
||||
command: ["typescript-language-server", "--stdio"],
|
||||
extensions: [".ts", ".tsx", ".js", ".jsx", ".mjs", ".cjs", ".mts", ".cts"],
|
||||
},
|
||||
deno: {
|
||||
command: ["deno", "lsp"],
|
||||
extensions: [".ts", ".tsx", ".js", ".jsx", ".mjs"],
|
||||
},
|
||||
vue: {
|
||||
command: ["vue-language-server", "--stdio"],
|
||||
extensions: [".vue"],
|
||||
},
|
||||
eslint: {
|
||||
command: ["vscode-eslint-language-server", "--stdio"],
|
||||
extensions: [".ts", ".tsx", ".js", ".jsx", ".mjs", ".cjs", ".mts", ".cts", ".vue"],
|
||||
},
|
||||
gopls: {
|
||||
command: ["gopls"],
|
||||
extensions: [".go"],
|
||||
},
|
||||
"ruby-lsp": {
|
||||
command: ["rubocop", "--lsp"],
|
||||
extensions: [".rb", ".rake", ".gemspec", ".ru"],
|
||||
},
|
||||
basedpyright: {
|
||||
command: ["basedpyright-langserver", "--stdio"],
|
||||
extensions: [".py", ".pyi"],
|
||||
},
|
||||
pyright: {
|
||||
command: ["pyright-langserver", "--stdio"],
|
||||
extensions: [".py", ".pyi"],
|
||||
},
|
||||
ruff: {
|
||||
command: ["ruff", "server"],
|
||||
extensions: [".py", ".pyi"],
|
||||
},
|
||||
"elixir-ls": {
|
||||
command: ["elixir-ls"],
|
||||
extensions: [".ex", ".exs"],
|
||||
},
|
||||
zls: {
|
||||
command: ["zls"],
|
||||
extensions: [".zig", ".zon"],
|
||||
},
|
||||
csharp: {
|
||||
command: ["csharp-ls"],
|
||||
extensions: [".cs"],
|
||||
},
|
||||
"sourcekit-lsp": {
|
||||
command: ["sourcekit-lsp"],
|
||||
extensions: [".swift", ".objc", ".objcpp"],
|
||||
},
|
||||
rust: {
|
||||
command: ["rust-analyzer"],
|
||||
extensions: [".rs"],
|
||||
},
|
||||
clangd: {
|
||||
command: ["clangd", "--background-index", "--clang-tidy"],
|
||||
extensions: [".c", ".cpp", ".cc", ".cxx", ".c++", ".h", ".hpp", ".hh", ".hxx", ".h++"],
|
||||
},
|
||||
svelte: {
|
||||
command: ["svelteserver", "--stdio"],
|
||||
extensions: [".svelte"],
|
||||
},
|
||||
astro: {
|
||||
command: ["astro-ls", "--stdio"],
|
||||
extensions: [".astro"],
|
||||
},
|
||||
jdtls: {
|
||||
command: ["jdtls"],
|
||||
extensions: [".java"],
|
||||
},
|
||||
"yaml-ls": {
|
||||
command: ["yaml-language-server", "--stdio"],
|
||||
extensions: [".yaml", ".yml"],
|
||||
},
|
||||
"lua-ls": {
|
||||
command: ["lua-language-server"],
|
||||
extensions: [".lua"],
|
||||
},
|
||||
php: {
|
||||
command: ["intelephense", "--stdio"],
|
||||
extensions: [".php"],
|
||||
},
|
||||
dart: {
|
||||
command: ["dart", "language-server", "--lsp"],
|
||||
extensions: [".dart"],
|
||||
},
|
||||
}
|
||||
|
||||
export const EXT_TO_LANG: Record<string, string> = {
|
||||
".py": "python",
|
||||
".pyi": "python",
|
||||
".ts": "typescript",
|
||||
".tsx": "typescriptreact",
|
||||
".mts": "typescript",
|
||||
".cts": "typescript",
|
||||
".js": "javascript",
|
||||
".jsx": "javascriptreact",
|
||||
".mjs": "javascript",
|
||||
".cjs": "javascript",
|
||||
".go": "go",
|
||||
".rs": "rust",
|
||||
".c": "c",
|
||||
".cpp": "cpp",
|
||||
".cc": "cpp",
|
||||
".cxx": "cpp",
|
||||
".c++": "cpp",
|
||||
".h": "c",
|
||||
".hpp": "cpp",
|
||||
".hh": "cpp",
|
||||
".hxx": "cpp",
|
||||
".h++": "cpp",
|
||||
".objc": "objective-c",
|
||||
".objcpp": "objective-cpp",
|
||||
".java": "java",
|
||||
".rb": "ruby",
|
||||
".rake": "ruby",
|
||||
".gemspec": "ruby",
|
||||
".ru": "ruby",
|
||||
".lua": "lua",
|
||||
".swift": "swift",
|
||||
".cs": "csharp",
|
||||
".php": "php",
|
||||
".dart": "dart",
|
||||
".ex": "elixir",
|
||||
".exs": "elixir",
|
||||
".zig": "zig",
|
||||
".zon": "zig",
|
||||
".vue": "vue",
|
||||
".svelte": "svelte",
|
||||
".astro": "astro",
|
||||
".yaml": "yaml",
|
||||
".yml": "yaml",
|
||||
}
|
||||
Reference in New Issue
Block a user