Swith to rustaceanvim and set up Rust debugging
This commit is contained in:
parent
9259e7b2ba
commit
b48b531d3d
3 changed files with 155 additions and 40 deletions
|
@ -19,7 +19,6 @@ local common_on_attach = function(client, bufnr)
|
||||||
end,
|
end,
|
||||||
})
|
})
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Use vim's default coloring.
|
-- Use vim's default coloring.
|
||||||
client.server_capabilities.semanticTokensProvider = nil
|
client.server_capabilities.semanticTokensProvider = nil
|
||||||
for _, group in ipairs(vim.fn.getcompletion("@lsp", "highlight")) do
|
for _, group in ipairs(vim.fn.getcompletion("@lsp", "highlight")) do
|
||||||
|
@ -27,29 +26,29 @@ local common_on_attach = function(client, bufnr)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
local nvim_lsp = require('lspconfig')
|
-- LSP diagnostics.
|
||||||
local capabilities = vim.lsp.protocol.make_client_capabilities()
|
vim.lsp.handlers["textDocument/publishDiagnostics"] =
|
||||||
|
vim.lsp.with(vim.lsp.diagnostic.on_publish_diagnostics, {
|
||||||
|
virtual_text = false,
|
||||||
|
underline = true,
|
||||||
|
signs = true,
|
||||||
|
update_in_insert = false
|
||||||
|
})
|
||||||
|
|
||||||
-- LSPs
|
-- Setup rust outside of lspconfig.
|
||||||
local servers = {
|
vim.g.rustaceanvim = function()
|
||||||
"clangd",
|
return {
|
||||||
"gleam",
|
-- Plugin configuration.
|
||||||
"lua_ls",
|
tools = {
|
||||||
"ocamllsp",
|
},
|
||||||
"pyright",
|
-- LSP configuration.
|
||||||
"rnix",
|
server = {
|
||||||
"terraformls",
|
on_attach = function(client, bufnr)
|
||||||
"vimls",
|
common_on_attach(client, bufnr)
|
||||||
}
|
end,
|
||||||
for _, lsp in ipairs(servers) do
|
default_settings = {
|
||||||
nvim_lsp[lsp].setup { capabilities = capabilities, on_attach = common_on_attach }
|
-- rust-analyzer language server configuration
|
||||||
end
|
['rust-analyzer'] = {
|
||||||
|
|
||||||
nvim_lsp.rust_analyzer.setup({
|
|
||||||
on_attach = common_on_attach,
|
|
||||||
capabilities = capabilities,
|
|
||||||
settings = {
|
|
||||||
["rust-analyzer"] = {
|
|
||||||
imports = {
|
imports = {
|
||||||
granularity = {
|
granularity = {
|
||||||
group = "module",
|
group = "module",
|
||||||
|
@ -67,9 +66,31 @@ nvim_lsp.rust_analyzer.setup({
|
||||||
checkOnSave = {
|
checkOnSave = {
|
||||||
command = "clippy",
|
command = "clippy",
|
||||||
},
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
-- DAP configuration.
|
||||||
|
dap = {
|
||||||
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
end
|
||||||
|
|
||||||
|
local nvim_lsp = require('lspconfig')
|
||||||
|
local capabilities = vim.lsp.protocol.make_client_capabilities()
|
||||||
|
|
||||||
|
-- LSPs
|
||||||
|
local servers = {
|
||||||
|
"clangd",
|
||||||
|
"lua_ls",
|
||||||
|
"ocamllsp",
|
||||||
|
"pyright",
|
||||||
|
"rnix",
|
||||||
|
"terraformls",
|
||||||
|
"vimls",
|
||||||
|
}
|
||||||
|
for _, lsp in ipairs(servers) do
|
||||||
|
nvim_lsp[lsp].setup { capabilities = capabilities, on_attach = common_on_attach }
|
||||||
|
end
|
||||||
|
|
||||||
nvim_lsp.ruff.setup({
|
nvim_lsp.ruff.setup({
|
||||||
on_attach = function (client)
|
on_attach = function (client)
|
||||||
|
@ -84,12 +105,3 @@ nvim_lsp.ruff.setup({
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
-- LSP diagnostics.
|
|
||||||
vim.lsp.handlers["textDocument/publishDiagnostics"] =
|
|
||||||
vim.lsp.with(vim.lsp.diagnostic.on_publish_diagnostics, {
|
|
||||||
virtual_text = false,
|
|
||||||
underline = true,
|
|
||||||
signs = true,
|
|
||||||
update_in_insert = false
|
|
||||||
})
|
|
||||||
|
|
87
dotfiles/.config/nvim/lua/plugins/dap.lua
Normal file
87
dotfiles/.config/nvim/lua/plugins/dap.lua
Normal file
|
@ -0,0 +1,87 @@
|
||||||
|
local dap, dapui = require('dap'), require('dapui')
|
||||||
|
|
||||||
|
-- Open dapui once dap starts.
|
||||||
|
dapui.setup()
|
||||||
|
dap.listeners.before.attach.dapui_config = function()
|
||||||
|
dapui.open()
|
||||||
|
end
|
||||||
|
dap.listeners.before.launch.dapui_config = function()
|
||||||
|
dapui.open()
|
||||||
|
end
|
||||||
|
dap.listeners.before.event_terminated.dapui_config = function()
|
||||||
|
dapui.close()
|
||||||
|
end
|
||||||
|
dap.listeners.before.event_exited.dapui_config = function()
|
||||||
|
dapui.close()
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Keybindings used in probably all editors/IDEs.
|
||||||
|
vim.keymap.set('n', '<F5>', dap.continue)
|
||||||
|
vim.keymap.set('n', '<F10>', dap.step_over)
|
||||||
|
vim.keymap.set('n', '<F11>', dap.step_into)
|
||||||
|
vim.keymap.set('n', '<F12>', dap.step_out)
|
||||||
|
-- Breakpoints.
|
||||||
|
vim.keymap.set('n', '<Leader>b', dap.toggle_breakpoint)
|
||||||
|
vim.keymap.set('n', '<Leader>B', dap.set_breakpoint)
|
||||||
|
vim.keymap.set('n', '<Leader>lp', function() dap.set_breakpoint(nil, nil, vim.fn.input('Log point message: ')) end)
|
||||||
|
-- Repl, run and dap-ui bindings.
|
||||||
|
vim.keymap.set('n', '<Leader>dr', dap.repl.open)
|
||||||
|
vim.keymap.set('n', '<Leader>dl', dap.run_last)
|
||||||
|
vim.keymap.set({'n', 'v'}, '<Leader>dh', function() require('dap.ui.widgets').hover() end)
|
||||||
|
vim.keymap.set({'n', 'v'}, '<Leader>dp', function() require('dap.ui.widgets').preview() end)
|
||||||
|
vim.keymap.set('n', '<Leader>df', function() local widgets = require('dap.ui.widgets') widgets.centered_float(widgets.frames) end)
|
||||||
|
vim.keymap.set('n', '<Leader>ds', function() local widgets = require('dap.ui.widgets') widgets.centered_float(widgets.scopes) end)
|
||||||
|
|
||||||
|
-- Set up lldb (LLVM debugger)
|
||||||
|
-- Install archlinux: sudo pacman -S lldb
|
||||||
|
-- Install ubuntu: sudo apt
|
||||||
|
dap.adapters.lldb = {
|
||||||
|
type = 'server',
|
||||||
|
port = "${port}",
|
||||||
|
executable = {
|
||||||
|
command = '/usr/bin/lldb-dap',
|
||||||
|
args = { "--port", "${port}" },
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
-- Custom debuggable build runs (on top of rust-analyzer debuggables).
|
||||||
|
local ExecTypes = {
|
||||||
|
TEST = "cargo build --tests -q --message-format=json",
|
||||||
|
BIN = "cargo build -q --message-format=json"
|
||||||
|
}
|
||||||
|
local function runBuild(type)
|
||||||
|
local lines = vim.fn.systemlist(type)
|
||||||
|
local output = table.concat(lines, "\n")
|
||||||
|
local filename = output:match('^.*"executable":"(.*)",.*\n.*,"success":true}$')
|
||||||
|
|
||||||
|
if filename == nil then
|
||||||
|
return error("failed to build cargo project")
|
||||||
|
end
|
||||||
|
|
||||||
|
return filename
|
||||||
|
end
|
||||||
|
-- Custom debuggable configurations.
|
||||||
|
dap.configurations.rust = {
|
||||||
|
{
|
||||||
|
name = "Debug Test",
|
||||||
|
type = "lldb",
|
||||||
|
request = "launch",
|
||||||
|
program = function ()
|
||||||
|
return runBuild(ExecTypes.TEST)
|
||||||
|
end,
|
||||||
|
cwd = "${workspaceFolder}",
|
||||||
|
stopOnEntry = false,
|
||||||
|
showDisassembly = "never"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name = "Debug Bin",
|
||||||
|
type = "lldb",
|
||||||
|
request = "launch",
|
||||||
|
program = function ()
|
||||||
|
return runBuild(ExecTypes.BIN)
|
||||||
|
end,
|
||||||
|
cwd = "${workspaceFolder}",
|
||||||
|
stopOnEntry = false,
|
||||||
|
showDisassembly = "never"
|
||||||
|
}
|
||||||
|
}
|
|
@ -38,14 +38,29 @@ require('packer').startup(function()
|
||||||
-- LSP and related
|
-- LSP and related
|
||||||
use { 'neovim/nvim-lspconfig' }
|
use { 'neovim/nvim-lspconfig' }
|
||||||
use { 'aznhe21/actions-preview.nvim' }
|
use { 'aznhe21/actions-preview.nvim' }
|
||||||
use { 'folke/trouble.nvim' } -- lsp diagnostics
|
use { 'folke/trouble.nvim' } -- diagnostics
|
||||||
|
|
||||||
-- Plugins to extend builtin language support
|
-- Plugins to extend builtin lsp
|
||||||
use { 'cespare/vim-toml' }
|
use { 'cespare/vim-toml' }
|
||||||
use { 'gleam-lang/gleam.vim' }
|
use { 'gleam-lang/gleam.vim' }
|
||||||
use { 'rust-lang/rust.vim' }
|
|
||||||
use { 'folke/neodev.nvim' }
|
use { 'folke/neodev.nvim' }
|
||||||
use { 'hashivim/vim-terraform' }
|
use { 'hashivim/vim-terraform' }
|
||||||
|
use {
|
||||||
|
'mrcjkb/rustaceanvim',
|
||||||
|
requires = {
|
||||||
|
'mfussenegger/nvim-dap'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
-- Debugging
|
||||||
|
use { 'mfussenegger/nvim-dap' }
|
||||||
|
use {
|
||||||
|
"rcarriga/nvim-dap-ui",
|
||||||
|
requires = {
|
||||||
|
"mfussenegger/nvim-dap",
|
||||||
|
"nvim-neotest/nvim-nio",
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
-- Git
|
-- Git
|
||||||
use {
|
use {
|
||||||
|
@ -70,6 +85,7 @@ end)
|
||||||
|
|
||||||
require('plugins.catppuccin')
|
require('plugins.catppuccin')
|
||||||
require('plugins.cmp')
|
require('plugins.cmp')
|
||||||
|
require('plugins.dap')
|
||||||
require('plugins.gitsigns')
|
require('plugins.gitsigns')
|
||||||
require('plugins.luasnip_config')
|
require('plugins.luasnip_config')
|
||||||
require('plugins.neogit')
|
require('plugins.neogit')
|
||||||
|
|
Loading…
Reference in a new issue