From 18e8c179eb16021f048a4af6f7bd72800d3b141d Mon Sep 17 00:00:00 2001 From: engeir Date: Fri, 9 Dec 2022 09:20:10 -0700 Subject: [PATCH] feat: lsp formatting works alongside gqq Solved from the comments of [#1131](https://github.com/jose-elias-alvarez/null-ls.nvim/issues/1131). --- nvim_lua/.config/nvim/lua/engeir/lsp/init.lua | 70 ++++++++----------- .../.config/nvim/lua/engeir/lsp/null-ls.lua | 19 +++-- nvim_lua/.config/nvim/lua/engeir/plugins.lua | 3 + 3 files changed, 48 insertions(+), 44 deletions(-) diff --git a/nvim_lua/.config/nvim/lua/engeir/lsp/init.lua b/nvim_lua/.config/nvim/lua/engeir/lsp/init.lua index 6632f14e..d7a60d7d 100644 --- a/nvim_lua/.config/nvim/lua/engeir/lsp/init.lua +++ b/nvim_lua/.config/nvim/lua/engeir/lsp/init.lua @@ -1,25 +1,14 @@ -local lsp = require("lsp-zero") - -lsp.preset("recommended") -lsp.nvim_workspace() -local ok, cmp = pcall(require, "cmp") +local ok, lsp, cmp = pcall(function() + return require("lsp-zero"), require("cmp") +end) if not ok then return end + +require("engeir.lsp.null-ls") +lsp.preset("recommended") +lsp.nvim_workspace() local cmp_select = { behavior = cmp.SelectBehavior.Select } --- local cmp_mappings = lsp.defaults.cmp_mappings({ --- [""] = cmp.mapping.scroll_docs(-4), --- [""] = cmp.mapping.scroll_docs(4), --- [""] = cmp.mapping.select_prev_item(cmp_select), --- [""] = cmp.mapping.select_next_item(cmp_select), --- [""] = cmp.mapping.confirm({ select = true }), --- [""] = cmp.mapping.complete(), --- [""] = cmp.config.disable, --- }) --- --- lsp.setup_nvim_cmp({ --- mapping = cmp_mappings --- }) -- lsp.on_attach(function(client, bufnr) -- local opts = { buffer = bufnr, remap = false } @@ -66,51 +55,52 @@ lsp.on_attach(function(_, bufnr) -- for LSP related items. It sets the mode, buffer and description for us each time. local nmap = function(keys, func, desc) if desc then - desc = 'LSP: ' .. desc + desc = "LSP: " .. desc end - vim.keymap.set('n', keys, func, { buffer = bufnr, desc = desc }) + vim.keymap.set("n", keys, func, { buffer = bufnr, desc = desc }) end - nmap('rn', vim.lsp.buf.rename, '[R]e[n]ame') - nmap('ca', vim.lsp.buf.code_action, '[C]ode [A]ction') + nmap("rn", vim.lsp.buf.rename, "[R]e[n]ame") + nmap("ca", vim.lsp.buf.code_action, "[C]ode [A]ction") - nmap('gd', vim.lsp.buf.definition, '[G]oto [D]efinition') - nmap('gi', vim.lsp.buf.implementation, '[G]oto [I]mplementation') - nmap('gr', require('telescope.builtin').lsp_references, '[G]oto [R]eferences') - nmap('ds', require('telescope.builtin').lsp_document_symbols, '[D]ocument [S]ymbols') - nmap('ws', require('telescope.builtin').lsp_dynamic_workspace_symbols, '[W]orkspace [S]ymbols') + nmap("gd", vim.lsp.buf.definition, "[G]oto [D]efinition") + nmap("gi", vim.lsp.buf.implementation, "[G]oto [I]mplementation") + nmap("gr", require("telescope.builtin").lsp_references, "[G]oto [R]eferences") + nmap("ds", require("telescope.builtin").lsp_document_symbols, "[D]ocument [S]ymbols") + nmap("ws", require("telescope.builtin").lsp_dynamic_workspace_symbols, "[W]orkspace [S]ymbols") -- See `:help K` for why this keymap - nmap('K', vim.lsp.buf.hover, 'Hover Documentation') - nmap('', vim.lsp.buf.signature_help, 'Signature Documentation') - vim.keymap.set('i', "", vim.lsp.buf.signature_help, { buffer = bufnr, desc = "Signature Documentation" }) + nmap("K", vim.lsp.buf.hover, "Hover Documentation") + nmap("", vim.lsp.buf.signature_help, "Signature Documentation") + vim.keymap.set("i", "", vim.lsp.buf.signature_help, { buffer = bufnr, desc = "Signature Documentation" }) -- Lesser used LSP functionality - nmap('gD', vim.lsp.buf.declaration, '[G]oto [D]eclaration') - nmap('D', vim.lsp.buf.type_definition, 'Type [D]efinition') - nmap('wa', vim.lsp.buf.add_workspace_folder, '[W]orkspace [A]dd Folder') - nmap('wr', vim.lsp.buf.remove_workspace_folder, '[W]orkspace [R]emove Folder') + nmap("gD", vim.lsp.buf.declaration, "[G]oto [D]eclaration") + nmap("D", vim.lsp.buf.type_definition, "Type [D]efinition") + nmap("wa", vim.lsp.buf.add_workspace_folder, "[W]orkspace [A]dd Folder") + nmap("wr", vim.lsp.buf.remove_workspace_folder, "[W]orkspace [R]emove Folder") nmap("ws", vim.lsp.buf.workspace_symbol, "[W]orkspace [S]ymbol") - nmap('wl', function() + nmap("wl", function() print(vim.inspect(vim.lsp.buf.list_workspace_folders())) - end, '[W]orkspace [L]ist Folders') + end, "[W]orkspace [L]ist Folders") -- Create a command `:Format` local to the LSP buffer - vim.api.nvim_buf_create_user_command(bufnr, 'Format', function(_) + vim.api.nvim_buf_create_user_command(bufnr, "Format", function(_) if vim.lsp.buf.format then vim.lsp.buf.format() elseif vim.lsp.buf.formatting then vim.lsp.buf.formatting() end - end, { desc = 'Format current buffer with LSP' }) + end, { desc = "Format current buffer with LSP" }) + nmap("s", "Format", "Format") end) lsp.setup() cmp.setup({ completion = { - completeopt = 'menu,menuone,noinsert,noselect' + completeopt = "menu,menuone,noinsert,noselect", }, mapping = lsp.defaults.cmp_mappings({ [""] = cmp.mapping.scroll_docs(-4), @@ -120,5 +110,5 @@ cmp.setup({ [""] = cmp.mapping.confirm({ select = true }), [""] = cmp.mapping.complete(), [""] = cmp.mapping.confirm({ select = false }), - }) + }), }) diff --git a/nvim_lua/.config/nvim/lua/engeir/lsp/null-ls.lua b/nvim_lua/.config/nvim/lua/engeir/lsp/null-ls.lua index 008b8d30..667d7349 100644 --- a/nvim_lua/.config/nvim/lua/engeir/lsp/null-ls.lua +++ b/nvim_lua/.config/nvim/lua/engeir/lsp/null-ls.lua @@ -1,5 +1,5 @@ -local null_ls_status_ok, null_ls = pcall(require, "null-ls") -if not null_ls_status_ok then +local ok, null_ls = pcall(require, "null-ls") +if not ok then return end @@ -11,7 +11,7 @@ local diagnostics = null_ls.builtins.diagnostics -- https://github.com/prettier-solidity/prettier-plugin-solidity null_ls.setup({ - debug = true, + -- debug = true, -- Stopped working all of a sudden. Crashes `gq`. sources = { -- code_actions.gitsigns, @@ -32,7 +32,9 @@ null_ls.setup({ formatting.black.with({ extra_args = { "--fast" } }), formatting.fixjson, formatting.gofmt, - formatting.latexindent.with({extra_args={"-l", vim.fn.expand("~") .. "/.config/latexindent/latexindent.yaml"}}), + formatting.latexindent.with({ + extra_args = { "-l", vim.fn.expand("~") .. "/.config/latexindent/latexindent.yaml" }, + }), -- formatting.markdownlint.with({ -- extra_args = { "-c", vim.fn.expand("~") .. "/.config/mdl/.markdownlint.jsonc" }, -- }), -- Using `prettierd` instead @@ -46,3 +48,12 @@ null_ls.setup({ formatting.taplo, }, }) + +-- null-ls has an issue with gqq when an lsp is attached, but the below solves it. See: +-- https://github.com/jose-elias-alvarez/null-ls.nvim/issues/1259 +-- Use internal formatting for bindings like gq. +vim.api.nvim_create_autocmd("LspAttach", { + callback = function(args) + vim.bo[args.buf].formatexpr = nil + end, +}) diff --git a/nvim_lua/.config/nvim/lua/engeir/plugins.lua b/nvim_lua/.config/nvim/lua/engeir/plugins.lua index 71f1d126..3587e104 100644 --- a/nvim_lua/.config/nvim/lua/engeir/plugins.lua +++ b/nvim_lua/.config/nvim/lua/engeir/plugins.lua @@ -84,6 +84,9 @@ return packer.startup(function(use) -- Snippets { "L3MON4D3/LuaSnip" }, { "rafamadriz/friendly-snippets" }, + + -- Extra + { "jose-elias-alvarez/null-ls.nvim" }, }, })