aboutsummaryrefslogtreecommitdiffstats
path: root/lua
diff options
context:
space:
mode:
authorMichael Lingelbach <m.j.lbach@gmail.com>2021-01-11 00:40:06 -0800
committerMichael Lingelbach <m.j.lbach@gmail.com>2021-01-11 01:00:55 -0800
commit0f90e9fbd3f2546f90e9b515fd44522e59916849 (patch)
tree3efa383d1a8f7e11cbcf33dffb07f2350481e3f4 /lua
parentMerge pull request #655 from ckipp01/metals (diff)
downloadnvim-lspconfig-0f90e9fbd3f2546f90e9b515fd44522e59916849.tar
nvim-lspconfig-0f90e9fbd3f2546f90e9b515fd44522e59916849.tar.gz
nvim-lspconfig-0f90e9fbd3f2546f90e9b515fd44522e59916849.tar.bz2
nvim-lspconfig-0f90e9fbd3f2546f90e9b515fd44522e59916849.tar.lz
nvim-lspconfig-0f90e9fbd3f2546f90e9b515fd44522e59916849.tar.xz
nvim-lspconfig-0f90e9fbd3f2546f90e9b515fd44522e59916849.tar.zst
nvim-lspconfig-0f90e9fbd3f2546f90e9b515fd44522e59916849.zip
rust_analyzer: read project root from cargo
Diffstat (limited to '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"] = {}