The macros crate has depended on std and proc_macro since its introduction in commit 1fbde52bde73 ("rust: add `macros` crate"). These dependencies were omitted from commit 8c4555ccc55c ("scripts: add `generate_rust_analyzer.py`") resulting in missing go-to-definition and autocomplete, and false-positive warnings emitted from rust-analyzer such as: [{ "resource": "/Users/tamird/src/linux/rust/macros/module.rs", "owner": "_generated_diagnostic_collection_name_#1", "code": { "value": "non_snake_case", "target": { "$mid": 1, "path": "/rustc/", "scheme": "https", "authority": "doc.rust-lang.org", "query": "search=non_snake_case" } }, "severity": 4, "message": "Variable `None` should have snake_case name, e.g. `none`", "source": "rust-analyzer", "startLineNumber": 123, "startColumn": 17, "endLineNumber": 123, "endColumn": 21 }] Add the missing dependencies to improve the developer experience. [ Fiona had a different approach (thanks!) at: https://lore.kernel.org/rust-for-linux/20241205115438.234221-1-me@kloenk.dev/ But Tamir and Fiona agreed to this one. - Miguel ]
Unified · Split
| @@ -57,14 +57,26 @@ def generate_crates(srctree, objtree, sysroot_src, external_src, cfgs): · 56 unmodified lines | |||
| 57 | crates_indexes[display_name] = len(crates) | 57 | crates_indexes[display_name] = len(crates) |
| 58 | crates.append(crate) | 58 | crates.append(crate) |
| 59 | 59 | ||
| 60 | # First, the ones in `rust/` since they are a bit special. | 60 | def append_sysroot_crate( |
| 61 | append_crate( | 61 | display_name, |
| 62 | "core", | 62 | deps, |
| 63 | sysroot_src / "core" / "src" / "lib.rs", | 63 | cfg=[], |
| 64 | [], | 64 | ): |
| 65 | cfg=crates_cfgs.get("core", []), | 65 | append_crate( |
| 66 | is_workspace_member=False, | 66 | display_name, |
| 67 | ) | 67 | sysroot_src / display_name / "src" / "lib.rs", |
| 68 | deps, | ||
| 69 | cfg, | ||
| 70 | is_workspace_member=False, | ||
| 71 | ) | ||
| 72 | |||
| 73 | # NB: sysroot crates reexport items from one another so setting up our transitive dependencies | ||
| 74 | # here is important for ensuring that rust-analyzer can resolve symbols. The sources of truth | ||
| 75 | # for this dependency graph are `(sysroot_src / crate / "Cargo.toml" for crate in crates)`. | ||
| 76 | append_sysroot_crate("core", [], cfg=crates_cfgs.get("core", [])) | ||
| 77 | append_sysroot_crate("alloc", ["core"]) | ||
| 78 | append_sysroot_crate("std", ["alloc", "core"]) | ||
| 79 | append_sysroot_crate("proc_macro", ["core", "std"]) | ||
| 68 | 80 | ||
| 69 | append_crate( | 81 | append_crate( |
| 70 | "compiler_builtins", | 82 | "compiler_builtins", |
| @@ -75,7 +87,7 @@ def generate_crates(srctree, objtree, sysroot_src, external_src, cfgs): · 4 unmodified lines | |||
| 75 | append_crate( | 87 | append_crate( |
| 76 | "macros", | 88 | "macros", |
| 77 | srctree / "rust" / "macros" / "lib.rs", | 89 | srctree / "rust" / "macros" / "lib.rs", |
| 78 | [], | 90 | ["std", "proc_macro"], |
| 79 | is_proc_macro=True, | 91 | is_proc_macro=True, |
| 80 | ) | 92 | ) |
| 81 | 93 | ||