python/efm config that's better

This commit is contained in:
Barak Michener 2024-01-09 13:24:18 -08:00 committed by Barak Michener
parent 4eca2ee06a
commit 2e87881195
3 changed files with 148 additions and 31 deletions

View file

@ -7,6 +7,13 @@ local nvim_lsp = require 'lspconfig'
local on_attach = function(client)
end
-- Set my preferred diagnostic options
local diagnostic_options = {
virtual_text = false,
signs = true,
update_in_insert = false,
}
local rust_capabilities = vim.lsp.protocol.make_client_capabilities()
rust_capabilities.textDocument.completion.completionItem.snippetSupport = true
rust_capabilities.textDocument.completion.completionItem.resolveSupport = {
@ -17,6 +24,16 @@ rust_capabilities.textDocument.completion.completionItem.resolveSupport = {
}
}
local default_capabilities = vim.lsp.protocol.make_client_capabilities()
default_capabilities.textDocument.completion.completionItem.snippetSupport = true
default_capabilities.textDocument.completion.completionItem.resolveSupport = {
properties = {
'documentation',
'detail',
'additionalTextEdits',
}
}
-- Enable rust_analyzer
nvim_lsp.rust_analyzer.setup({
on_attach = function(client, bufnr)
@ -54,7 +71,80 @@ nvim_lsp.gopls.setup({
},
},
})
nvim_lsp.pyright.setup({ on_attach = on_attach })
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 pyright_accessed_filter(diagnostic)
-- 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
return true
end
local function pyright_custom_diagnostic(a, params, client_id, c, config)
filter(params.diagnostics, pyright_accessed_filter)
vim.lsp.diagnostic.on_publish_diagnostics(a, params, client_id, c, config)
end
nvim_lsp.pyright.setup({ on_attach = function(client, bufnr)
vim.lsp.handlers["textDocument/publishDiagnostics"] = vim.lsp.with(pyright_custom_diagnostic, diagnostic_options)
end})
--nvim_lsp.pyright.setup({ on_attach = on_attach })
--nvim_lsp.pylsp.setup({
--on_attach = on_attach,
--settings = {
--pylsp = {
--plugins = {
---- formatter options
----black = { enabled = true },
--autopep8 = { enabled = false },
--yapf = { enabled = false },
---- linter options
--pylint = { enabled = false, executable = "pylint" },
--pyflakes = { enabled = false },
--pycodestyle = { enabled = false },
---- type checker
--pylsp_mypy = { enabled = true },
---- auto-completion options
--jedi_completion = { enabled = false },
---- import sorting
----pyls_isort = { enabled = true },
----flake8 = {
----maxLineLength = 100,
----},
--pycodestyle = {
--maxLineLength = 100,
--},
----rope_autoimport = {
----enabled = true
----},
----rope_completion = {
----enabled = true
----},
--}
--}
--}
--})
--nvim_lsp.clangd.setup({ on_attach = on_attach })
nvim_lsp.tsserver.setup {
@ -100,7 +190,12 @@ require 'lspconfig'.lua_ls.setup {
},
}
require('go').setup()
require('go').setup({
iferr_vertical_shift = 2
})
require('telescope').load_extension('goimpl')
function org_imports(wait_ms)
local params = vim.lsp.util.make_range_params()
@ -120,35 +215,42 @@ function org_imports(wait_ms)
end
end
nvim_lsp.efm.setup {
init_options = { documentFormatting = true },
settings = {
rootMarkers = { ".git/", "package.json" },
languages = {
lua = {
{ formatCommand = "lua-format -i", formatStdin = true }
},
python = {
{ formatCommand = 'black --quiet -', formatStdin = true }
},
rust = {
{ formatCommand = 'rustfmt', formatStdin = true }
},
typescript = {
{ formatCommand = 'pnpm exec eslint --fix' }
}
}
}
-- register linters
local luaformat = require("efmls-configs.formatters.lua_format")
local rustfmt = require('efmls-configs.formatters.rustfmt')
local black = require('efmls-configs.formatters.black')
local mypy = require('efmls-configs.linters.mypy')
local eslint = require('efmls-configs.linters.eslint')
local isort = require('efmls-configs.formatters.isort')
local languages = {
typescript = { eslint },
lua = { luaformat },
python = { black, mypy, isort },
rust = { rustfmt },
}
local efmls_config = {
filetypes = vim.tbl_keys(languages),
settings = {
rootMarkers = { '.git/' },
languages = languages,
},
init_options = {
documentFormatting = true,
documentRangeFormatting = true,
},
}
require('lspconfig').efm.setup(vim.tbl_extend('force', efmls_config, {
-- Pass your custom lsp config below like on_attach and capabilities
on_attach = on_attach,
capabilities = default_capabilities,
}))
-- Enable diagnostics
vim.lsp.handlers["textDocument/publishDiagnostics"] = vim.lsp.with(
vim.lsp.diagnostic.on_publish_diagnostics, {
virtual_text = false,
signs = true,
update_in_insert = false,
}
)
vim.lsp.diagnostic.on_publish_diagnostics,
diagnostic_options)
-- Compe setup
require 'compe'.setup {
@ -321,6 +423,12 @@ require('telescope').setup {
},
},
pickers = {
goimpl = {
theme = "ivy",
layout_config = {
height = 10,
},
},
lsp_code_actions = {
theme = "ivy",
layout_config = {
@ -367,6 +475,7 @@ require('telescope').setup {
layout_config = {
height = 15,
},
ignore_current_buffer = true,
initial_mode = "normal",
},
},
@ -571,3 +680,5 @@ function neogen_dwim()
end
end
end
require("murdock")