bazelbuild / bazelbuild/rules_rust
`rust_analyzer_aspect` emits the wrong crate root for mixed source/generated crates
- Dominant language
- Starlark
- Stars
- 843
- Forks
- 651
- Avg merge
- 2d 18h
- Merged PRs (30d)
- 15
Description
**Description**
For a Rust target whose `srcs` contains both a source crate root and a generated Rust file, `rust_analyzer_aspect` copies the sources into Bazel's output tree but sets `root_module` back to the workspace source file.
Relative `include!` and `mod` paths are resolved from the crate root's directory. The generated sibling exists beside the output-tree copy of the crate root, not beside the workspace source file, so rust-analyzer cannot resolve it. The generated local crate also has no `build` metadata.
**Reproduction steps**
`MODULE.bazel`:
```starlark
module(name = "rust_analyzer_generated_srcs_repro")
bazel_dep(name = "rules_rust", version = "0.73.0")
```
`BUILD.bazel`:
```starlark
load("@rules_rust//rust:defs.bzl", "rust_library")
genrule(
name = "generated",
outs = ["generated.rs"],
cmd = "echo 'pub fn generated() {}' > $@",
)
rust_library(
name = "mixed_sources",
srcs = [
"lib.rs",
":generated",
],
edition = "2021",
)
```
`lib.rs`:
```rust
include!("generated.rs");
```
Generate the rust-analyzer project:
```console
bazel run @rules_rust//tools/rust_analyzer:gen_rust_project -- //:mixed_sources
```
The command succeeds and generates `rust-project.json`. Both files needed by rust-analyzer exist together in the output tree:
```text
bazel-bin/lib.rs
bazel-bin/generated.rs
```
However, the `mixed_sources` entry in `rust-project.json` points the crate root at the workspace copy. Paths below are shortened for clarity:
```json
{
"root_module": "/path/to/repro/lib.rs",
"source": {
"include_dirs": [
"/path/to/repro/.",
"/path/to/execroot/_main/bazel-out/k8-fastbuild/bin"
]
}
}
```
There is no `generated.rs` beside `/path/to/repro/lib.rs`, and the crate entry has no `build` field.
**Impact**
rust-analyzer cannot resolve generated files referenced through relative `include!` or `mod` declarations in mixed source/generated crates. This causes missing or incorrect diagnostics, completion, navigation, and code-lens behavior even though the crate builds successfully with Bazel.
**Bazel and rules_rust version**
- Bazel: 9.2.0
- rules_rust: 0.73.0
Contributor guide
Assessment
This issue has not been assessed yet.