aboutsummaryrefslogtreecommitdiffstats
path: root/lua/lspconfig/rust_analyzer.lua
diff options
context:
space:
mode:
Diffstat (limited to 'lua/lspconfig/rust_analyzer.lua')
-rw-r--r--lua/lspconfig/rust_analyzer.lua12
1 files changed, 9 insertions, 3 deletions
diff --git a/lua/lspconfig/rust_analyzer.lua b/lua/lspconfig/rust_analyzer.lua
index 1ff1370a..6ba704b3 100644
--- a/lua/lspconfig/rust_analyzer.lua
+++ b/lua/lspconfig/rust_analyzer.lua
@@ -6,9 +6,15 @@ configs.rust_analyzer = {
cmd = {"rust-analyzer"};
filetypes = {"rust"};
root_dir = function(fname)
- return util.find_git_ancestor(fname) or
- util.root_pattern("rust-project.json")(fname) or
- util.root_pattern("Cargo.toml")(fname)
+ local cargo_metadata = vim.fn.system("cargo metadata --format-version 1")
+ local cargo_root = nil
+ if vim.v.shell_handler == 0 then
+ cargo_root = vim.fn.json_decode(cargo_metadata)["workspace_root"]
+ end
+ return cargo_root or
+ util.find_git_ancestor(fname) or
+ util.root_pattern("rust-project.json")(fname) or
+ util.root_pattern("Cargo.toml")(fname)
end;
settings = {
["rust-analyzer"] = {}