/ nvim / lua / lsp / servers / rust.lua
rust.lua
 1  return {
 2    { 'simrat39/rust-tools.nvim', enabled = false },
 3    {
 4      'neovim/nvim-lspconfig',
 5      opts = {
 6        servers = {
 7          rust_analyzer = {},
 8          taplo = {
 9            keys = {
10              {
11                'K',
12                function()
13                  if vim.fn.expand('%:t') == 'Cargo.toml' and require('crates').popup_available() then
14                    require('crates').show_popup()
15                  else
16                    vim.lsp.buf.hover()
17                  end
18                end,
19                desc = 'Show Crate Documentation',
20              },
21            },
22          },
23        },
24        setup = {
25          rust_analyzer = function()
26            return true
27          end,
28        },
29      },
30    },
31    {
32      'Saecki/crates.nvim',
33      init = function()
34        local augroup = vim.api.nvim_create_augroup('CargoCrates', { clear = true })
35        vim.api.nvim_create_autocmd('BufRead', {
36          group = augroup,
37          pattern = 'Cargo.toml',
38          callback = function()
39            local crates = require('crates')
40            require('which-key').register({ ['<localleader>'] = { name = 'crates ' } }, {})
41  
42            vim.keymap.set('n', '<localleader>t', crates.toggle, { desc = 'toggle' })
43            vim.keymap.set('n', '<localleader>r', crates.reload, { desc = 'reload' })
44            vim.keymap.set('n', '<localleader>v', crates.show_versions_popup, { desc = 'show version popup' })
45            vim.keymap.set('n', '<localleader>k', crates.show_popup, { desc = 'show crate popup' })
46            vim.keymap.set('n', '<localleader>f', crates.show_features_popup, { desc = 'show features popup' })
47            vim.keymap.set('n', '<localleader>d', crates.show_dependencies_popup, { desc = 'show dependencies popup' })
48            vim.keymap.set('n', '<localleader>u', crates.update_crate, { desc = 'update' })
49            vim.keymap.set('v', '<localleader>u', crates.update_crates, { desc = 'update' })
50            vim.keymap.set('n', '<localleader>a', crates.update_all_crates, { desc = 'update all' })
51            vim.keymap.set('n', '<localleader>U', crates.upgrade_crate, { desc = 'upgrade' })
52            vim.keymap.set('v', '<localleader>U', crates.upgrade_crates, { desc = 'upgrade' })
53            vim.keymap.set('n', '<localleader>A', crates.upgrade_all_crates, { desc = 'upgrade all' })
54            vim.keymap.set('n', '<localleader>H', crates.open_homepage, { desc = 'open homepage' })
55            vim.keymap.set('n', '<localleader>R', crates.open_repository, { desc = 'open repository' })
56            vim.keymap.set('n', '<localleader>D', crates.open_documentation, { desc = 'open documentation' })
57            vim.keymap.set('n', '<localleader>C', crates.open_crates_io, { desc = 'open crates.io' })
58          end,
59        })
60      end,
61      opts = {
62        popup = {
63          autofocus = true,
64          border = 'rounded',
65        },
66      },
67    },
68  }