Correct LSP setup + DAP + ...

This commit is contained in:
2024-08-09 22:31:53 +02:00
parent 0066e28c8f
commit 6fa41890ab
8 changed files with 600 additions and 170 deletions
+78
View File
@@ -40,6 +40,8 @@ M.capabilities.textDocument.completion.completionItem = {
},
}
M.capabilities.textDocument.publishDiagnostics.tagSupport.valueSet = { 2 }
require("lspconfig").lua_ls.setup {
on_init = M.on_init,
on_attach = M.on_attach,
@@ -64,4 +66,80 @@ require("lspconfig").lua_ls.setup {
},
}
-- local capabilities = vim.lsp.protocol.make_client_capabilities()
-- capabilities.textDocument.publishDiagnostics.tagSupport.valueSet = { 2 }
require("lspconfig").pyright.setup {
on_init = M.on_init,
on_attach = M.on_attach,
capabilities = M.capabilities,
settings = {
pyright = {
-- Options available here: https://github.com/microsoft/pyright/blob/main/docs/settings.md
disableOrganizeImports = true, -- Using Ruff
-- disableLanguageServices = true, -- Using Ruff
},
python = {
analysis = {
-- ignore = { "*" }, -- Using Ruff
-- typeCheckingMode = "off", -- Using mypy
diagnosticSeverityOverrides = {
reportMissingImports = false,
},
},
},
},
}
-- -- This can be used for removing message based on regex etc. For now, all those message are disabled by the tagSupport.valueSet
-- local function filter(arr, func)
-- -- Filter in place
-- -- https://stackoverflow.com/questions/49709998/how-to-filter-a-lua-array-inplace
-- local new_index = 1
-- local size_orig = #arr
-- for old_index, v in ipairs(arr) do
-- if func(v, old_index) then
-- arr[new_index] = v
-- new_index = new_index + 1
-- end
-- end
-- for i = new_index, size_orig do
-- arr[i] = nil
-- end
-- end
--
-- local function filter_diagnostics(diagnostic)
-- -- Only filter out Pyright stuff for now
-- if diagnostic.source ~= "Pyright" then
-- return true
-- end
--
-- -- Allow kwargs to be unused, sometimes you want many functions to take the
-- -- same arguments but you don't use all the arguments in all the functions,
-- -- so kwargs is used to suck up all the extras
-- if diagnostic.message == '"kwargs" is not accessed' then
-- return false
-- end
--
-- -- Allow variables starting with an underscore
-- if string.match(diagnostic.message, '"_.+" is not accessed') then
-- return false
-- end
--
-- -- For now, remove all not accessed message. I will still have assigned but not accessed message!
-- if string.match(diagnostic.message, '".+" is not accessed') then
-- return false
-- end
--
-- return true
-- end
--
-- local function custom_on_publish_diagnostics(a, params, client_id, c)
-- filter(params.diagnostics, filter_diagnostics)
-- vim.lsp.diagnostic.on_publish_diagnostics(a, params, client_id, c)
-- end
--
-- vim.lsp.handlers["textDocument/publishDiagnostics"] = vim.lsp.with(custom_on_publish_diagnostics, {})
return M
+27 -26
View File
@@ -1,47 +1,48 @@
-- See: https://github.com/neovim/nvim-lspconfig/tree/54eb2a070a4f389b1be0f98070f81d23e2b1a715#suggested-configuration
local opts = { noremap=true, silent=true }
vim.keymap.set('n', '<space>k', vim.diagnostic.open_float, opts)
vim.keymap.set('n', '[d', vim.diagnostic.goto_prev, opts)
vim.keymap.set('n', ']d', vim.diagnostic.goto_next, opts)
vim.keymap.set('n', '<space>q', vim.diagnostic.setloclist, opts)
local opts = { noremap = true, silent = true }
vim.keymap.set("n", "<space>k", vim.diagnostic.open_float, opts)
vim.keymap.set("n", "[d", vim.diagnostic.goto_prev, opts)
vim.keymap.set("n", "]d", vim.diagnostic.goto_next, opts)
-- vim.keymap.set('n', '<space>q', vim.diagnostic.setloclist, opts)
-- Use an on_attach function to only map the following keys
-- after the language server attaches to the current buffer
local on_attach = function(client, bufnr)
-- Enable completion triggered by <c-x><c-o>
vim.api.nvim_buf_set_option(bufnr, 'omnifunc', 'v:lua.vim.lsp.omnifunc')
vim.api.nvim_buf_set_option(bufnr, "omnifunc", "v:lua.vim.lsp.omnifunc")
-- Mappings.
-- See `:help vim.lsp.*` for documentation on any of the below functions
local bufopts = { noremap=true, silent=true, buffer=bufnr }
vim.keymap.set('n', 'gD', vim.lsp.buf.declaration, bufopts)
vim.keymap.set('n', 'gd', vim.lsp.buf.definition, bufopts)
vim.keymap.set('n', 'K', vim.lsp.buf.hover, bufopts)
vim.keymap.set('n', 'gi', vim.lsp.buf.implementation, bufopts)
local bufopts = { noremap = true, silent = true, buffer = bufnr }
-- vim.keymap.set("n", "gD", vim.lsp.buf.declaration, bufopts)
-- vim.keymap.set("n", "gd", vim.lsp.buf.definition, bufopts)
-- vim.keymap.set("n", "K", vim.lsp.buf.hover, bufopts)
-- vim.keymap.set("n", "gi", vim.lsp.buf.implementation, bufopts)
-- vim.keymap.set('n', '<C-k>', vim.lsp.buf.signature_help, bufopts)
vim.keymap.set('n', '<space>wa', vim.lsp.buf.add_workspace_folder, bufopts)
vim.keymap.set('n', '<space>wr', vim.lsp.buf.remove_workspace_folder, bufopts)
vim.keymap.set('n', '<space>wl', function()
print(vim.inspect(vim.lsp.buf.list_workspace_folders()))
end, bufopts)
-- vim.keymap.set("n", "<space>wa", vim.lsp.buf.add_workspace_folder, bufopts)
-- vim.keymap.set("n", "<space>wr", vim.lsp.buf.remove_workspace_folder, bufopts)
-- vim.keymap.set("n", "<space>wl", function()
-- print(vim.inspect(vim.lsp.buf.list_workspace_folders()))
-- end, bufopts)
vim.keymap.set('n', '<space>D', vim.lsp.buf.type_definition, bufopts)
vim.keymap.set('n', '<space>rn', vim.lsp.buf.rename, bufopts)
vim.keymap.set('n', '<space>ca', vim.lsp.buf.code_action, bufopts)
vim.keymap.set('n', 'gr', vim.lsp.buf.references, bufopts)
vim.keymap.set('n', '<space>f', function() vim.lsp.buf.format { async = true } end, bufopts)
-- vim.keymap.set("n", "<space>D", vim.lsp.buf.type_definition, bufopts)
-- vim.keymap.set("n", "<space>rn", vim.lsp.buf.rename, bufopts)
vim.keymap.set("n", "<space>ca", vim.lsp.buf.code_action, bufopts)
-- vim.keymap.set("n", "gr", vim.lsp.buf.references, bufopts)
-- vim.keymap.set("n", "<space>f", function()
-- vim.lsp.buf.format { async = true }
-- end, bufopts)
end
-- Configure `ruff-lsp`.
-- See: https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#ruff_lsp
-- For the default config, along with instructions on how to customize the settings
require('lspconfig').ruff_lsp.setup {
require("lspconfig").ruff_lsp.setup {
on_attach = on_attach,
init_options = {
settings = {
-- Any extra CLI arguments for `ruff` go here.
args = {"--ignore", "E741"},
}
}
args = { "--ignore", "E741" },
},
},
}
+167 -4
View File
@@ -1,7 +1,20 @@
local custom_actions = {}
local actions = require("telescope.actions")
local lga_actions = require("telescope-live-grep-args.actions")
local action_state = require("telescope.actions.state")
local from_entry = require("telescope.from_entry")
local scan = require("plenary.scandir")
local pickers = require("telescope.pickers")
local finders = require("telescope.finders")
local make_entry = require("telescope.make_entry")
local action_set = require 'telescope.actions.set'
local conf = require('telescope.config').values
local builtin = require("telescope.builtin")
-- Usefull:
-- [[
-- https://github.com/JoosepAlviste/dotfiles/blob/master/config/nvim/lua/j/telescope_custom_pickers.lua
-- ]]
local entry_to_qf = function(entry)
@@ -91,6 +104,122 @@ function custom_actions.multi_selection_vtab(prompt_bufnr)
return custom_actions._multiopen(prompt_bufnr, "tabe", "tabe", "a", "loclist")
end
function custom_actions.set_extension(prompt_bufnr)
local current_input = action_state.get_current_line()
vim.ui.input({ prompt = 'Search in extension: *.' }, function(input)
if input == nil then
return
end
-- Close and reopen a prompt with the same input
actions.close(prompt_bufnr)
builtin.live_grep({ default_text = current_input, type_filter = input })
end)
end
function custom_actions.to_live_grep_args(prompt_bufnr)
local current_input = action_state.get_current_line()
-- Close and reopen a prompt with live_grep_args
actions.close(prompt_bufnr)
require("telescope").extensions.live_grep_args.live_grep_args({ default_text = current_input })
end
function custom_actions.set_folders(prompt_bufnr)
local current_input = action_state.get_current_line()
local data = {}
scan.scan_dir(vim.loop.cwd(), {
hidden = true,
only_dirs = true,
respect_gitignore = true,
on_insert = function(entry)
table.insert(data, entry .. "/")
end,
})
table.insert(data, 1, "./")
actions.close(prompt_bufnr)
-- Create a new picker with Telescope to select folders we want to filter in
pickers.new({
prompt_title = 'Select folders for current ("' .. current_input .. '") search',
finder = finders.new_table { results = data, entry_maker = make_entry.gen_from_file {} },
previewer = conf.file_previewer {},
sorter = conf.file_sorter {},
attach_mappings = function(prompt_bufnr2)
action_set.select:replace(function()
local current_picker = action_state.get_current_picker(prompt_bufnr2)
local dirs = {}
local selections = current_picker:get_multi_selection()
if vim.tbl_isempty(selections) then
table.insert(dirs, action_state.get_selected_entry().value)
else
for _, selection in ipairs(selections) do
table.insert(dirs, selection.value)
end
end
actions.close(prompt_bufnr2)
builtin.live_grep({ default_text = current_input, search_dirs = dirs })
end)
return true
end,
}):find()
end
function custom_actions.set_files(prompt_bufnr)
local current_input = action_state.get_current_line()
local find_command = {"rg", "--files", "--color=never", "--no-heading"}
actions.close(prompt_bufnr)
if current_input ~= "" then
find_command = {"rg", "--color=never", "--no-heading", "-l", current_input}
end
local opts = {
entry_maker = make_entry.gen_from_file(),
find_command = find_command,
}
print(vim.inspect(find_command))
-- Create a new picker with Telescope to select files we want to filter in
pickers
.new(opts, {
prompt_title = 'Select files for current ("' .. current_input .. '") search',
__locations_input = true,
finder = finders.new_oneshot_job(find_command, opts),
previewer = conf.grep_previewer(opts),
sorter = conf.file_sorter(opts),
attach_mappings = function(prompt_bufnr2)
actions.select_default:replace(function()
local current_picker = action_state.get_current_picker(prompt_bufnr2)
local files = {}
local selections = current_picker:get_multi_selection()
if vim.tbl_isempty(selections) then
local entry = action_state.get_selected_entry()
table.insert(files, entry.value)
else
for _, selection in ipairs(selections) do
table.insert(files, selection.value)
end
end
-- Close the preview picker and select a new one, restricted to the files selected
actions.close(prompt_bufnr2)
builtin.live_grep({ default_text = current_input, search_dirs = files })
end)
return true
end,
})
:find()
end
local options = {
defaults = {
vimgrep_arguments = {
@@ -157,12 +286,18 @@ local options = {
find_files = {
mappings = {
i = {
-- Fuzzy refine ("Freeze the current list and start a fuzzy search in the frozen list")
["<C-i>"] = actions.to_fuzzy_refine,
-- Send to qflist or loclist
["<C-l>"] = actions.smart_send_to_loclist,
["<C-Space>"] = actions.smart_send_to_qflist,
-- Multi selection open
["<CR>"] = custom_actions.multi_selection_open,
["<C-v>"] = custom_actions.multi_selection_vsplit,
["<C-X>"] = custom_actions.multi_selection_split,
["<C-T>"] = custom_actions.multi_selection_tab,
["<C-Space>"] = actions.smart_send_to_qflist,
["<C-L>"] = actions.smart_send_to_loclist,
},
n = i,
}
@@ -170,21 +305,49 @@ local options = {
live_grep = {
mappings = {
i = {
-- Fuzzy refine ("Freeze the current list and start a fuzzy search in the frozen list")
["<C-i>"] = actions.to_fuzzy_refine,
-- Send to qflist or loclist
["<C-l>"] = actions.smart_send_to_loclist,
["<C-Space>"] = actions.smart_send_to_qflist,
["<C-L>"] = actions.smart_send_to_loclist,
-- To quote prompt -> Pass to live_grep_args
["<C-k>"] = custom_actions.to_live_grep_args,
-- Search for files/folder/extensions
["<C-f>"] = custom_actions.set_files,
["<C-g>"] = custom_actions.set_folders,
["<C-e>"] = custom_actions.set_extension,
},
n = i,
}
}
},
extensions_list = { "themes", "terms", "fzf", "macrothis" },
extensions_list = { "themes", "terms", "fzf", "macrothis", "live_grep_args" },
extensions = {
fzf = {
fuzzy = true,
override_generic_sorter = true,
override_file_sorter = true,
case_mode = "smart_case",
},
live_grep_args = {
auto_quoting = true,
mappings = {
i = {
-- Fuzzy refine ("Freeze the current list and start a fuzzy search in the frozen list")
["<C-i>"] = actions.to_fuzzy_refine,
-- Send to qflist or loclist
["<C-l>"] = actions.smart_send_to_loclist,
["<C-Space>"] = actions.smart_send_to_qflist,
-- Quote prompt, for passing parameters to vimgrep
["<C-k>"] = lga_actions.quote_prompt(),
},
}
}
}
}