diff options
| author | Damien DeVille <damien@ddeville.me> | 2021-07-03 13:46:15 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-07-03 13:46:15 -0700 |
| commit | e959244071dca8ec4ce488a7055d72d185471f15 (patch) | |
| tree | dc3dc9b5f02f5165da0aaa0576692ee6a7ae63ea /lua | |
| parent | [docgen] Update README.md (diff) | |
| download | nvim-lspconfig-e959244071dca8ec4ce488a7055d72d185471f15.tar nvim-lspconfig-e959244071dca8ec4ce488a7055d72d185471f15.tar.gz nvim-lspconfig-e959244071dca8ec4ce488a7055d72d185471f15.tar.bz2 nvim-lspconfig-e959244071dca8ec4ce488a7055d72d185471f15.tar.lz nvim-lspconfig-e959244071dca8ec4ce488a7055d72d185471f15.tar.xz nvim-lspconfig-e959244071dca8ec4ce488a7055d72d185471f15.tar.zst nvim-lspconfig-e959244071dca8ec4ce488a7055d72d185471f15.zip | |
fix(rust-analyzer): improve root directory detection
Diffstat (limited to 'lua')
| -rw-r--r-- | lua/lspconfig/rust_analyzer.lua | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/lua/lspconfig/rust_analyzer.lua b/lua/lspconfig/rust_analyzer.lua index 8e567b0f..20f35706 100644 --- a/lua/lspconfig/rust_analyzer.lua +++ b/lua/lspconfig/rust_analyzer.lua @@ -16,15 +16,20 @@ configs.rust_analyzer = { cmd = {"rust-analyzer"}; filetypes = {"rust"}; root_dir = function(fname) - local cargo_metadata = vim.fn.system("cargo metadata --no-deps --format-version 1") - local cargo_root = nil + local cargo_crate_dir = util.root_pattern("Cargo.toml")(fname) + local cmd = "cargo metadata --no-deps --format-version 1" + if cargo_crate_dir ~= nil then + cmd = cmd .. " --manifest-path " .. util.path.join(cargo_crate_dir, "Cargo.toml") + end + local cargo_metadata = vim.fn.system(cmd) + local cargo_workspace_dir = nil if vim.v.shell_error == 0 then - cargo_root = vim.fn.json_decode(cargo_metadata)["workspace_root"] + cargo_workspace_dir = vim.fn.json_decode(cargo_metadata)["workspace_root"] end - return cargo_root or - util.find_git_ancestor(fname) or + return cargo_workspace_dir or + cargo_crate_dir or util.root_pattern("rust-project.json")(fname) or - util.root_pattern("Cargo.toml")(fname) + util.find_git_ancestor(fname) end; settings = { ["rust-analyzer"] = {} |
