forked from nvim-lua/kickstart.nvim
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
add nvim-dap and separate nvim-lspconfig into own file
- Loading branch information
Showing
6 changed files
with
359 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,125 @@ | ||
return { | ||
'mfussenegger/nvim-dap', | ||
dependencies = { | ||
-- Runs prelaunchtask / postdebugtask if present | ||
{ 'stevearc/overseer.nvim', config = true }, | ||
}, | ||
keys = { | ||
{ '<F4>', '<CMD>DapTerminate<CR>', desc = 'DAP Terminate' }, | ||
{ | ||
'<F5>', | ||
function() | ||
-- (Re-)reads launch.json if present | ||
if vim.fn.filereadable '.vscode/launch.json' then | ||
require('dap.ext.vscode').load_launchjs(nil, { | ||
['codelldb'] = { 'c', 'cpp' }, | ||
['pwa-node'] = { 'typescript', 'javascript' }, | ||
}) | ||
end | ||
require('dap').continue() | ||
end, | ||
desc = 'DAP Continue', | ||
}, | ||
{ | ||
'<F17>', | ||
function() | ||
require('dap').run_last() | ||
end, | ||
desc = 'Run Last', | ||
}, | ||
{ | ||
'<F6>', | ||
function() | ||
require('dap').run_to_cursor() | ||
end, | ||
desc = 'Run to Cursor', | ||
}, | ||
{ | ||
'<F7>', | ||
function() | ||
require('dap').goto_() | ||
end, | ||
desc = 'Go to line (skip)', | ||
}, | ||
{ '<F9>', '<CMD>DapToggleBreakpoint<CR>', desc = 'Toggle Breakpoint' }, | ||
{ | ||
'<F21>', | ||
function() | ||
require('dap').set_breakpoint(vim.fn.input 'Breakpoint condition: ') | ||
end, | ||
desc = 'Breakpoint Condition', | ||
}, | ||
{ '<F10>', '<CMD>DapStepOver<CR>', desc = 'Step Over' }, | ||
{ '<F11>', '<CMD>DapStepInto<CR>', desc = 'Step Into' }, | ||
{ '<F12>', '<CMD>DapStepOut<CR>', desc = 'Step Out' }, | ||
}, | ||
config = function() | ||
require('nvim-dap').setup {} | ||
-- signs | ||
local sign = vim.fn.sign_define | ||
|
||
local dap_round_groups = { 'DapBreakpoint', 'DapBreakpointCondition', 'DapBreakpointRejected', 'DapLogPoint' } | ||
for _, group in pairs(dap_round_groups) do | ||
sign(group, { text = '●', texthl = group }) | ||
end | ||
|
||
local dap = require 'dap' | ||
|
||
-- Adapters | ||
-- C, C++, Rust | ||
dap.adapters.codelldb = { | ||
type = 'server', | ||
port = '${port}', | ||
executable = { | ||
command = 'codelldb', | ||
args = { '--port', '${port}' }, | ||
}, | ||
} | ||
-- JS, TS | ||
dap.adapters['pwa-node'] = { | ||
type = 'server', | ||
host = 'localhost', | ||
port = '${port}', | ||
executable = { | ||
command = 'js-debug-adapter', | ||
args = { '${port}' }, | ||
}, | ||
} | ||
-- Godot | ||
dap.adapters.godot = { | ||
type = 'server', | ||
host = '127.0.0.1', | ||
port = 6006, | ||
} | ||
|
||
-- get Rust types | ||
dap.configurations.rust = { | ||
{ | ||
name = 'Launch', | ||
type = 'codelldb', | ||
request = 'launch', | ||
-- ... the previous config goes here ..., | ||
initCommands = function() | ||
-- Find out where to look for the pretty printer Python module | ||
local rustc_sysroot = vim.fn.trim(vim.fn.system 'rustc --print sysroot') | ||
|
||
local script_import = 'command script import "' .. rustc_sysroot .. '/lib/rustlib/etc/lldb_lookup.py"' | ||
local commands_file = rustc_sysroot .. '/lib/rustlib/etc/lldb_commands' | ||
|
||
local commands = {} | ||
local file = io.open(commands_file, 'r') | ||
if file then | ||
for line in file:lines() do | ||
table.insert(commands, line) | ||
end | ||
file:close() | ||
end | ||
table.insert(commands, 1, script_import) | ||
|
||
return commands | ||
end, | ||
-- ..., | ||
}, | ||
} | ||
end, | ||
} |
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,232 @@ | ||
local keymap = vim.keymap.set | ||
|
||
return { -- LSP Configuration & Plugins | ||
'neovim/nvim-lspconfig', | ||
dependencies = { | ||
-- Automatically install LSPs and related tools to stdpath for Neovim | ||
{ 'williamboman/mason.nvim', config = true }, -- NOTE: Must be loaded before dependants | ||
'williamboman/mason-lspconfig.nvim', | ||
'WhoIsSethDaniel/mason-tool-installer.nvim', | ||
|
||
-- Useful status updates for LSP. | ||
-- NOTE: `opts = {}` is the same as calling `require('fidget').setup({})` | ||
{ 'j-hui/fidget.nvim', opts = {} }, | ||
|
||
-- `neodev` configures Lua LSP for your Neovim config, runtime and plugins | ||
-- used for completion, annotations and signatures of Neovim apis | ||
{ 'folke/neodev.nvim', opts = {} }, | ||
}, | ||
config = function() | ||
-- Brief aside: **What is LSP?** | ||
-- | ||
-- LSP is an initialism you've probably heard, but might not understand what it is. | ||
-- | ||
-- LSP stands for Language Server Protocol. It's a protocol that helps editors | ||
-- and language tooling communicate in a standardized fashion. | ||
-- | ||
-- In general, you have a "server" which is some tool built to understand a particular | ||
-- language (such as `gopls`, `lua_ls`, `rust_analyzer`, etc.). These Language Servers | ||
-- (sometimes called LSP servers, but that's kind of like ATM Machine) are standalone | ||
-- processes that communicate with some "client" - in this case, Neovim! | ||
-- | ||
-- LSP provides Neovim with features like: | ||
-- - Go to definition | ||
-- - Find references | ||
-- - Autocompletion | ||
-- - Symbol Search | ||
-- - and more! | ||
-- | ||
-- Thus, Language Servers are external tools that must be installed separately from | ||
-- Neovim. This is where `mason` and related plugins come into play. | ||
-- | ||
-- If you're wondering about lsp vs treesitter, you can check out the wonderfully | ||
-- and elegantly composed help section, `:help lsp-vs-treesitter` | ||
|
||
-- This function gets run when an LSP attaches to a particular buffer. | ||
-- That is to say, every time a new file is opened that is associated with | ||
-- an lsp (for example, opening `main.rs` is associated with `rust_analyzer`) this | ||
-- function will be executed to configure the current buffer | ||
vim.api.nvim_create_autocmd('LspAttach', { | ||
group = vim.api.nvim_create_augroup('kickstart-lsp-attach', { clear = true }), | ||
callback = function(event) | ||
-- NOTE: Remember that Lua is a real programming language, and as such it is possible | ||
-- to define small helper and utility functions so you don't have to repeat yourself. | ||
-- | ||
-- In this case, we create a function that lets us more easily define mappings specific | ||
-- for LSP related items. It sets the mode, buffer and description for us each time. | ||
local map = function(keys, func, desc) | ||
keymap('n', keys, func, { buffer = event.buf, desc = 'LSP: ' .. desc }) | ||
end | ||
|
||
-- Jump to the definition of the word under your cursor. | ||
-- This is where a variable was first declared, or where a function is defined, etc. | ||
-- To jump back, press <C-t>. | ||
map('gd', require('telescope.builtin').lsp_definitions, '[G]oto [D]efinition') | ||
|
||
-- Find references for the word under your cursor. | ||
map('gr', require('telescope.builtin').lsp_references, '[G]oto [R]eferences') | ||
|
||
-- Jump to the implementation of the word under your cursor. | ||
-- Useful when your language has ways of declaring types without an actual implementation. | ||
map('gI', require('telescope.builtin').lsp_implementations, '[G]oto [I]mplementation') | ||
|
||
-- Jump to the type of the word under your cursor. | ||
-- Useful when you're not sure what type a variable is and you want to see | ||
-- the definition of its *type*, not where it was *defined*. | ||
map('<leader>D', require('telescope.builtin').lsp_type_definitions, 'Type [D]efinition') | ||
|
||
-- Fuzzy find all the symbols in your current document. | ||
-- Symbols are things like variables, functions, types, etc. | ||
map('<leader>ds', require('telescope.builtin').lsp_document_symbols, '[D]ocument [S]ymbols') | ||
|
||
-- Fuzzy find all the symbols in your current workspace. | ||
-- Similar to document symbols, except searches over your entire project. | ||
map('<leader>ws', require('telescope.builtin').lsp_dynamic_workspace_symbols, '[W]orkspace [S]ymbols') | ||
|
||
-- Rename the variable under your cursor. | ||
-- Most Language Servers support renaming across files, etc. | ||
map('<leader>rn', vim.lsp.buf.rename, '[R]e[n]ame') | ||
|
||
-- Execute a code action, usually your cursor needs to be on top of an error | ||
-- or a suggestion from your LSP for this to activate. | ||
map('<leader>ca', vim.lsp.buf.code_action, '[C]ode [A]ction') | ||
|
||
-- Opens a popup that displays documentation about the word under your cursor | ||
-- See `:help K` for why this keymap. | ||
map('K', vim.lsp.buf.hover, 'Hover Documentation') | ||
|
||
-- WARN: This is not Goto Definition, this is Goto Declaration. | ||
-- For example, in C this would take you to the header. | ||
map('gD', vim.lsp.buf.declaration, '[G]oto [D]eclaration') | ||
|
||
-- The following two autocommands are used to highlight references of the | ||
-- word under your cursor when your cursor rests there for a little while. | ||
-- See `:help CursorHold` for information about when this is executed | ||
-- | ||
-- When you move your cursor, the highlights will be cleared (the second autocommand). | ||
local client = vim.lsp.get_client_by_id(event.data.client_id) | ||
if client and client.server_capabilities.documentHighlightProvider then | ||
local highlight_augroup = vim.api.nvim_create_augroup('kickstart-lsp-highlight', { clear = false }) | ||
vim.api.nvim_create_autocmd({ 'CursorHold', 'CursorHoldI' }, { | ||
buffer = event.buf, | ||
group = highlight_augroup, | ||
callback = vim.lsp.buf.document_highlight, | ||
}) | ||
|
||
vim.api.nvim_create_autocmd({ 'CursorMoved', 'CursorMovedI' }, { | ||
buffer = event.buf, | ||
group = highlight_augroup, | ||
callback = vim.lsp.buf.clear_references, | ||
}) | ||
end | ||
|
||
-- The following autocommand is used to enable inlay hints in your | ||
-- code, if the language server you are using supports them | ||
-- | ||
-- This may be unwanted, since they displace some of your code | ||
if client and client.server_capabilities.inlayHintProvider and vim.lsp.inlay_hint then | ||
map('<leader>th', function() | ||
vim.lsp.inlay_hint.enable(not vim.lsp.inlay_hint.is_enabled()) | ||
end, '[T]oggle Inlay [H]ints') | ||
end | ||
end, | ||
}) | ||
|
||
vim.api.nvim_create_autocmd('LspDetach', { | ||
group = vim.api.nvim_create_augroup('kickstart-lsp-detach', { clear = true }), | ||
callback = function(event) | ||
vim.lsp.buf.clear_references() | ||
vim.api.nvim_clear_autocmds { group = 'kickstart-lsp-highlight', buffer = event.buf } | ||
end, | ||
}) | ||
|
||
-- LSP servers and clients are able to communicate to each other what features they support. | ||
-- By default, Neovim doesn't support everything that is in the LSP specification. | ||
-- When you add nvim-cmp, luasnip, etc. Neovim now has *more* capabilities. | ||
-- So, we create new capabilities with nvim cmp, and then broadcast that to the servers. | ||
local capabilities = vim.lsp.protocol.make_client_capabilities() | ||
capabilities = vim.tbl_deep_extend('force', capabilities, require('cmp_nvim_lsp').default_capabilities()) | ||
|
||
-- Enable the following language servers | ||
-- Feel free to add/remove any LSPs that you want here. They will automatically be installed. | ||
-- | ||
-- Add any additional override configuration in the following tables. Available keys are: | ||
-- - cmd (table): Override the default command used to start the server | ||
-- - filetypes (table): Override the default list of associated filetypes for the server | ||
-- - capabilities (table): Override fields in capabilities. Can be used to disable certain LSP features. | ||
-- - settings (table): Override the default settings passed when initializing the server. | ||
-- For example, to see the options for `lua_ls`, you could go to: https://luals.github.io/wiki/settings/ | ||
local servers = { | ||
-- clangd = {}, | ||
gopls = {}, | ||
pyright = {}, | ||
rust_analyzer = { | ||
on_attach = function(_, bufnr) | ||
vim.lsp.inlay_hint.enable(bufnr) | ||
end, | ||
checkOnSave = { | ||
command = 'clippy', | ||
}, | ||
}, | ||
solargraph = { | ||
filetypes = { 'ruby' }, | ||
}, | ||
-- rubocop = {}, | ||
-- ... etc. See `:help lspconfig-all` for a list of all the pre-configured LSPs | ||
-- | ||
-- Some languages (like typescript) have entire language plugins that can be useful: | ||
-- https://github.com/pmizio/typescript-tools.nvim | ||
-- | ||
-- But for many setups, the LSP (`tsserver`) will work just fine | ||
tsserver = { | ||
filetypes = { 'html', 'typescript', 'typescriptreact', 'javascript', 'javascriptreact', 'typescript.tsx' }, | ||
}, | ||
emmet_language_server = { 'html' }, | ||
-- | ||
|
||
lua_ls = { | ||
-- cmd = {...}, | ||
-- filetypes = { ...}, | ||
-- capabilities = {}, | ||
settings = { | ||
Lua = { | ||
completion = { | ||
callSnippet = 'Replace', | ||
}, | ||
-- You can toggle below to ignore Lua_LS's noisy `missing-fields` warnings | ||
-- diagnostics = { disable = { 'missing-fields' } }, | ||
}, | ||
}, | ||
}, | ||
} | ||
|
||
-- Ensure the servers and tools above are installed | ||
-- To check the current status of installed tools and/or manually install | ||
-- other tools, you can run | ||
-- :Mason | ||
-- | ||
-- You can press `g?` for help in this menu. | ||
require('mason').setup() | ||
|
||
-- You can add other tools here that you want Mason to install | ||
-- for you, so that they are available from within Neovim. | ||
local ensure_installed = vim.tbl_keys(servers or {}) | ||
vim.list_extend(ensure_installed, { | ||
'stylua', -- Used to format Lua code | ||
}) | ||
require('mason-tool-installer').setup { ensure_installed = ensure_installed } | ||
|
||
require('mason-lspconfig').setup { | ||
handlers = { | ||
function(server_name) | ||
local server = servers[server_name] or {} | ||
-- This handles overriding only values explicitly passed | ||
-- by the server configuration above. Useful when disabling | ||
-- certain features of an LSP (for example, turning off formatting for tsserver) | ||
server.capabilities = vim.tbl_deep_extend('force', {}, capabilities, server.capabilities or {}) | ||
require('lspconfig')[server_name].setup(server) | ||
end, | ||
}, | ||
} | ||
end, | ||
} |