Swith to rustaceanvim and set up Rust debugging

This commit is contained in:
Vladan Popovic 2024-11-03 16:00:31 +01:00
parent 9259e7b2ba
commit b48b531d3d
3 changed files with 155 additions and 40 deletions

View file

@ -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
})

View 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"
}
}

View file

@ -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')