From 2e878811950c1cc55db04f495509bcf4737f18e1 Mon Sep 17 00:00:00 2001 From: Barak Michener Date: Tue, 9 Jan 2024 13:24:18 -0800 Subject: [PATCH] python/efm config that's better --- .vim/filetype.vim | 3 + .vim/nvim.lua | 165 +++++++++++++++++++++++++++++++++++++++++++++--------- .vimrc | 11 ++-- 3 files changed, 148 insertions(+), 31 deletions(-) diff --git a/.vim/filetype.vim b/.vim/filetype.vim index 09676a1..20dba9f 100644 --- a/.vim/filetype.vim +++ b/.vim/filetype.vim @@ -99,6 +99,9 @@ augroup go autocmd FileType go set softtabstop=2 autocmd FileType go set shiftwidth=2 autocmd FileType go set noexpandtab + autocmd FileType go imap rr :GoIfErr + autocmd FileType go nmap rr :GoIfErr + autocmd FileType go nnoremap im lua require('telescope').extensions.goimpl.goimpl{theme = "ivy", layout_config = {height = 10}} "autocmd FileType go nmap gd (go-doc) "autocmd FileType go nmap gd (go-def) augroup END diff --git a/.vim/nvim.lua b/.vim/nvim.lua index d441658..e6837a2 100644 --- a/.vim/nvim.lua +++ b/.vim/nvim.lua @@ -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") diff --git a/.vimrc b/.vimrc index 73062b5..5e61d1e 100644 --- a/.vimrc +++ b/.vimrc @@ -222,7 +222,9 @@ Plug 'ray-x/go.nvim' Plug 'RishabhRD/popfix' Plug 'RishabhRD/nvim-lsputils' +Plug 'stevanmilic/nvim-lspimport' Plug 'folke/trouble.nvim' +Plug 'creativenull/efmls-configs-nvim', { 'tag': 'v1.*' } " Plugins that do specific things "Plug 'Shougo/vimproc.vim' @@ -254,6 +256,7 @@ Plug 'danymat/neogen' " Unclear "Plug 'ncm2/float-preview.nvim' Plug 'lambdalisue/gina.vim' +Plug 'edolphin-ydf/goimpl.nvim' call plug#end() @@ -292,6 +295,8 @@ nnoremap xx TroubleToggle nnoremap xq lua vim.diagnostic.setqflist() "nnoremap nc lua neogen_dwim() nnoremap nc lua require('neogen').generate({ type = 'any' }) +nnoremap gm lua require('lspimport').import() + " Set updatetime for CursorHold " 300ms of no cursor movement to trigger CursorHold @@ -1029,7 +1034,8 @@ nnoremap hh :A " CommandT is useful, but if I'm juggling lots of buffers, limit it to another " one I have open (instead of standard t). "nnoremap o :Buffers -nnoremap o lua require('telescope.builtin').buffers{} +nnoremap o lua require('telescope.builtin').buffers{initial_mode = "insert"} +nnoremap lua require('telescope.builtin').buffers{prompt_prefix = " "} "nnoremap j "nnoremap p :PTW nnoremap p :LustyJugglePrevious @@ -1046,9 +1052,6 @@ endif " ** SEE ALSO ** " filetype.vim -command Comments lexpr system($HOME . '/src/gogh/src/github.com/barakmich/gogh/gogh') - - "call remote#host#RegisterPlugin('python3', '/home/barak/.vim/bundle/deoplete.nvim/rplugin/python3/deoplete', [ "\ {'sync': v:true, 'name': '_deoplete', 'type': 'function', 'opts': {}}, "\ ])