From 64d6fbfdbc75c18678ecc7bce51fbc2b9119004e Mon Sep 17 00:00:00 2001 From: Maciej Jur Date: Sun, 23 Jul 2023 01:34:24 +0200 Subject: [PATCH] (nvim) trailing whitespaces --- nvim/lua/configs/haskell-tools.lua | 35 +++++++++++++++++++++++++ nvim/lua/configs/lsp.lua | 41 ++++++++++++++++++++++++++++++ nvim/lua/global.lua | 23 +++++++++-------- nvim/lua/plugins.lua | 1 + 4 files changed, 89 insertions(+), 11 deletions(-) create mode 100644 nvim/lua/configs/haskell-tools.lua create mode 100644 nvim/lua/configs/lsp.lua diff --git a/nvim/lua/configs/haskell-tools.lua b/nvim/lua/configs/haskell-tools.lua new file mode 100644 index 0000000..f0ebf08 --- /dev/null +++ b/nvim/lua/configs/haskell-tools.lua @@ -0,0 +1,35 @@ +return function() + local ht = require('haskell-tools') + local def_opts = { noremap = true, silent = true, } + + ht.start_or_attach { + hls = { + on_attach = function(_, bufnr) + local opts = vim.tbl_extend('keep', def_opts, { buffer = bufnr, }) + -- haskell-language-server relies heavily on codeLenses, + -- so auto-refresh (see advanced configuration) is enabled by default + vim.keymap.set('n', 'ca', vim.lsp.codelens.run, opts) + vim.keymap.set('n', 'hs', ht.hoogle.hoogle_signature, opts) + vim.keymap.set('n', 'ea', ht.lsp.buf_eval_all, opts) + end, + }, + } + + -- Suggested keymaps that do not depend on haskell-language-server: + local bufnr = vim.api.nvim_get_current_buf() + -- set buffer = bufnr in ftplugin/haskell.lua + local opts = { noremap = true, silent = true, buffer = bufnr } + + -- Toggle a GHCi repl for the current package + vim.keymap.set('n', 'rr', ht.repl.toggle, opts) + -- Toggle a GHCi repl for the current buffer + vim.keymap.set('n', 'rf', function() + ht.repl.toggle(vim.api.nvim_buf_get_name(0)) + end, def_opts) + vim.keymap.set('n', 'rq', ht.repl.quit, opts) + + -- Detect nvim-dap launch configurations + -- (requires nvim-dap and haskell-debug-adapter) + -- ht.dap.discover_configurations(bufnr) +end + diff --git a/nvim/lua/configs/lsp.lua b/nvim/lua/configs/lsp.lua new file mode 100644 index 0000000..6a2c23d --- /dev/null +++ b/nvim/lua/configs/lsp.lua @@ -0,0 +1,41 @@ +return function() + -- Global mappings. + -- See `:help vim.diagnostic.*` for documentation on any of the below functions + vim.keymap.set('n', 'e', vim.diagnostic.open_float) + vim.keymap.set('n', '[d', vim.diagnostic.goto_prev) + vim.keymap.set('n', ']d', vim.diagnostic.goto_next) + vim.keymap.set('n', 'q', vim.diagnostic.setloclist) + + -- Use LspAttach autocommand to only map the following keys + -- after the language server attaches to the current buffer + vim.api.nvim_create_autocmd('LspAttach', { + group = vim.api.nvim_create_augroup('UserLspConfig', {}), + desc = "LSP actions", + callback = function(ev) + -- Enable completion triggered by + vim.bo[ev.buf].omnifunc = 'v:lua.vim.lsp.omnifunc' + + -- Buffer local mappings. + -- See `:help vim.lsp.*` for documentation on any of the below functions + local opts = { buffer = ev.buf } + vim.keymap.set('n', 'gD', vim.lsp.buf.declaration, opts) + vim.keymap.set('n', 'gd', vim.lsp.buf.definition, opts) + vim.keymap.set('n', 'K', vim.lsp.buf.hover, opts) + vim.keymap.set('n', 'gi', vim.lsp.buf.implementation, opts) + vim.keymap.set('n', '', vim.lsp.buf.signature_help, opts) + vim.keymap.set('n', 'wa', vim.lsp.buf.add_workspace_folder, opts) + vim.keymap.set('n', 'wr', vim.lsp.buf.remove_workspace_folder, opts) + vim.keymap.set('n', 'wl', function() + print(vim.inspect(vim.lsp.buf.list_workspace_folders())) + end, opts) + vim.keymap.set('n', 'D', vim.lsp.buf.type_definition, opts) + vim.keymap.set('n', 'rn', vim.lsp.buf.rename, opts) + vim.keymap.set({ 'n', 'v' }, 'ca', vim.lsp.buf.code_action, opts) + vim.keymap.set('n', 'gr', vim.lsp.buf.references, opts) + vim.keymap.set('n', 'f', function() + vim.lsp.buf.format { async = true } + end, opts) + end, + }) +end + diff --git a/nvim/lua/global.lua b/nvim/lua/global.lua index a70174d..15c1bd9 100644 --- a/nvim/lua/global.lua +++ b/nvim/lua/global.lua @@ -11,6 +11,18 @@ opt.expandtab = true -- Line numbers opt.number = true +-- Helper punctuation +vim.opt.list = true +vim.opt.listchars = { + trail = '·', + nbsp = '␣', + tab = '→→', +} + +-- Trailing whitespace +vim.fn.matchadd("errorMsg", [[\s\+$]]) +vim.api.nvim_create_autocmd("BufWritePre", { command = [[%s/\s\+$//e]] }) + vim.filetype.add({ extension = { mdx = "mdx", @@ -18,17 +30,6 @@ vim.filetype.add({ } }) --- LSP hotkeys -local cmds_lsp = vim.api.nvim_create_augroup("cmds_lsp", { clear = true }) -vim.api.nvim_create_autocmd("LspAttach", { - group = cmds_lsp, - desc = "LSP actions", - callback = function() - local buf_opts = { noremap = true, silent = true, buffer = true } - vim.keymap.set('n', 'K', vim.lsp.buf.hover, buf_opts) - vim.keymap.set('n', "rn", vim.lsp.buf.rename, buf_opts) - end -}) -- Workaround: https://github.com/neovim/neovim/issues/21856 vim.api.nvim_create_autocmd({ "VimLeave" }, { diff --git a/nvim/lua/plugins.lua b/nvim/lua/plugins.lua index 3c03c20..4249ac8 100644 --- a/nvim/lua/plugins.lua +++ b/nvim/lua/plugins.lua @@ -128,6 +128,7 @@ return { "neovim/nvim-lspconfig", -- TODO: config here -- https://github.com/neovim/nvim-lspconfig#suggested-configuration + config = require("configs/lsp"), }, -- Snippet engine