local utils = require('cosmic.utils') local lsp_utils = require('cosmic.utils.lsp') local user_config = require('cosmic.core.user') local M = {} local function toggle_inlay_hints(bufnr) local enabled = user_config.lsp.inlay_hint return function() enabled = not enabled vim.lsp.inlay_hint(bufnr, enabled) end end -- Mappings. function M.init(client, bufnr) local buf_map = utils.create_buf_map(bufnr, { noremap = false, }) buf_map('n', 'gd', 'lua vim.lsp.buf.definition()', { desc = 'Go to definition' }) buf_map('n', 'gD', 'lua vim.lsp.buf.declaration()', { desc = 'Go to declaration' }) buf_map('n', 'gi', 'lua vim.lsp.buf.implementation()', { desc = 'Go to implementation' }) buf_map('n', 'gt', 'lua vim.lsp.buf.type_definition()', { desc = 'Go to type definition' }) buf_map('n', 'gr', 'lua vim.lsp.buf.references()', { desc = 'Go to reference' }) -- diagnostics buf_map('n', '[g', 'lua vim.diagnostic.goto_prev()', { desc = 'Prev diagnostic' }) buf_map('n', ']g', 'lua vim.diagnostic.goto_next()', { desc = 'Next diagnostic' }) buf_map( 'n', 'ge', 'lua vim.diagnostic.open_float(nil, { scope = "line", })', { desc = 'Show current line diagnostic' } ) buf_map( 'n', 'ldb', 'lua vim.diagnostic.open_float(nil, { scope = "buffer", })', { desc = 'Show buffer diagnostics' } ) -- hover buf_map('n', 'K', 'lua vim.lsp.buf.hover()', { desc = 'Show documentation' }) -- inlay hints if client.supports_method('textDocument/inlayHint') then buf_map('n', 'lh', toggle_inlay_hints(bufnr), { desc = 'Toggle inlay hints for buffer' }) end -- code actions buf_map('n', 'gn', 'lua vim.lsp.buf.rename()', { desc = 'Rename' }) buf_map('n', 'la', 'lua vim.lsp.buf.code_actions()', { desc = 'Code Actions' }) buf_map('v', 'la', 'lua vim.lsp.buf.range_code_actions()', { desc = 'Range Code Actions' }) -- formatting buf_map('n', 'lf', '', { desc = 'Format', callback = lsp_utils.format }) buf_map('v', 'lf', 'lua vim.lsp.buf.range_formatting()', { desc = 'Range Format' }) -- lsp workspace buf_map('n', 'lwa', 'lua vim.lsp.buf.add_workspace_folder()', { desc = 'Add workspace folder' }) buf_map('n', 'lwr', 'lua vim.lsp.buf.remove_workspace_folder()', { desc = 'Remove workspace folder', }) buf_map( 'n', 'lwl', 'lua require("cosmic.utils.logger"):log(vim.inspect(vim.lsp.buf.list_workspace_folders()))', { desc = 'Show workspace folders' } ) end return M