65 lines
2.2 KiB
Lua
65 lines
2.2 KiB
Lua
---@type RustaceanConfig
|
|
local config = require('rustaceanvim.config.internal')
|
|
|
|
if not vim.g.loaded_rustaceanvim then
|
|
require('rustaceanvim.config.check').check_for_lspconfig_conflict(vim.schedule_wrap(function(warn)
|
|
vim.notify_once(warn, vim.log.levels.WARN)
|
|
end))
|
|
vim.lsp.commands['rust-analyzer.runSingle'] = function(command)
|
|
local runnables = require('rustaceanvim.runnables')
|
|
local cached_commands = require('rustaceanvim.cached_commands')
|
|
---@type RARunnable[]
|
|
local ra_runnables = command.arguments
|
|
local runnable = ra_runnables[1]
|
|
local cargo_args = runnable.args.cargoArgs
|
|
if #cargo_args > 0 and vim.startswith(cargo_args[1], 'test') then
|
|
cached_commands.set_last_testable(1, ra_runnables)
|
|
end
|
|
cached_commands.set_last_runnable(1, ra_runnables)
|
|
runnables.run_command(1, ra_runnables)
|
|
end
|
|
|
|
vim.lsp.commands['rust-analyzer.gotoLocation'] = function(command, ctx)
|
|
local client = vim.lsp.get_client_by_id(ctx.client_id)
|
|
if client then
|
|
vim.lsp.util.jump_to_location(command.arguments[1], client.offset_encoding)
|
|
end
|
|
end
|
|
|
|
vim.lsp.commands['rust-analyzer.showReferences'] = function(_)
|
|
vim.lsp.buf.implementation()
|
|
end
|
|
|
|
vim.lsp.commands['rust-analyzer.debugSingle'] = function(command)
|
|
local overrides = require('rustaceanvim.overrides')
|
|
local args = command.arguments[1].args
|
|
overrides.sanitize_command_for_debugging(args.cargoArgs)
|
|
local cached_commands = require('rustaceanvim.cached_commands')
|
|
cached_commands.set_last_debuggable(args)
|
|
local rt_dap = require('rustaceanvim.dap')
|
|
rt_dap.start(args)
|
|
end
|
|
|
|
local commands = require('rustaceanvim.commands')
|
|
commands.create_rustc_command()
|
|
end
|
|
|
|
vim.g.loaded_rustaceanvim = true
|
|
|
|
local bufnr = vim.api.nvim_get_current_buf()
|
|
local auto_attach = config.server.auto_attach
|
|
if type(auto_attach) == 'function' then
|
|
auto_attach = auto_attach(bufnr)
|
|
end
|
|
|
|
if auto_attach then
|
|
-- Defer for a smoother experience on low-end devices
|
|
vim.api.nvim_create_autocmd('BufEnter', {
|
|
buffer = bufnr,
|
|
group = vim.api.nvim_create_augroup('RustaceanvimAttach', { clear = true }),
|
|
callback = function()
|
|
require('rustaceanvim.lsp').start()
|
|
end,
|
|
})
|
|
end
|