1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
|
-- Helper function to find root directory patterns
local function root_pattern(...)
local patterns = { ... }
return function(fname)
for _, pattern in ipairs(patterns) do
local found = vim.fs.find(pattern, {
path = fname,
upward = true,
})[1]
if found then
return vim.fs.dirname(found)
end
end
end
end
-- Server command configurations
local server_commands = {
emmet_ls = { "emmet-ls", "--stdio" },
gopls = { "gopls" },
html = { "vscode-html-language-server", "--stdio" },
jsonls = { "vscode-json-language-server", "--stdio" },
lua_ls = { "lua-language-server" },
phpactor = { "phpactor", "language-server" },
svelte = { "svelteserver", "--stdio" },
tailwindcss = { "tailwindcss-language-server", "--stdio" },
ts_ls = { "typescript-language-server", "--stdio" },
volar = { "vue-language-server", "--stdio" },
texlab = { "texlab" },
pyright = { "pyright-langserver", "--stdio" },
kotlin_language_server = { "kotlin-language-server" },
smarty_ls = { "smarty-language-server", "--stdio" },
clangd = { "clangd" },
asm_lsp = { "asm-lsp" },
}
return {
get_server_cmd = function(server)
return server_commands[server] or { server }
end,
get_default_root_dir = function()
return root_pattern(".git", "package.json", "Cargo.toml", "composer.json")(vim.api.nvim_buf_get_name(0))
end,
servers = {
emmet_ls = { enable = true },
gopls = { enable = true },
html = { enable = true },
jsonls = { enable = true },
lua_ls = { enable = true, neodev = true },
-- nil_ls = { enable = true },
phpactor = { enable = true },
-- rust_analyzer = { enable = true },
svelte = { enable = true },
tailwindcss = { enable = true, filetypes = { "blade", "html", "svelte" } },
ts_ls = { enable = true },
volar = { enable = true },
texlab = { enable = true, filetypes = { "tex", "bib" } },
pyright = { enable = true, filetypes = { "python" } },
kotlin_language_server = {
enable = true,
filetypes = { "kotlin" },
root_dir = root_pattern("build.gradle.kts", "pom.xml", ".git"),
},
smarty_ls = {
enable = true,
filetypes = { "smarty" },
root_dir = root_pattern("composer.json", ".git"),
},
clangd = {
enable = true,
filetypes = { "c", "cpp", "objc", "objcpp", "cuda", "proto" },
root_dir = root_pattern("compile_commands.json", ".git"),
},
asm_lsp = {
enable = true,
filetypes = { "asm", "s", "S" },
root_dir = root_pattern("Makefile", ".git"),
},
},
default_options = function(options)
return vim.tbl_deep_extend("force", {
on_attach = require "pi.lsp.attach",
flags = require "pi.lsp.flags",
capabilities = require("blink.cmp").get_lsp_capabilities(vim.lsp.protocol.make_client_capabilities()),
}, options)
end,
}
|