diff options
| author | jyn <github@jyn.dev> | 2025-02-23 22:07:09 -0500 |
|---|---|---|
| committer | jyn <github@jyn.dev> | 2025-02-23 22:07:09 -0500 |
| commit | 39667c5608c9683efd06107a8575d5763a0524c8 (patch) | |
| tree | 91656c154400cd9c9a4e4e6fb6ad33432f68e78a /src | |
| parent | 342ced97dbebb611b54c172e9ec7c0e9225dcb49 (diff) | |
| download | rust-39667c5608c9683efd06107a8575d5763a0524c8.tar.gz rust-39667c5608c9683efd06107a8575d5763a0524c8.zip | |
document how to setup RA for nvim automatically
Diffstat (limited to 'src')
| -rw-r--r-- | src/doc/rustc-dev-guide/src/building/suggested.md | 33 |
1 files changed, 29 insertions, 4 deletions
diff --git a/src/doc/rustc-dev-guide/src/building/suggested.md b/src/doc/rustc-dev-guide/src/building/suggested.md index 2c6c3fe1df8..77c9dc6e492 100644 --- a/src/doc/rustc-dev-guide/src/building/suggested.md +++ b/src/doc/rustc-dev-guide/src/building/suggested.md @@ -120,10 +120,35 @@ create a `.vim/coc-settings.json`. The settings can be edited with [`src/etc/rust_analyzer_settings.json`]. Another way is without a plugin, and creating your own logic in your -configuration. To do this you must translate the JSON to Lua yourself. The -translation is 1:1 and fairly straight-forward. It must be put in the -`["rust-analyzer"]` key of the setup table, which is [shown -here](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#rust_analyzer). +configuration. The following code will work for any checkout of rust-lang/rust (newer than Febuary 2025): + +```lua +lspconfig.rust_analyzer.setup { + root_dir = function() + default = lspconfig.rust_analyzer.config_def.default_config.root_dir() + -- the default root detection uses the cargo workspace root. + -- but for rust-lang/rust, the standard library is in its own workspace. + -- use the git root instead. + compiler_config = vim.fs.joinpath(default, "../src/bootstrap/defaults/config.compiler.toml") + if vim.fs.basename(default) == "library" and vim.uv.fs_stat(compiler_config) then + return vim.fs.dirname(default) + end + return default + end, + on_init = function(client) + local path = client.workspace_folders[1].name + config = vim.fs.joinpath(path, "src/etc/rust_analyzer_zed.json") + if vim.uv.fs_stat(config) then + -- load rust-lang/rust settings + file = io.open(config) + json = vim.json.decode(file:read("*a")) + client.config.settings["rust-analyzer"] = json.lsp["rust-analyzer"].initialization_options + client.notify("workspace/didChangeConfiguration", { settings = client.config.settings }) + end + return true + end +} +``` If you would like to use the build task that is described above, you may either make your own command in your config, or you can install a plugin such as |
