aboutsummaryrefslogtreecommitdiffstats
path: root/lua
diff options
context:
space:
mode:
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"] = {}