Extra rust tools for writing applications in neovim using the native lsp. This plugin adds extra functionality over rust analyzer.
neovim 0.5+
nvim-lspconfig
rust-analyzer
using vim-plug
Plug 'neovim/nvim-lspconfig'
Plug 'simrat39/rust-tools.nvim'
" Optional dependencies
Plug 'nvim-lua/popup.nvim'
Plug 'nvim-lua/plenary.nvim'
Plug 'nvim-telescope/telescope.nvim'
Look at the configuration information below to get started.
This plugin automatically sets up nvim-lspconfig for rust_analyzer for you, so there is no need to do that manually
local opts = {
tools = { -- rust-tools options
-- automatically set inlay hints (type hints)
-- There is an issue due to which the hints are not applied on the first
-- opened file. For now, write to the file to trigger a reapplication of
-- the hints or just run :RustSetInlayHints.
-- default: true
autoSetHints = true,
-- whether to show hover actions inside the hover window
-- this overrides the default hover handler so something like lspsaga.nvim's hover would be overriden by this
-- default: true
hover_with_actions = true,
-- These apply to the default RustRunnables command
runnables = {
-- whether to use telescope for selection menu or not
-- default: true
use_telescope = true
-- rest of the opts are forwarded to telescope
},
-- These apply to the default RustSetInlayHints command
inlay_hints = {
-- wheter to show parameter hints with the inlay hints or not
-- default: true
show_parameter_hints = true,
-- prefix for parameter hints
-- default: "<-"
parameter_hints_prefix = "<- ",
-- prefix for all the other hints (type, chaining)
-- default: "=>"
other_hints_prefix = "=> ",
-- whether to align to the lenght of the longest line in the file
max_len_align = false,
-- padding from the left if max_len_align is true
max_len_align_padding = 1,
-- whether to align to the extreme right or not
right_align = false,
-- padding from the right if right_align is true
right_align_padding = 7
},
hover_actions = {
-- the border that is used for the hover window
-- see vim.api.nvim_open_win()
border = {
{"╭", "FloatBorder"}, {"─", "FloatBorder"},
{"╮", "FloatBorder"}, {"│", "FloatBorder"},
{"╯", "FloatBorder"}, {"─", "FloatBorder"},
{"╰", "FloatBorder"}, {"│", "FloatBorder"}
},
-- whether the hover action window gets automatically focused
-- default: false
auto_focus = false
}
},
-- all the opts to send to nvim-lspconfig
-- these override the defaults set by rust-tools.nvim
-- see https://github.com/neovim/nvim-lspconfig/blob/master/CONFIG.md#rust_analyzer
server = {} -- rust-analyer options
}
require('rust-tools').setup(opts)
RustSetInlayHints
RustDisableInlayHints
RustToggleInlayHints
RustRunnables
RustExpandMacro
RustOpenCargo
RustParentModule
RustJoinLines
RustHoverActions
RustMoveItemDown
RustMoveItemUp
-- Command:
-- RustSetInlayHints
-- RustDisableInlayHints
-- RustToggleInlayHints
-- set inlay hints
require('rust-tools.inlay_hints').set_inlay_hints()
-- disable inlay hints
require('rust-tools.inlay_hints').disable_inlay_hints()
-- toggle inlay hints
require('rust-tools.inlay_hints').toggle_inlay_hints()
-- Command:
-- RustRunnables
require('rust-tools.runnables').runnables()
-- Command:
-- RustExpandMacro
require'rust-tools.expand_macro'.expand_macro()
-- Command:
-- RustMoveItemUp
-- RustMoveItemDown
local up = true -- true = move up, false = move down
require'rust-tools.move_item'.move_item(up)
-- Command:
-- RustHoverActions
require'rust-tools.hover_actions'.hover_actions()
-- Command:
-- RustOpenCargo
require'rust-tools.open_cargo_toml'.open_cargo_toml()
-- Command:
-- RustParentModule
require'rust-tools.parent_module'.parent_module()
-- Command:
-- RustJoinLines
require'rust-tools.join_lines'.join_lines()
This plugin draws inspiration from akinsho/flutter-tools.nvim