From 18c4971497ef0d9185d5543c78d2510bf3ef61a6 Mon Sep 17 00:00:00 2001 From: Matt Leong Date: Tue, 21 Dec 2021 10:41:26 -0800 Subject: [PATCH] feat(mappings): attach lsp mappings to buffers only --- lua/cosmic/core/mappings.lua | 1 - lua/cosmic/lsp/mappings.lua | 78 ++++++++++++++------------- lua/cosmic/lsp/providers/defaults.lua | 2 + lua/cosmic/utils/init.lua | 14 ++++- 4 files changed, 57 insertions(+), 38 deletions(-) diff --git a/lua/cosmic/core/mappings.lua b/lua/cosmic/core/mappings.lua index be2ee7f..417e23c 100644 --- a/lua/cosmic/core/mappings.lua +++ b/lua/cosmic/core/mappings.lua @@ -16,4 +16,3 @@ require('cosmic.plugins.auto-session.mappings') require('cosmic.plugins.telescope.mappings').init() require('cosmic.plugins.nvim-tree.mappings') require('cosmic.plugins.terminal.mappings') -require('cosmic.lsp.mappings') diff --git a/lua/cosmic/lsp/mappings.lua b/lua/cosmic/lsp/mappings.lua index f5efdcf..9e1a301 100644 --- a/lua/cosmic/lsp/mappings.lua +++ b/lua/cosmic/lsp/mappings.lua @@ -1,46 +1,52 @@ -local map = require('cosmic.utils').map +local buf_map = require('cosmic.utils').buf_map +local M = {} -- Mappings. --- See `:help vim.lsp.*` for documentation on any of the below functions -map('n', 'gd', 'lua require("telescope.builtin").lsp_definitions()') -map('n', 'gD', 'lua vim.lsp.buf.declaration()') -map('n', 'gi', 'lua require("telescope.builtin").lsp_implementations()') -map('n', 'gt', 'lua require("telescope.builtin").lsp_type_definitions()') -map('n', 'gr', 'lua require("telescope.builtin").lsp_references()') -map('n', 'gn', 'lua require("cosmic-ui").rename()') +function M.init(bufnr) + -- See `:help vim.lsp.*` for documentation on any of the below functions + buf_map(bufnr, 'n', 'gd', 'lua require("telescope.builtin").lsp_definitions()') + buf_map(bufnr, 'n', 'gD', 'lua vim.lsp.buf.declaration()') + buf_map(bufnr, 'n', 'gi', 'lua require("telescope.builtin").lsp_implementations()') + buf_map(bufnr, 'n', 'gt', 'lua require("telescope.builtin").lsp_type_definitions()') + buf_map(bufnr, 'n', 'gr', 'lua require("telescope.builtin").lsp_references()') + buf_map(bufnr, 'n', 'gn', 'lua require("cosmic-ui").rename()') --- diagnostics -map('n', '[g', 'lua vim.diagnostic.goto_prev()') -map('n', ']g', 'lua vim.diagnostic.goto_next()') -map('n', 'ge', 'lua vim.diagnostic.open_float(nil, { scope = "line", })') -map('n', 'ge', 'Telescope diagnostics bufnr=0') + -- diagnostics + buf_map(bufnr, 'n', '[g', 'lua vim.diagnostic.goto_prev()') + buf_map(bufnr, 'n', ']g', 'lua vim.diagnostic.goto_next()') + buf_map(bufnr, 'n', 'ge', 'lua vim.diagnostic.open_float(nil, { scope = "line", })') + buf_map(bufnr, 'n', 'ge', 'Telescope diagnostics bufnr=0') --- hover -map('n', 'K', 'lua vim.lsp.buf.hover()') + -- hover + buf_map(bufnr, 'n', 'K', 'lua vim.lsp.buf.hover()') --- code actions -map('n', 'ga', 'lua require("cosmic-ui").code_actions()') -map('v', 'ga', 'lua require("cosmic-ui").range_code_actions()') + -- code actions + buf_map(bufnr, 'n', 'ga', 'lua require("cosmic-ui").code_actions()') + buf_map(bufnr, 'v', 'ga', 'lua require("cosmic-ui").range_code_actions()') --- formatting -map('n', 'gf', 'lua vim.lsp.buf.formatting()') -map('v', 'gf', 'lua vim.lsp.buf.range_formatting()') + -- formatting + buf_map(bufnr, 'n', 'gf', 'lua vim.lsp.buf.formatting()') + buf_map(bufnr, 'v', 'gf', 'lua vim.lsp.buf.range_formatting()') --- signature help -map('n', '', 'lua require("lsp_signature").signature()') + -- signature help + buf_map(bufnr, 'n', '', 'lua require("lsp_signature").signature()') --- lsp workspace -map('n', 'wd', 'Telescope diagnostics') -map('n', 'wa', 'lua vim.lsp.buf.add_workspace_folder()') -map('n', 'wr', 'lua vim.lsp.buf.remove_workspace_folder()') -map( - 'n', - 'wl', - 'lua require("cosmic.utils.logger"):log(vim.inspect(vim.lsp.buf.list_workspace_folders()))' -) + -- lsp workspace + buf_map(bufnr, 'n', 'wd', 'Telescope diagnostics') + buf_map(bufnr, 'n', 'wa', 'lua vim.lsp.buf.add_workspace_folder()') + buf_map(bufnr, 'n', 'wr', 'lua vim.lsp.buf.remove_workspace_folder()') + buf_map( + bufnr, + 'n', + 'wl', + 'lua require("cosmic.utils.logger"):log(vim.inspect(vim.lsp.buf.list_workspace_folders()))' + ) --- typescript helpers -map('n', 'gr', ':TSLspRenameFile') -map('n', 'go', ':TSLspOrganize') -map('n', 'gi', ':TSLspImportAll') + -- typescript helpers + buf_map(bufnr, 'n', 'gr', ':TSLspRenameFile') + buf_map(bufnr, 'n', 'go', ':TSLspOrganize') + buf_map(bufnr, 'n', 'gi', ':TSLspImportAll') +end + +return M diff --git a/lua/cosmic/lsp/providers/defaults.lua b/lua/cosmic/lsp/providers/defaults.lua index 5872811..7080a22 100644 --- a/lua/cosmic/lsp/providers/defaults.lua +++ b/lua/cosmic/lsp/providers/defaults.lua @@ -36,6 +36,8 @@ function M.on_attach(client, bufnr) client.resolved_capabilities.document_formatting = false client.resolved_capabilities.document_range_formatting = false end + + require('cosmic.lsp.mappings').init(bufnr) end M.flags = { diff --git a/lua/cosmic/utils/init.lua b/lua/cosmic/utils/init.lua index 34d9c13..bf87f2b 100644 --- a/lua/cosmic/utils/init.lua +++ b/lua/cosmic/utils/init.lua @@ -4,11 +4,23 @@ local M = {} function M.map(mode, lhs, rhs, opts) local options = { noremap = true, silent = true } if opts then - options = vim.tbl_extend('force', options, opts) + options = M.merge(options, opts) end vim.api.nvim_set_keymap(mode, lhs, rhs, options) end +function M.buf_map(bufnr, mode, lhs, rhs, opts) + local options = { noremap = true, silent = true } + if opts then + options = M.merge(options, opts) + end + vim.api.nvim_buf_set_keymap(bufnr, mode, lhs, rhs, options) +end + +M.merge = function(...) + return vim.tbl_deep_extend('force', ...) +end + function M.split(str, sep) local res = {} for w in str:gmatch('([^' .. sep .. ']*)') do