Skip to content

Commit

Permalink
feat: lsp formatting works alongside gqq
Browse files Browse the repository at this point in the history
Solved from the comments of [#1131](jose-elias-alvarez/null-ls.nvim#1131).
  • Loading branch information
engeir committed Dec 9, 2022
1 parent 4f556e7 commit 18e8c17
Show file tree
Hide file tree
Showing 3 changed files with 48 additions and 44 deletions.
70 changes: 30 additions & 40 deletions nvim_lua/.config/nvim/lua/engeir/lsp/init.lua
Original file line number Diff line number Diff line change
@@ -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({
-- ["<C-d>"] = cmp.mapping.scroll_docs(-4),
-- ["<C-f>"] = cmp.mapping.scroll_docs(4),
-- ["<C-p>"] = cmp.mapping.select_prev_item(cmp_select),
-- ["<C-n>"] = cmp.mapping.select_next_item(cmp_select),
-- ["<C-y>"] = cmp.mapping.confirm({ select = true }),
-- ["<C-Space>"] = cmp.mapping.complete(),
-- ["<CR>"] = cmp.config.disable,
-- })
--
-- lsp.setup_nvim_cmp({
-- mapping = cmp_mappings
-- })

-- lsp.on_attach(function(client, bufnr)
-- local opts = { buffer = bufnr, remap = false }
Expand Down Expand Up @@ -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('<leader>rn', vim.lsp.buf.rename, '[R]e[n]ame')
nmap('<leader>ca', vim.lsp.buf.code_action, '[C]ode [A]ction')
nmap("<leader>rn", vim.lsp.buf.rename, "[R]e[n]ame")
nmap("<leader>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('<leader>ds', require('telescope.builtin').lsp_document_symbols, '[D]ocument [S]ymbols')
nmap('<leader>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("<leader>ds", require("telescope.builtin").lsp_document_symbols, "[D]ocument [S]ymbols")
nmap("<leader>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('<C-k>', vim.lsp.buf.signature_help, 'Signature Documentation')
vim.keymap.set('i', "<C-k>", vim.lsp.buf.signature_help, { buffer = bufnr, desc = "Signature Documentation" })
nmap("K", vim.lsp.buf.hover, "Hover Documentation")
nmap("<C-k>", vim.lsp.buf.signature_help, "Signature Documentation")
vim.keymap.set("i", "<C-k>", 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('<leader>D', vim.lsp.buf.type_definition, 'Type [D]efinition')
nmap('<leader>wa', vim.lsp.buf.add_workspace_folder, '[W]orkspace [A]dd Folder')
nmap('<leader>wr', vim.lsp.buf.remove_workspace_folder, '[W]orkspace [R]emove Folder')
nmap("gD", vim.lsp.buf.declaration, "[G]oto [D]eclaration")
nmap("<leader>D", vim.lsp.buf.type_definition, "Type [D]efinition")
nmap("<leader>wa", vim.lsp.buf.add_workspace_folder, "[W]orkspace [A]dd Folder")
nmap("<leader>wr", vim.lsp.buf.remove_workspace_folder, "[W]orkspace [R]emove Folder")
nmap("<leader>ws", vim.lsp.buf.workspace_symbol, "[W]orkspace [S]ymbol")
nmap('<leader>wl', function()
nmap("<leader>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("<leader>s", "<cmd>Format<CR>", "Format")
end)

lsp.setup()

cmp.setup({
completion = {
completeopt = 'menu,menuone,noinsert,noselect'
completeopt = "menu,menuone,noinsert,noselect",
},
mapping = lsp.defaults.cmp_mappings({
["<C-d>"] = cmp.mapping.scroll_docs(-4),
Expand All @@ -120,5 +110,5 @@ cmp.setup({
["<C-y>"] = cmp.mapping.confirm({ select = true }),
["<C-Space>"] = cmp.mapping.complete(),
["<CR>"] = cmp.mapping.confirm({ select = false }),
})
}),
})
19 changes: 15 additions & 4 deletions nvim_lua/.config/nvim/lua/engeir/lsp/null-ls.lua
Original file line number Diff line number Diff line change
@@ -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

Expand All @@ -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<motion>`.
sources = {
-- code_actions.gitsigns,
Expand All @@ -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
Expand All @@ -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,
})
3 changes: 3 additions & 0 deletions nvim_lua/.config/nvim/lua/engeir/plugins.lua
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,9 @@ return packer.startup(function(use)
-- Snippets
{ "L3MON4D3/LuaSnip" },
{ "rafamadriz/friendly-snippets" },

-- Extra
{ "jose-elias-alvarez/null-ls.nvim" },
},
})

Expand Down

0 comments on commit 18e8c17

Please sign in to comment.