diff --git a/init.plugins.vim b/init.plugins.vim index 8708923..439fc09 100644 --- a/init.plugins.vim +++ b/init.plugins.vim @@ -407,9 +407,11 @@ require'lspconfig'.yamlls.setup{} require'lspconfig'.stylelint_lsp.setup{} -- https://github.com/neovim/nvim-lspconfig/wiki require'lspconfig'.tailwindcss.setup{} - --- efm-langserver settings --- npm install -g eslint_d +EOF + "}}} +" #efm-langserver {{{ +" npm install -g eslint_d +lua << EOF local eslint = { lintCommand = "eslint_d -f unix --stdin --stdin-filename ${INPUT}", lintStdin = true, @@ -427,10 +429,36 @@ local shellcheck = { "%f:%l:%c: %tote: %m", } } +local flake8 = { + lintCommand = "flake8 --stdin-display-name ${INPUT} -", + lintStdin = true, + lintFormats = {"%f:%l:%c: %m"} +} +local black = { + formatCommand = "black --quiet -", + formatStdin = true +} +-- sudo pacman -Syu jq +local jq = { + lintCommand = "jq ." + } +-- npm install -g fixjson +local fixjson = { + formatCommand = "fixjson" +} local util = require "lspconfig".util +local on_attach = function(client) + if client.resolved_capabilities.document_formatting then + vim.cmd [[augroup lsp_formatting]] + vim.cmd [[autocmd!]] + vim.cmd [[autocmd BufWritePre :lua vim.lsp.buf.formatting_sync({}, 1000)]] + vim.cmd [[augroup END]] + end +end require "lspconfig".efm.setup { init_options = {documentFormatting = true}, - filetypes = {"javascript", "typescript", "sh"}, + on_attach = on_attach, + filetypes = {"javascript", "typescript", "json", "sh", "python"}, root_dir = function(fname) return util.root_pattern("tsconfig.json")(fname) or util.root_pattern(".eslintrc.js", ".git")(fname); @@ -440,12 +468,74 @@ require "lspconfig".efm.setup { languages = { javascript = {eslint}, typescript = {eslint}, + json = {jq, fixjson}, + python = {flake8, black}, sh = {shellcheck} } } } - EOF +" }}} +" #nvim-lspconfig (keybindings etc) {{{ +lua << EOF +local nvim_lsp = require('lspconfig') + +-- 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) + local function buf_set_keymap(...) vim.api.nvim_buf_set_keymap(bufnr, ...) end + local function buf_set_option(...) vim.api.nvim_buf_set_option(bufnr, ...) end + + -- Enable completion triggered by + buf_set_option('omnifunc', 'v:lua.vim.lsp.omnifunc') + + -- Mappings. + local opts = { noremap=true, silent=true } + + -- See `:help vim.lsp.*` for documentation on any of the below functions + buf_set_keymap('n', 'gD', 'lua vim.lsp.buf.declaration()', opts) + buf_set_keymap('n', 'gd', 'lua vim.lsp.buf.definition()', opts) + buf_set_keymap('n', 'K', 'lua vim.lsp.buf.hover()', opts) + buf_set_keymap('n', 'gi', 'lua vim.lsp.buf.implementation()', opts) + buf_set_keymap('n', '', 'lua vim.lsp.buf.signature_help()', opts) + buf_set_keymap('n', 'wa', 'lua vim.lsp.buf.add_workspace_folder()', opts) + buf_set_keymap('n', 'wr', 'lua vim.lsp.buf.remove_workspace_folder()', opts) + buf_set_keymap('n', 'wl', 'lua print(vim.inspect(vim.lsp.buf.list_workspace_folders()))', opts) + buf_set_keymap('n', 'D', 'lua vim.lsp.buf.type_definition()', opts) + buf_set_keymap('n', 'rn', 'lua vim.lsp.buf.rename()', opts) + buf_set_keymap('n', 'ca', 'lua vim.lsp.buf.code_action()', opts) + buf_set_keymap('n', 'gr', 'lua vim.lsp.buf.references()', opts) + buf_set_keymap('n', 'e', 'lua vim.lsp.diagnostic.show_line_diagnostics()', opts) + buf_set_keymap('n', '[d', 'lua vim.lsp.diagnostic.goto_prev()', opts) + buf_set_keymap('n', ']d', 'lua vim.lsp.diagnostic.goto_next()', opts) + buf_set_keymap('n', 'q', 'lua vim.lsp.diagnostic.set_loclist()', opts) + buf_set_keymap('n', 'f', 'lua vim.lsp.buf.formatting()', opts) + +end + +-- Use a loop to conveniently call 'setup' on multiple servers and +-- map buffer local keybindings when the language server attaches +local servers = { + 'bashls', + 'cssls', + 'phpactor', + 'pyright', + 'stylelint_lsp', + 'tailwindcss', + 'tsserver', + 'vimls', + 'vuels' +} +for _, lsp in ipairs(servers) do + nvim_lsp[lsp].setup { + on_attach = on_attach, + flags = { + debounce_text_changes = 150, + } + } +end +EOF + "}}}