added rust and cpp analyzer
This commit is contained in:
203
nvim/lua/plugins/extras/lsp/lsp.lua
Normal file
203
nvim/lua/plugins/extras/lsp/lsp.lua
Normal file
@@ -0,0 +1,203 @@
|
||||
local float = require("config.defaults").diagnostics_options.float
|
||||
return {
|
||||
{
|
||||
"neovim/nvim-lspconfig",
|
||||
event = { "BufReadPre", "BufNewFile" },
|
||||
dependencies = {
|
||||
{
|
||||
"ray-x/lsp_signature.nvim",
|
||||
opts = {
|
||||
bind = true,
|
||||
max_height = float.max_height,
|
||||
max_width = float.max_width,
|
||||
hint_inline = function()
|
||||
return vim.version.gt(vim.version(), { 0, 9, 0 })
|
||||
end,
|
||||
handler_opts = {
|
||||
border = float.border,
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
"folke/neodev.nvim",
|
||||
ft = "lua",
|
||||
opts = {
|
||||
pathStrict = true,
|
||||
library = { plugins = { "nvim-dap-ui" }, types = true },
|
||||
},
|
||||
},
|
||||
},
|
||||
opts = {
|
||||
-- LSP Server Settings
|
||||
servers = {
|
||||
-- cssls = {},
|
||||
-- html = {},
|
||||
-- jsonls = {},
|
||||
-- tailwindcss = {},
|
||||
-- tsserver = {},
|
||||
-- volar = {},
|
||||
bashls = {
|
||||
filetypes = { "bash", "sh" },
|
||||
},
|
||||
mojo = {},
|
||||
-- use pylsp-mypy for mypy
|
||||
-- use python-lsp-ruff for ruff
|
||||
-- use pylsp-inlay-hints for inlay hints
|
||||
pylsp = {},
|
||||
phan = {},
|
||||
phpactor = {},
|
||||
psalm = {},
|
||||
clangd = {
|
||||
cmd = {
|
||||
"clangd",
|
||||
"--clang-tidy",
|
||||
"-j=5",
|
||||
"--malloc-trim",
|
||||
},
|
||||
filetypes = { "c" }, -- "cpp"
|
||||
},
|
||||
zls = {},
|
||||
rust_analyzer = {
|
||||
settings = {
|
||||
["rust-analyzer"] = {
|
||||
check = {
|
||||
command = "clippy",
|
||||
features = "all",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
lua_ls = {
|
||||
cmd = {
|
||||
"lua-language-server",
|
||||
"-E",
|
||||
"/usr/share/lua-language-server/main.lua",
|
||||
},
|
||||
on_init = function(client)
|
||||
if client.workspace_folders then
|
||||
local path = client.workspace_folders[1].name
|
||||
if
|
||||
vim.uv.fs_stat(path .. "/.luarc.json")
|
||||
or vim.uv.fs_stat(path .. "/.luarc.jsonc")
|
||||
then
|
||||
return
|
||||
end
|
||||
end
|
||||
end,
|
||||
settings = {
|
||||
Lua = {
|
||||
runtime = {
|
||||
-- LuaJIT in the case of Neovim
|
||||
version = "LuaJIT",
|
||||
},
|
||||
diagnostics = {
|
||||
-- Get the language server to recognize the `vim` global
|
||||
globals = { "vim" },
|
||||
},
|
||||
workspace = {
|
||||
-- Make the server aware of Neovim runtime files
|
||||
library = vim.env.VIMRUNTIME,
|
||||
-- This feature causes the lsp to use the "environment emulation" feature to suggest
|
||||
-- applying a library/framework when a certain keyword or filename has been found
|
||||
checkThirdParty = false,
|
||||
},
|
||||
-- disable lua_ls default formater since I use stylua
|
||||
format = { enable = false },
|
||||
hint = { enable = true, setType = true },
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
-- you can do any additional lsp server setup here
|
||||
setup = {
|
||||
lua_ls = function(server, opts)
|
||||
require("lspconfig")[server].setup(opts)
|
||||
end,
|
||||
},
|
||||
},
|
||||
config = function(_, opts)
|
||||
local on_attach = function(client, bufnr)
|
||||
_ = client
|
||||
_ = bufnr
|
||||
-- if vim.filetype.match({ buf = bufnr }) == "lua" then
|
||||
-- end
|
||||
require("lspconfig.ui.windows").default_options = {
|
||||
border = float.border,
|
||||
}
|
||||
end
|
||||
|
||||
local function setup(server, server_config)
|
||||
if opts.setup[server] then
|
||||
if opts.setup[server](server, server_config) then
|
||||
return
|
||||
end
|
||||
end
|
||||
require("lspconfig")[server].setup(server_config)
|
||||
end
|
||||
|
||||
local servers = opts.servers
|
||||
local capabilities = require("cmp_nvim_lsp").default_capabilities(
|
||||
vim.lsp.protocol.make_client_capabilities()
|
||||
)
|
||||
|
||||
for server, _ in pairs(servers) do
|
||||
local server_config = vim.tbl_deep_extend("force", {
|
||||
capabilities = vim.deepcopy(capabilities),
|
||||
on_attach = on_attach,
|
||||
}, servers[server] or {})
|
||||
|
||||
setup(server, server_config)
|
||||
end
|
||||
end,
|
||||
},
|
||||
{
|
||||
"nvimdev/lspsaga.nvim",
|
||||
event = "LspAttach",
|
||||
opts = {
|
||||
ui = {
|
||||
border = float.border,
|
||||
},
|
||||
outline = {
|
||||
layout = "float",
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
"nvimtools/none-ls.nvim",
|
||||
event = { "BufReadPre", "BufNewFile" },
|
||||
opts = function()
|
||||
local null_ls = require("null-ls")
|
||||
return {
|
||||
diagnostics_format = "#{m} (#{s})",
|
||||
sources = {
|
||||
-- cpp
|
||||
null_ls.builtins.diagnostics.cppcheck.with({
|
||||
extra_args = {
|
||||
"--inconclusive",
|
||||
},
|
||||
}),
|
||||
-- lua
|
||||
null_ls.builtins.diagnostics.selene,
|
||||
null_ls.builtins.formatting.stylua,
|
||||
-- php
|
||||
null_ls.builtins.diagnostics.phpstan,
|
||||
null_ls.builtins.formatting.phpcsfixer,
|
||||
-- shell
|
||||
null_ls.builtins.diagnostics.zsh.with({
|
||||
filetypes = { "zsh" },
|
||||
}),
|
||||
null_ls.builtins.hover.printenv.with({
|
||||
filetypes = { "zsh", "bash", "sh", "dosbatch", "ps1" },
|
||||
}),
|
||||
-- Docker
|
||||
null_ls.builtins.diagnostics.hadolint,
|
||||
-- opengl
|
||||
null_ls.builtins.diagnostics.glslc.with({
|
||||
-- use opengl instead of vulkan1.0
|
||||
extra_args = { "--target-env=opengl" },
|
||||
}),
|
||||
},
|
||||
}
|
||||
end,
|
||||
},
|
||||
}
|
||||
Reference in New Issue
Block a user