aboutsummaryrefslogtreecommitdiffstats
path: root/lua
diff options
context:
space:
mode:
authorDamien DeVille <damien@ddeville.me>2021-07-03 13:46:15 -0700
committerGitHub <noreply@github.com>2021-07-03 13:46:15 -0700
commite959244071dca8ec4ce488a7055d72d185471f15 (patch)
treedc3dc9b5f02f5165da0aaa0576692ee6a7ae63ea /lua
parent[docgen] Update README.md (diff)
downloadnvim-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.lua17
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"] = {}