feat(mappings): decouple plugin lsp mappings
This commit is contained in:
parent
b86e01bd1c
commit
464f92b1cc
8 changed files with 74 additions and 23 deletions
|
@ -1,6 +1,6 @@
|
||||||
local cosmic_modules = {
|
local cosmic_modules = {
|
||||||
'cosmic.core.pluginsInit',
|
|
||||||
'cosmic.core.editor',
|
'cosmic.core.editor',
|
||||||
|
'cosmic.core.pluginsInit',
|
||||||
'cosmic.core.commands',
|
'cosmic.core.commands',
|
||||||
'cosmic.core.mappings',
|
'cosmic.core.mappings',
|
||||||
'cosmic.lsp',
|
'cosmic.lsp',
|
||||||
|
|
|
@ -18,6 +18,8 @@ local default_config = {
|
||||||
format_on_save = true, -- true/false or table of filetypes {'.ts', '.js',}
|
format_on_save = true, -- true/false or table of filetypes {'.ts', '.js',}
|
||||||
format_timeout = 3000,
|
format_timeout = 3000,
|
||||||
rename_notification = true,
|
rename_notification = true,
|
||||||
|
-- table of callbacks pushed via plugins
|
||||||
|
on_attach_mappings = {},
|
||||||
-- lsp servers that should be installed
|
-- lsp servers that should be installed
|
||||||
ensure_installed = {
|
ensure_installed = {
|
||||||
'astro',
|
'astro',
|
||||||
|
@ -59,6 +61,10 @@ local default_config = {
|
||||||
local u = require('cosmic.utils')
|
local u = require('cosmic.utils')
|
||||||
local config = u.merge(default_config, user_config)
|
local config = u.merge(default_config, user_config)
|
||||||
|
|
||||||
|
function config.lsp.add_on_attach_mapping(callback)
|
||||||
|
table.insert(config.lsp.on_attach_mappings, callback)
|
||||||
|
end
|
||||||
|
|
||||||
function config.lsp.can_client_format(client)
|
function config.lsp.can_client_format(client)
|
||||||
-- formatting enabled by default if server=true
|
-- formatting enabled by default if server=true
|
||||||
if config.lsp.servers[client.name] == true then
|
if config.lsp.servers[client.name] == true then
|
||||||
|
|
|
@ -1,40 +1,38 @@
|
||||||
local map = require('cosmic.utils').map
|
local u = require('cosmic.utils')
|
||||||
local M = {}
|
local M = {}
|
||||||
|
|
||||||
-- Mappings.
|
-- Mappings.
|
||||||
function M.init(client, bufnr)
|
function M.init(client, bufnr)
|
||||||
local function buf_map(mode, lhs, rhs)
|
local buf_map = u.create_buf_map({
|
||||||
map(mode, lhs, rhs, {
|
buffer = bufnr,
|
||||||
buffer = bufnr,
|
noremap = false,
|
||||||
})
|
})
|
||||||
end
|
|
||||||
|
|
||||||
buf_map('n', 'gd', '<cmd>lua require("telescope.builtin").lsp_definitions()<cr>')
|
buf_map('n', 'gd', '<cmd>lua vim.lsp.buf.definition()<cr>')
|
||||||
buf_map('n', 'gD', '<cmd>lua vim.lsp.buf.declaration()<cr>')
|
buf_map('n', 'gD', '<cmd>lua vim.lsp.buf.declaration()<cr>')
|
||||||
buf_map('n', 'gi', '<cmd>lua require("telescope.builtin").lsp_implementations()<cr>')
|
buf_map('n', 'gi', '<cmd>lua vim.lsp.buf.implementation()<cr>')
|
||||||
buf_map('n', 'gt', '<cmd>lua require("telescope.builtin").lsp_type_definitions()<cr>')
|
buf_map('n', 'gt', '<cmd>lua vim.lsp.buf.type_definition()<cr>')
|
||||||
buf_map('n', 'gr', '<cmd>lua require("telescope.builtin").lsp_references()<cr>')
|
buf_map('n', 'gr', '<cmd>lua vim.lsp.buf.references()<cr>')
|
||||||
buf_map('n', 'gn', '<cmd>lua require("cosmic-ui").rename()<cr>')
|
|
||||||
|
|
||||||
-- diagnostics
|
-- diagnostics
|
||||||
buf_map('n', '[g', '<cmd>lua vim.diagnostic.goto_prev()<cr>')
|
buf_map('n', '[g', '<cmd>lua vim.diagnostic.goto_prev()<cr>')
|
||||||
buf_map('n', ']g', '<cmd>lua vim.diagnostic.goto_next()<cr>')
|
buf_map('n', ']g', '<cmd>lua vim.diagnostic.goto_next()<cr>')
|
||||||
buf_map('n', 'ge', '<cmd>lua vim.diagnostic.open_float(nil, { scope = "line", })<cr>')
|
buf_map('n', 'ge', '<cmd>lua vim.diagnostic.open_float(nil, { scope = "line", })<cr>')
|
||||||
buf_map('n', '<leader>ge', '<cmd>Telescope diagnostics bufnr=0<cr>')
|
buf_map('n', '<leader>ge', '<cmd>lua vim.diagnostic.open_float(nil, { scope = "buffer", })<cr>')
|
||||||
|
|
||||||
-- hover
|
-- hover
|
||||||
buf_map('n', 'K', '<cmd>lua vim.lsp.buf.hover()<cr>')
|
buf_map('n', 'K', '<cmd>lua vim.lsp.buf.hover()<cr>')
|
||||||
|
|
||||||
-- code actions
|
-- code actions
|
||||||
buf_map('n', '<leader>ga', '<cmd>lua require("cosmic-ui").code_actions()<cr>')
|
buf_map('n', 'gn', '<cmd>lua vim.lsp.buf.rename()<cr>')
|
||||||
buf_map('v', '<leader>ga', '<cmd>lua require("cosmic-ui").range_code_actions()<cr>')
|
buf_map('n', '<leader>ga', '<cmd>lua vim.lsp.buf.code_actions()<cr>')
|
||||||
|
buf_map('v', '<leader>ga', '<cmd>lua vim.lsp.buf.range_code_actions()<cr>')
|
||||||
|
|
||||||
-- formatting
|
-- formatting
|
||||||
buf_map('n', '<leader>gf', '<cmd>lua vim.lsp.buf.formatting()<cr>')
|
buf_map('n', '<leader>gf', '<cmd>lua vim.lsp.buf.formatting()<cr>')
|
||||||
buf_map('v', '<leader>gf', '<cmd>lua vim.lsp.buf.range_formatting()<cr>')
|
buf_map('v', '<leader>gf', '<cmd>lua vim.lsp.buf.range_formatting()<cr>')
|
||||||
|
|
||||||
-- lsp workspace
|
-- lsp workspace
|
||||||
buf_map('n', '<leader>wd', '<cmd>Telescope diagnostics<cr>')
|
|
||||||
buf_map('n', '<leader>wa', '<cmd>lua vim.lsp.buf.add_workspace_folder()<cr>')
|
buf_map('n', '<leader>wa', '<cmd>lua vim.lsp.buf.add_workspace_folder()<cr>')
|
||||||
buf_map('n', '<leader>wr', '<cmd>lua vim.lsp.buf.remove_workspace_folder()<cr>')
|
buf_map('n', '<leader>wr', '<cmd>lua vim.lsp.buf.remove_workspace_folder()<cr>')
|
||||||
buf_map(
|
buf_map(
|
||||||
|
@ -42,13 +40,6 @@ function M.init(client, bufnr)
|
||||||
'<leader>wl',
|
'<leader>wl',
|
||||||
'<cmd>lua require("cosmic.utils.logger"):log(vim.inspect(vim.lsp.buf.list_workspace_folders()))<cr>'
|
'<cmd>lua require("cosmic.utils.logger"):log(vim.inspect(vim.lsp.buf.list_workspace_folders()))<cr>'
|
||||||
)
|
)
|
||||||
|
|
||||||
if client.name == 'tsserver' then
|
|
||||||
-- typescript helpers
|
|
||||||
buf_map('n', '<leader>gr', ':TSLspRenameFile<CR>')
|
|
||||||
buf_map('n', '<leader>go', ':TSLspOrganize<CR>')
|
|
||||||
buf_map('n', '<leader>gi', ':TSLspImportAll<CR>')
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
return M
|
return M
|
||||||
|
|
|
@ -38,7 +38,13 @@ function M.on_attach(client, bufnr)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- set up default mappings
|
||||||
require('cosmic.lsp.mappings').init(client, bufnr)
|
require('cosmic.lsp.mappings').init(client, bufnr)
|
||||||
|
|
||||||
|
-- set up any additional mappings/overrides from user config
|
||||||
|
for _, callback in pairs(user_config.lsp.on_attach_mappings) do
|
||||||
|
callback(client, bufnr)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
M.capabilities = capabilities
|
M.capabilities = capabilities
|
||||||
|
|
|
@ -13,6 +13,17 @@ return {
|
||||||
config = function()
|
config = function()
|
||||||
require('cosmic-ui').setup(u.merge(defaults, user_config.plugins.cosmic_ui or {}))
|
require('cosmic-ui').setup(u.merge(defaults, user_config.plugins.cosmic_ui or {}))
|
||||||
end,
|
end,
|
||||||
|
init = function()
|
||||||
|
user_config.lsp.add_on_attach_mapping(function(client, bufnr)
|
||||||
|
local buf_map = u.create_buf_map({
|
||||||
|
buffer = bufnr,
|
||||||
|
})
|
||||||
|
|
||||||
|
buf_map('n', 'gn', '<cmd>lua require("cosmic-ui").rename()<cr>')
|
||||||
|
buf_map('n', '<leader>ga', '<cmd>lua require("cosmic-ui").code_actions()<cr>')
|
||||||
|
buf_map('v', '<leader>ga', '<cmd>lua require("cosmic-ui").range_code_actions()<cr>')
|
||||||
|
end)
|
||||||
|
end,
|
||||||
event = 'VeryLazy',
|
event = 'VeryLazy',
|
||||||
enabled = not vim.tbl_contains(user_config.disable_builtin_plugins, 'cosmic-ui'),
|
enabled = not vim.tbl_contains(user_config.disable_builtin_plugins, 'cosmic-ui'),
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,20 @@
|
||||||
local user_config = require('cosmic.core.user')
|
local user_config = require('cosmic.core.user')
|
||||||
|
local u = require('cosmic.utils')
|
||||||
|
|
||||||
return {
|
return {
|
||||||
'jose-elias-alvarez/nvim-lsp-ts-utils',
|
'jose-elias-alvarez/nvim-lsp-ts-utils',
|
||||||
|
init = function()
|
||||||
|
user_config.lsp.add_on_attach_mapping(function(client, bufnr)
|
||||||
|
if client.name == 'tsserver' then
|
||||||
|
local buf_map = u.create_buf_map({
|
||||||
|
buffer = bufnr,
|
||||||
|
})
|
||||||
|
-- typescript helpers
|
||||||
|
buf_map('n', '<leader>gr', ':TSLspRenameFile<CR>')
|
||||||
|
buf_map('n', '<leader>go', ':TSLspOrganize<CR>')
|
||||||
|
buf_map('n', '<leader>gi', ':TSLspImportAll<CR>')
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
end,
|
||||||
enabled = not vim.tbl_contains(user_config.disable_builtin_plugins, 'nvim-lsp-ts-utils'),
|
enabled = not vim.tbl_contains(user_config.disable_builtin_plugins, 'nvim-lsp-ts-utils'),
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,7 +13,24 @@ return {
|
||||||
require('cosmic.plugins.telescope.config')
|
require('cosmic.plugins.telescope.config')
|
||||||
end,
|
end,
|
||||||
init = function()
|
init = function()
|
||||||
|
-- normal mappings
|
||||||
require('cosmic.plugins.telescope.mappings').init()
|
require('cosmic.plugins.telescope.mappings').init()
|
||||||
|
|
||||||
|
user_config.lsp.add_on_attach_mapping(function(client, bufnr)
|
||||||
|
local map = require('cosmic.utils').map
|
||||||
|
local function buf_map(mode, lhs, rhs)
|
||||||
|
map(mode, lhs, rhs, {
|
||||||
|
buffer = bufnr,
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
||||||
|
buf_map('n', 'gd', '<cmd>Telescope lsp_definitions<cr>')
|
||||||
|
buf_map('n', 'gi', '<cmd>Telescope lsp_implementations<cr>')
|
||||||
|
buf_map('n', 'gt', '<cmd>Telescope lsp_type_definitions<cr>')
|
||||||
|
buf_map('n', 'gr', '<cmd>Telescope lsp_references<cr>')
|
||||||
|
buf_map('n', '<leader>ge', '<cmd>Telescope diagnostics bufnr=0<cr>')
|
||||||
|
buf_map('n', '<leader>wd', '<cmd>Telescope diagnostics<cr>')
|
||||||
|
end)
|
||||||
end,
|
end,
|
||||||
cmd = { 'Telescope' },
|
cmd = { 'Telescope' },
|
||||||
keys = {
|
keys = {
|
||||||
|
|
|
@ -8,6 +8,12 @@ function M.map(mode, lhs, rhs, opts)
|
||||||
vim.keymap.set(mode, lhs, rhs, M.merge(defaults, opts or {}))
|
vim.keymap.set(mode, lhs, rhs, M.merge(defaults, opts or {}))
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function M.create_buf_map(opts)
|
||||||
|
return function(mode, lhs, rhs)
|
||||||
|
M.map(mode, lhs, rhs, opts or {})
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
function M.merge_list(tbl1, tbl2)
|
function M.merge_list(tbl1, tbl2)
|
||||||
for _, v in ipairs(tbl2) do
|
for _, v in ipairs(tbl2) do
|
||||||
table.insert(tbl1, v)
|
table.insert(tbl1, v)
|
||||||
|
|
Loading…
Add table
Reference in a new issue