Remove nvim-lsp-config and manually add each lsp.
This commit is contained in:
parent
571341310a
commit
bb66b8fa82
46
init.lua
46
init.lua
@ -21,6 +21,17 @@ vim.o.termguicolors = true
|
||||
-- vim.cmd "let g:everforest_background = 'hard'"
|
||||
vim.cmd.colorscheme('nordfox')
|
||||
|
||||
-- LSP --
|
||||
vim.o.winborder = 'rounded'
|
||||
vim.lsp.enable({'intelephense'})
|
||||
vim.lsp.enable({'drupal-lsp'})
|
||||
vim.lsp.enable({'rust_analyzer'})
|
||||
vim.lsp.enable({'elixirls'})
|
||||
vim.lsp.enable({'lexical'})
|
||||
vim.keymap.set("n", "K", vim.lsp.buf.hover, {})
|
||||
vim.keymap.set("n", "gd", vim.lsp.buf.definition, {})
|
||||
vim.keymap.set({ "n" }, "<leader>ca", vim.lsp.buf.code_action, {})
|
||||
|
||||
-- XDEBUG --
|
||||
local dap = require('dap')
|
||||
require('telescope').load_extension('dap')
|
||||
@ -50,13 +61,6 @@ dap.configurations.php = {
|
||||
}
|
||||
}
|
||||
|
||||
-- vim.cmd [[
|
||||
-- highlight Normal guibg=none
|
||||
-- highlight NonText guibg=none
|
||||
-- highlight Normal ctermbg=none
|
||||
-- highlight NonText ctermbg=none
|
||||
-- ]]
|
||||
|
||||
vim.fn.sign_define('DapBreakpoint',{ text ='🟥', texthl ='', linehl ='', numhl =''})
|
||||
vim.fn.sign_define('DapStopped',{ text ='▶️', texthl ='', linehl ='', numhl =''})
|
||||
vim.keymap.set('n', '<leader>?', function() dap.continue() end)
|
||||
@ -72,17 +76,17 @@ vim.keymap.set('n', '<leader>db', function()
|
||||
widgets.centered_float(widgets.scopes)
|
||||
end)
|
||||
|
||||
local lspconfig = require 'lspconfig'
|
||||
local configs = require 'lspconfig.configs'
|
||||
if not configs.drupal then
|
||||
configs.drupal = {
|
||||
default_config = {
|
||||
cmd = {'drupal-lsp'},
|
||||
filetypes = {'php', 'module', 'inc', 'theme'},
|
||||
root_dir = function(fname)
|
||||
return lspconfig.util.root_pattern('composer.json', '.git')(fname)
|
||||
end
|
||||
};
|
||||
}
|
||||
end
|
||||
lspconfig.drupal.setup{ autostart = true }
|
||||
-- local lspconfig = require 'lspconfig'
|
||||
-- local configs = require 'lspconfig.configs'
|
||||
-- if not configs.drupal then
|
||||
-- configs.drupal = {
|
||||
-- default_config = {
|
||||
-- cmd = {'drupal-lsp'},
|
||||
-- filetypes = {'php', 'module', 'inc', 'theme'},
|
||||
-- root_dir = function(fname)
|
||||
-- return lspconfig.util.root_pattern('composer.json', '.git')(fname)
|
||||
-- end
|
||||
-- };
|
||||
-- }
|
||||
-- end
|
||||
-- lspconfig.drupal.setup{ autostart = true }
|
||||
|
||||
@ -20,7 +20,6 @@
|
||||
"nvim-dap": { "branch": "master", "commit": "8df427aeba0a06c6577dc3ab82de3076964e3b8d" },
|
||||
"nvim-dap-ui": { "branch": "master", "commit": "73a26abf4941aa27da59820fd6b028ebcdbcf932" },
|
||||
"nvim-dap-virtual-text": { "branch": "master", "commit": "df66808cd78b5a97576bbaeee95ed5ca385a9750" },
|
||||
"nvim-lspconfig": { "branch": "master", "commit": "ac1dfbe3b60e5e23a2cff90e3bd6a3bc88031a57" },
|
||||
"nvim-nio": { "branch": "master", "commit": "21f5324bfac14e22ba26553caf69ec76ae8a7662" },
|
||||
"nvim-treesitter": { "branch": "master", "commit": "066fd6505377e3fd4aa219e61ce94c2b8bdb0b79" },
|
||||
"nvim-web-devicons": { "branch": "master", "commit": "1fb58cca9aebbc4fd32b086cb413548ce132c127" },
|
||||
|
||||
12
lsp/drupal.lua
Normal file
12
lsp/drupal.lua
Normal file
@ -0,0 +1,12 @@
|
||||
return {
|
||||
cmd = {'drupal-lsp'},
|
||||
filetypes = {'php', 'module', 'inc', 'theme'},
|
||||
root_dir = function(bufnr, on_dir)
|
||||
local fname = vim.api.nvim_buf_get_name(bufnr)
|
||||
local cwd = assert(vim.uv.cwd())
|
||||
local root = vim.fs.root(fname, { 'composer.json', '.git' })
|
||||
|
||||
-- prefer cwd if root is a descendant
|
||||
on_dir(root and vim.fs.relpath(cwd, root) and cwd)
|
||||
end,
|
||||
}
|
||||
11
lsp/elixirls.lua
Normal file
11
lsp/elixirls.lua
Normal file
@ -0,0 +1,11 @@
|
||||
return {
|
||||
filetypes = { 'elixir', 'eelixir', 'heex', 'surface' },
|
||||
root_dir = function(bufnr, on_dir)
|
||||
local fname = vim.api.nvim_buf_get_name(bufnr)
|
||||
local matches = vim.fs.find({ 'mix.exs' }, { upward = true, limit = 2, path = fname })
|
||||
local child_or_root_path, maybe_umbrella_path = unpack(matches)
|
||||
local root_dir = vim.fs.dirname(maybe_umbrella_path or child_or_root_path)
|
||||
|
||||
on_dir(root_dir)
|
||||
end,
|
||||
}
|
||||
12
lsp/intelephense.lua
Normal file
12
lsp/intelephense.lua
Normal file
@ -0,0 +1,12 @@
|
||||
return {
|
||||
cmd = { 'intelephense', '--stdio' },
|
||||
filetypes = { 'php' },
|
||||
root_dir = function(bufnr, on_dir)
|
||||
local fname = vim.api.nvim_buf_get_name(bufnr)
|
||||
local cwd = assert(vim.uv.cwd())
|
||||
local root = vim.fs.root(fname, { 'composer.json', '.git' })
|
||||
|
||||
-- prefer cwd if root is a descendant
|
||||
on_dir(root and vim.fs.relpath(cwd, root) and cwd)
|
||||
end,
|
||||
}
|
||||
4
lsp/lexical.lua
Normal file
4
lsp/lexical.lua
Normal file
@ -0,0 +1,4 @@
|
||||
return {
|
||||
filetypes = { 'elixir', 'eelixir', 'heex', 'surface' },
|
||||
root_markers = { 'mix.exs', '.git' },
|
||||
}
|
||||
96
lsp/rust_analyzer.lua
Normal file
96
lsp/rust_analyzer.lua
Normal file
@ -0,0 +1,96 @@
|
||||
local function reload_workspace(bufnr)
|
||||
local clients = vim.lsp.get_clients { bufnr = bufnr, name = 'rust_analyzer' }
|
||||
for _, client in ipairs(clients) do
|
||||
vim.notify 'Reloading Cargo Workspace'
|
||||
client.request('rust-analyzer/reloadWorkspace', nil, function(err)
|
||||
if err then
|
||||
error(tostring(err))
|
||||
end
|
||||
vim.notify 'Cargo workspace reloaded'
|
||||
end, 0)
|
||||
end
|
||||
end
|
||||
|
||||
local function is_library(fname)
|
||||
local user_home = vim.fs.normalize(vim.env.HOME)
|
||||
local cargo_home = os.getenv 'CARGO_HOME' or user_home .. '/.cargo'
|
||||
local registry = cargo_home .. '/registry/src'
|
||||
local git_registry = cargo_home .. '/git/checkouts'
|
||||
|
||||
local rustup_home = os.getenv 'RUSTUP_HOME' or user_home .. '/.rustup'
|
||||
local toolchains = rustup_home .. '/toolchains'
|
||||
|
||||
for _, item in ipairs { toolchains, registry, git_registry } do
|
||||
if vim.fs.relpath(item, fname) then
|
||||
local clients = vim.lsp.get_clients { name = 'rust_analyzer' }
|
||||
return #clients > 0 and clients[#clients].config.root_dir or nil
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
return {
|
||||
cmd = { 'rust-analyzer' },
|
||||
filetypes = { 'rust' },
|
||||
root_dir = function(bufnr, on_dir)
|
||||
local fname = vim.api.nvim_buf_get_name(bufnr)
|
||||
local reused_dir = is_library(fname)
|
||||
if reused_dir then
|
||||
on_dir(reused_dir)
|
||||
return
|
||||
end
|
||||
|
||||
local cargo_crate_dir = vim.fs.root(fname, { 'Cargo.toml' })
|
||||
local cargo_workspace_root
|
||||
|
||||
if cargo_crate_dir == nil then
|
||||
on_dir(
|
||||
vim.fs.root(fname, { 'rust-project.json' })
|
||||
or vim.fs.dirname(vim.fs.find('.git', { path = fname, upward = true })[1])
|
||||
)
|
||||
return
|
||||
end
|
||||
|
||||
local cmd = {
|
||||
'cargo',
|
||||
'metadata',
|
||||
'--no-deps',
|
||||
'--format-version',
|
||||
'1',
|
||||
'--manifest-path',
|
||||
cargo_crate_dir .. '/Cargo.toml',
|
||||
}
|
||||
|
||||
vim.system(cmd, { text = true }, function(output)
|
||||
if output.code == 0 then
|
||||
if output.stdout then
|
||||
local result = vim.json.decode(output.stdout)
|
||||
if result['workspace_root'] then
|
||||
cargo_workspace_root = vim.fs.normalize(result['workspace_root'])
|
||||
end
|
||||
end
|
||||
|
||||
on_dir(cargo_workspace_root or cargo_crate_dir)
|
||||
else
|
||||
vim.schedule(function()
|
||||
vim.notify(('[rust_analyzer] cmd failed with code %d: %s\n%s'):format(output.code, cmd, output.stderr))
|
||||
end)
|
||||
end
|
||||
end)
|
||||
end,
|
||||
capabilities = {
|
||||
experimental = {
|
||||
serverStatusNotification = true,
|
||||
},
|
||||
},
|
||||
before_init = function(init_params, config)
|
||||
-- See https://github.com/rust-lang/rust-analyzer/blob/eb5da56d839ae0a9e9f50774fa3eb78eb0964550/docs/dev/lsp-extensions.md?plain=1#L26
|
||||
if config.settings and config.settings['rust-analyzer'] then
|
||||
init_params.initializationOptions = config.settings['rust-analyzer']
|
||||
end
|
||||
end,
|
||||
on_attach = function()
|
||||
vim.api.nvim_buf_create_user_command(0, 'LspCargoReload', function()
|
||||
reload_workspace(0)
|
||||
end, { desc = 'Reload current cargo workspace' })
|
||||
end,
|
||||
}
|
||||
@ -33,10 +33,6 @@ vim.keymap.set("n", "<leader>tt", function()
|
||||
job_id = vim.bo.channel
|
||||
end)
|
||||
|
||||
vim.keymap.set("n", "<leader>build", function()
|
||||
vim.fn.chansend(job_id, { "ls -lah<CR>" })
|
||||
end)
|
||||
|
||||
-- General config
|
||||
vim.cmd("set expandtab")
|
||||
vim.cmd("set tabstop=2")
|
||||
@ -45,12 +41,7 @@ vim.cmd("set shiftwidth=2")
|
||||
vim.cmd("set syntax=on")
|
||||
vim.cmd("set number")
|
||||
vim.cmd("set nu")
|
||||
-- vim.cmd("set relativenumber")
|
||||
-- vim.cmd("set rnu")
|
||||
-- vim.cmd("set number relativenumber")
|
||||
-- vim.cmd("set nu rnu")
|
||||
-- vim.cmd("set guicursor=n-v-c-i:block")
|
||||
-- vim.cmd("set guicursor=a:blinkon100")
|
||||
-- vim.cmd("set guicursor=n-v-c:block")
|
||||
vim.api.nvim_set_option("clipboard","unnamed")
|
||||
|
||||
-- Command to turn off diagnostics, if crowding screen
|
||||
|
||||
@ -9,27 +9,8 @@ return {
|
||||
"williamboman/mason-lspconfig.nvim",
|
||||
config = function()
|
||||
require("mason-lspconfig").setup({
|
||||
ensure_installed = { "lua_ls", "phpactor", "rust_analyzer" },
|
||||
ensure_installed = { "lua_ls", "intelephense", "rust_analyzer", "elixirls" },
|
||||
})
|
||||
end,
|
||||
},
|
||||
{
|
||||
"neovim/nvim-lspconfig",
|
||||
config = function()
|
||||
local capabilities = require("cmp_nvim_lsp").default_capabilities()
|
||||
local lspconfig = require("lspconfig")
|
||||
lspconfig.lua_ls.setup({
|
||||
capabilities = capabilities,
|
||||
})
|
||||
lspconfig.phpactor.setup({
|
||||
capabilities = capabilities,
|
||||
})
|
||||
lspconfig.rust_analyzer.setup({
|
||||
capabilities = capabilities,
|
||||
})
|
||||
vim.keymap.set("n", "K", vim.lsp.buf.hover, {})
|
||||
vim.keymap.set("n", "gd", vim.lsp.buf.definition, {})
|
||||
vim.keymap.set({ "n" }, "<leader>ca", vim.lsp.buf.code_action, {})
|
||||
end,
|
||||
},
|
||||
}
|
||||
|
||||
@ -1,54 +0,0 @@
|
||||
local t_opts = {silent = true}
|
||||
vim.keymap.set('t', '<C-n>', '<C-\\><C-N>', t_opts)
|
||||
vim.keymap.set('t', '<C-h>', '<cmd>Danterm<CR>')
|
||||
vim.keymap.set('n', '<leader>dt', '<cmd>Danterm<CR>')
|
||||
|
||||
local state = {
|
||||
floating = {
|
||||
buf = -1,
|
||||
win = -1,
|
||||
}
|
||||
}
|
||||
|
||||
local function dan_term(opts)
|
||||
opts = opts or {}
|
||||
local width = opts.width or math.floor(vim.o.columns * 0.8)
|
||||
local height = opts.height or math.floor(vim.o.lines * 0.8)
|
||||
local screen_width = vim.o.columns
|
||||
local screen_height = vim.o.lines
|
||||
local col = math.floor((screen_width - width) / 2)
|
||||
local row = math.floor((screen_height - height) / 2)
|
||||
|
||||
local buf = nil
|
||||
if vim.api.nvim_buf_is_valid(opts.buf) then
|
||||
buf = opts.buf
|
||||
else
|
||||
buf = vim.api.nvim_create_buf(false, true)
|
||||
end
|
||||
|
||||
local win_config = {
|
||||
relative = 'editor',
|
||||
width = width,
|
||||
height = height,
|
||||
col = col,
|
||||
row = row,
|
||||
style = 'minimal',
|
||||
border = 'rounded', -- optional, choose 'none', 'single', 'double', etc.
|
||||
}
|
||||
|
||||
local win = vim.api.nvim_open_win(buf, true, win_config)
|
||||
|
||||
return { buf = buf, win = win }
|
||||
end
|
||||
|
||||
vim.api.nvim_create_user_command("Danterm", function()
|
||||
if not vim.api.nvim_win_is_valid(state.floating.win) then
|
||||
state.floating = dan_term { buf = state.floating.buf }
|
||||
if vim.bo[state.floating.buf].buftype ~= "terminal" then
|
||||
vim.cmd.term()
|
||||
vim.api.nvim_input("i")
|
||||
end
|
||||
else
|
||||
vim.api.nvim_win_hide(state.floating.win)
|
||||
end
|
||||
end, {})
|
||||
Loading…
x
Reference in New Issue
Block a user