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 ]
Showing the changes to scripts (1 of 1 file). Show all
Unified · Split
| @@ -57,14 +57,26 @@ def generate_crates(srctree, objtree, sysroot_src, external_src, cfgs): · 56 unmodified lines | ||
| 57 | 57 | crates_indexes[display_name] = len(crates) |
| 58 | 58 | crates.append(crate) |
| 59 | 59 | |
| 60 | − # First, the ones in `rust/` since they are a bit special. | |
| 61 | − append_crate( | |
| 62 | − "core", | |
| 63 | − sysroot_src / "core" / "src" / "lib.rs", | |
| 64 | − [], | |
| 65 | − cfg=crates_cfgs.get("core", []), | |
| 66 | − is_workspace_member=False, | |
| 67 | − ) | |
| 60 | + def append_sysroot_crate( | |
| 61 | + display_name, | |
| 62 | + deps, | |
| 63 | + cfg=[], | |
| 64 | + ): | |
| 65 | + append_crate( | |
| 66 | + display_name, | |
| 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 | 81 | append_crate( |
| 70 | 82 | "compiler_builtins", |
| @@ -75,7 +87,7 @@ def generate_crates(srctree, objtree, sysroot_src, external_src, cfgs): · 4 unmodified lines | ||
| 75 | 87 | append_crate( |
| 76 | 88 | "macros", |
| 77 | 89 | srctree / "rust" / "macros" / "lib.rs", |
| 78 | − [], | |
| 90 | + ["std", "proc_macro"], | |
| 79 | 91 | is_proc_macro=True, |
| 80 | 92 | ) |
| 81 | 93 | |