For non-Cargo projects, rust-analyzer depends on a rust-project.json
file at the root of the project that describes its structure. The rust_analyzer
rule facilitates generating such a file.
First, add the following to the WORKSPACE
file:
load("@rules_rust//tools/rust_analyzer:deps.bzl", "rust_analyzer_deps") rust_analyzer_deps()
Next, add the following lines to the .bazelrc
file of your workspace:
build --repo_env=RULES_RUST_TOOLCHAIN_INCLUDE_RUSTC_SRCS=true
This will ensure rust source code is available to rust-analyzer
. Users can also set include_rustc_srcs = True
on any rust_repository
or rust_repositories
calls in the workspace but the environment variable has higher priority and can override the attribute.
Finally, run bazel run @rules_rust//tools/rust_analyzer:gen_rust_project
whenever dependencies change to regenerate the rust-project.json
file. It should be added to .gitignore
because it is effectively a build artifact. Once the rust-project.json
has been generated in the project root, rust-analyzer can pick it up upon restart.
To set this up using VSCode, users should first install the rust_analyzer plugin. With that in place, the following task can be added to the .vscode/tasks.json
file of the workspace to ensure a rust-project.json
file is created and up to date when the editor is opened.
{ "version": "2.0.0", "tasks": [ { "label": "Generate rust-project.json", "command": "bazel", "args": ["run", "@rules_rust//tools/rust_analyzer:gen_rust_project"], "options": { "cwd": "${workspaceFolder}" }, "group": "build", "problemMatcher": [], "presentation": { "reveal": "never", "panel": "dedicated", }, "runOptions": { "runOn": "folderOpen" } }, ] }
Deprecated: gen_rust_project can now create a rust-project.json without a rust_analyzer rule.
ATTRIBUTES
Name | Description | Type | Mandatory | Default |
---|---|---|---|---|
name | A unique name for this target. | Name | required | |
targets | List of all targets to be included in the index | List of labels | optional | [] |
Annotates rust rules with RustAnalyzerInfo later used to build a rust-project.json
ASPECT ATTRIBUTES
Name | Type |
---|---|
deps | String |
proc_macro_deps | String |
crate | String |
actual | String |
ATTRIBUTES
Name | Description | Type | Mandatory | Default |
---|---|---|---|---|
name | A unique name for this target. | Name | required |