6 use base_db::{CrateGraph, FileId};
7 use cfg::{CfgAtom, CfgDiff};
8 use expect_test::{expect, Expect};
9 use paths::{AbsPath, AbsPathBuf};
10 use serde::de::DeserializeOwned;
13 CargoWorkspace, CfgOverrides, ProjectJson, ProjectJsonData, ProjectWorkspace, Sysroot,
14 WorkspaceBuildScripts,
17 fn load_cargo(file: &str) -> CrateGraph {
18 load_cargo_with_overrides(file, CfgOverrides::default())
21 fn load_cargo_with_overrides(file: &str, cfg_overrides: CfgOverrides) -> CrateGraph {
22 let meta = get_test_json_file(file);
23 let cargo_workspace = CargoWorkspace::new(meta);
24 let project_workspace = ProjectWorkspace::Cargo {
25 cargo: cargo_workspace,
26 build_scripts: WorkspaceBuildScripts::default(),
29 rustc_cfg: Vec::new(),
32 to_crate_graph(project_workspace)
35 fn load_rust_project(file: &str) -> CrateGraph {
36 let data = get_test_json_file(file);
37 let project = rooted_project_json(data);
38 let sysroot = Some(get_fake_sysroot());
39 let project_workspace = ProjectWorkspace::Json { project, sysroot, rustc_cfg: Vec::new() };
40 to_crate_graph(project_workspace)
43 fn get_test_json_file<T: DeserializeOwned>(file: &str) -> T {
44 let file = get_test_path(file);
45 let data = std::fs::read_to_string(file).unwrap();
46 let mut json = data.parse::<serde_json::Value>().unwrap();
47 fixup_paths(&mut json);
48 return serde_json::from_value(json).unwrap();
50 fn fixup_paths(val: &mut serde_json::Value) {
52 serde_json::Value::String(s) => replace_root(s, true),
53 serde_json::Value::Array(vals) => vals.iter_mut().for_each(fixup_paths),
54 serde_json::Value::Object(kvals) => kvals.values_mut().for_each(fixup_paths),
55 serde_json::Value::Null | serde_json::Value::Bool(_) | serde_json::Value::Number(_) => {
61 fn replace_root(s: &mut String, direction: bool) {
63 let root = if cfg!(windows) { r#"C:\\ROOT\"# } else { "/ROOT/" };
64 *s = s.replace("$ROOT$", root)
66 let root = if cfg!(windows) { r#"C:\\\\ROOT\\"# } else { "/ROOT/" };
67 *s = s.replace(root, "$ROOT$")
71 fn get_test_path(file: &str) -> PathBuf {
72 let base = PathBuf::from(env!("CARGO_MANIFEST_DIR"));
73 base.join("test_data").join(file)
76 fn get_fake_sysroot() -> Sysroot {
77 let sysroot_path = get_test_path("fake-sysroot");
78 let sysroot_src_dir = AbsPathBuf::assert(sysroot_path);
79 Sysroot::load(sysroot_src_dir).unwrap()
82 fn rooted_project_json(data: ProjectJsonData) -> ProjectJson {
83 let mut root = "$ROOT$".to_string();
84 replace_root(&mut root, true);
85 let path = Path::new(&root);
86 let base = AbsPath::assert(path);
87 ProjectJson::new(base, data)
90 fn to_crate_graph(project_workspace: ProjectWorkspace) -> CrateGraph {
91 project_workspace.to_crate_graph(&mut |_, _| Ok(Vec::new()), &mut {
100 fn check_crate_graph(crate_graph: CrateGraph, expect: Expect) {
101 let mut crate_graph = format!("{:#?}", crate_graph);
102 replace_root(&mut crate_graph, false);
103 expect.assert_eq(&crate_graph);
107 fn cargo_hello_world_project_model_with_wildcard_overrides() {
108 let cfg_overrides = CfgOverrides::Wildcard(
109 CfgDiff::new(Vec::new(), vec![CfgAtom::Flag("test".into())]).unwrap(),
111 let crate_graph = load_cargo_with_overrides("hello-world-metadata.json", cfg_overrides);
120 root_file_id: FileId(
123 edition: Edition2018,
129 crate_name: CrateName(
132 canonical_name: "hello-world",
135 cfg_options: CfgOptions(
140 potential_cfg_options: CfgOptions(
147 "CARGO_PKG_LICENSE": "",
148 "CARGO_PKG_VERSION_MAJOR": "0",
149 "CARGO_MANIFEST_DIR": "$ROOT$hello-world",
150 "CARGO_PKG_VERSION": "0.1.0",
151 "CARGO_PKG_AUTHORS": "",
152 "CARGO_CRATE_NAME": "hello_world",
153 "CARGO_PKG_LICENSE_FILE": "",
154 "CARGO_PKG_HOMEPAGE": "",
155 "CARGO_PKG_DESCRIPTION": "",
156 "CARGO_PKG_NAME": "hello-world",
157 "CARGO_PKG_VERSION_PATCH": "0",
159 "CARGO_PKG_REPOSITORY": "",
160 "CARGO_PKG_VERSION_MINOR": "1",
161 "CARGO_PKG_VERSION_PRE": "",
176 "crate has not (yet) been built",
181 is_proc_macro: false,
186 root_file_id: FileId(
189 edition: Edition2018,
195 crate_name: CrateName(
198 canonical_name: "an-example",
201 cfg_options: CfgOptions(
206 potential_cfg_options: CfgOptions(
213 "CARGO_PKG_LICENSE": "",
214 "CARGO_PKG_VERSION_MAJOR": "0",
215 "CARGO_MANIFEST_DIR": "$ROOT$hello-world",
216 "CARGO_PKG_VERSION": "0.1.0",
217 "CARGO_PKG_AUTHORS": "",
218 "CARGO_CRATE_NAME": "hello_world",
219 "CARGO_PKG_LICENSE_FILE": "",
220 "CARGO_PKG_HOMEPAGE": "",
221 "CARGO_PKG_DESCRIPTION": "",
222 "CARGO_PKG_NAME": "hello-world",
223 "CARGO_PKG_VERSION_PATCH": "0",
225 "CARGO_PKG_REPOSITORY": "",
226 "CARGO_PKG_VERSION_MINOR": "1",
227 "CARGO_PKG_VERSION_PRE": "",
251 "crate has not (yet) been built",
256 is_proc_macro: false,
261 root_file_id: FileId(
264 edition: Edition2015,
270 crate_name: CrateName(
273 canonical_name: "libc",
276 cfg_options: CfgOptions(
283 potential_cfg_options: CfgOptions(
287 "feature=const-extern-fn",
289 "feature=extra_traits",
290 "feature=rustc-dep-of-std",
297 "CARGO_PKG_LICENSE": "",
298 "CARGO_PKG_VERSION_MAJOR": "0",
299 "CARGO_MANIFEST_DIR": "$ROOT$.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.98",
300 "CARGO_PKG_VERSION": "0.2.98",
301 "CARGO_PKG_AUTHORS": "",
302 "CARGO_CRATE_NAME": "libc",
303 "CARGO_PKG_LICENSE_FILE": "",
304 "CARGO_PKG_HOMEPAGE": "",
305 "CARGO_PKG_DESCRIPTION": "",
306 "CARGO_PKG_NAME": "libc",
307 "CARGO_PKG_VERSION_PATCH": "98",
309 "CARGO_PKG_REPOSITORY": "",
310 "CARGO_PKG_VERSION_MINOR": "2",
311 "CARGO_PKG_VERSION_PRE": "",
316 "crate has not (yet) been built",
320 "https://github.com/rust-lang/libc",
323 is_proc_macro: false,
328 root_file_id: FileId(
331 edition: Edition2018,
337 crate_name: CrateName(
340 canonical_name: "hello-world",
343 cfg_options: CfgOptions(
348 potential_cfg_options: CfgOptions(
355 "CARGO_PKG_LICENSE": "",
356 "CARGO_PKG_VERSION_MAJOR": "0",
357 "CARGO_MANIFEST_DIR": "$ROOT$hello-world",
358 "CARGO_PKG_VERSION": "0.1.0",
359 "CARGO_PKG_AUTHORS": "",
360 "CARGO_CRATE_NAME": "hello_world",
361 "CARGO_PKG_LICENSE_FILE": "",
362 "CARGO_PKG_HOMEPAGE": "",
363 "CARGO_PKG_DESCRIPTION": "",
364 "CARGO_PKG_NAME": "hello-world",
365 "CARGO_PKG_VERSION_PATCH": "0",
367 "CARGO_PKG_REPOSITORY": "",
368 "CARGO_PKG_VERSION_MINOR": "1",
369 "CARGO_PKG_VERSION_PRE": "",
393 "crate has not (yet) been built",
398 is_proc_macro: false,
403 root_file_id: FileId(
406 edition: Edition2018,
412 crate_name: CrateName(
415 canonical_name: "it",
418 cfg_options: CfgOptions(
423 potential_cfg_options: CfgOptions(
430 "CARGO_PKG_LICENSE": "",
431 "CARGO_PKG_VERSION_MAJOR": "0",
432 "CARGO_MANIFEST_DIR": "$ROOT$hello-world",
433 "CARGO_PKG_VERSION": "0.1.0",
434 "CARGO_PKG_AUTHORS": "",
435 "CARGO_CRATE_NAME": "hello_world",
436 "CARGO_PKG_LICENSE_FILE": "",
437 "CARGO_PKG_HOMEPAGE": "",
438 "CARGO_PKG_DESCRIPTION": "",
439 "CARGO_PKG_NAME": "hello-world",
440 "CARGO_PKG_VERSION_PATCH": "0",
442 "CARGO_PKG_REPOSITORY": "",
443 "CARGO_PKG_VERSION_MINOR": "1",
444 "CARGO_PKG_VERSION_PRE": "",
468 "crate has not (yet) been built",
473 is_proc_macro: false,
481 fn cargo_hello_world_project_model_with_selective_overrides() {
482 let cfg_overrides = {
483 CfgOverrides::Selective(
486 CfgDiff::new(Vec::new(), vec![CfgAtom::Flag("test".into())]).unwrap(),
491 let crate_graph = load_cargo_with_overrides("hello-world-metadata.json", cfg_overrides);
500 root_file_id: FileId(
503 edition: Edition2018,
509 crate_name: CrateName(
512 canonical_name: "hello-world",
515 cfg_options: CfgOptions(
521 potential_cfg_options: CfgOptions(
529 "CARGO_PKG_LICENSE": "",
530 "CARGO_PKG_VERSION_MAJOR": "0",
531 "CARGO_MANIFEST_DIR": "$ROOT$hello-world",
532 "CARGO_PKG_VERSION": "0.1.0",
533 "CARGO_PKG_AUTHORS": "",
534 "CARGO_CRATE_NAME": "hello_world",
535 "CARGO_PKG_LICENSE_FILE": "",
536 "CARGO_PKG_HOMEPAGE": "",
537 "CARGO_PKG_DESCRIPTION": "",
538 "CARGO_PKG_NAME": "hello-world",
539 "CARGO_PKG_VERSION_PATCH": "0",
541 "CARGO_PKG_REPOSITORY": "",
542 "CARGO_PKG_VERSION_MINOR": "1",
543 "CARGO_PKG_VERSION_PRE": "",
558 "crate has not (yet) been built",
563 is_proc_macro: false,
568 root_file_id: FileId(
571 edition: Edition2018,
577 crate_name: CrateName(
580 canonical_name: "an-example",
583 cfg_options: CfgOptions(
589 potential_cfg_options: CfgOptions(
597 "CARGO_PKG_LICENSE": "",
598 "CARGO_PKG_VERSION_MAJOR": "0",
599 "CARGO_MANIFEST_DIR": "$ROOT$hello-world",
600 "CARGO_PKG_VERSION": "0.1.0",
601 "CARGO_PKG_AUTHORS": "",
602 "CARGO_CRATE_NAME": "hello_world",
603 "CARGO_PKG_LICENSE_FILE": "",
604 "CARGO_PKG_HOMEPAGE": "",
605 "CARGO_PKG_DESCRIPTION": "",
606 "CARGO_PKG_NAME": "hello-world",
607 "CARGO_PKG_VERSION_PATCH": "0",
609 "CARGO_PKG_REPOSITORY": "",
610 "CARGO_PKG_VERSION_MINOR": "1",
611 "CARGO_PKG_VERSION_PRE": "",
635 "crate has not (yet) been built",
640 is_proc_macro: false,
645 root_file_id: FileId(
648 edition: Edition2015,
654 crate_name: CrateName(
657 canonical_name: "libc",
660 cfg_options: CfgOptions(
667 potential_cfg_options: CfgOptions(
671 "feature=const-extern-fn",
673 "feature=extra_traits",
674 "feature=rustc-dep-of-std",
681 "CARGO_PKG_LICENSE": "",
682 "CARGO_PKG_VERSION_MAJOR": "0",
683 "CARGO_MANIFEST_DIR": "$ROOT$.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.98",
684 "CARGO_PKG_VERSION": "0.2.98",
685 "CARGO_PKG_AUTHORS": "",
686 "CARGO_CRATE_NAME": "libc",
687 "CARGO_PKG_LICENSE_FILE": "",
688 "CARGO_PKG_HOMEPAGE": "",
689 "CARGO_PKG_DESCRIPTION": "",
690 "CARGO_PKG_NAME": "libc",
691 "CARGO_PKG_VERSION_PATCH": "98",
693 "CARGO_PKG_REPOSITORY": "",
694 "CARGO_PKG_VERSION_MINOR": "2",
695 "CARGO_PKG_VERSION_PRE": "",
700 "crate has not (yet) been built",
704 "https://github.com/rust-lang/libc",
707 is_proc_macro: false,
712 root_file_id: FileId(
715 edition: Edition2018,
721 crate_name: CrateName(
724 canonical_name: "hello-world",
727 cfg_options: CfgOptions(
733 potential_cfg_options: CfgOptions(
741 "CARGO_PKG_LICENSE": "",
742 "CARGO_PKG_VERSION_MAJOR": "0",
743 "CARGO_MANIFEST_DIR": "$ROOT$hello-world",
744 "CARGO_PKG_VERSION": "0.1.0",
745 "CARGO_PKG_AUTHORS": "",
746 "CARGO_CRATE_NAME": "hello_world",
747 "CARGO_PKG_LICENSE_FILE": "",
748 "CARGO_PKG_HOMEPAGE": "",
749 "CARGO_PKG_DESCRIPTION": "",
750 "CARGO_PKG_NAME": "hello-world",
751 "CARGO_PKG_VERSION_PATCH": "0",
753 "CARGO_PKG_REPOSITORY": "",
754 "CARGO_PKG_VERSION_MINOR": "1",
755 "CARGO_PKG_VERSION_PRE": "",
779 "crate has not (yet) been built",
784 is_proc_macro: false,
789 root_file_id: FileId(
792 edition: Edition2018,
798 crate_name: CrateName(
801 canonical_name: "it",
804 cfg_options: CfgOptions(
810 potential_cfg_options: CfgOptions(
818 "CARGO_PKG_LICENSE": "",
819 "CARGO_PKG_VERSION_MAJOR": "0",
820 "CARGO_MANIFEST_DIR": "$ROOT$hello-world",
821 "CARGO_PKG_VERSION": "0.1.0",
822 "CARGO_PKG_AUTHORS": "",
823 "CARGO_CRATE_NAME": "hello_world",
824 "CARGO_PKG_LICENSE_FILE": "",
825 "CARGO_PKG_HOMEPAGE": "",
826 "CARGO_PKG_DESCRIPTION": "",
827 "CARGO_PKG_NAME": "hello-world",
828 "CARGO_PKG_VERSION_PATCH": "0",
830 "CARGO_PKG_REPOSITORY": "",
831 "CARGO_PKG_VERSION_MINOR": "1",
832 "CARGO_PKG_VERSION_PRE": "",
856 "crate has not (yet) been built",
861 is_proc_macro: false,
869 fn cargo_hello_world_project_model() {
870 let crate_graph = load_cargo("hello-world-metadata.json");
879 root_file_id: FileId(
882 edition: Edition2018,
888 crate_name: CrateName(
891 canonical_name: "hello-world",
894 cfg_options: CfgOptions(
900 potential_cfg_options: CfgOptions(
908 "CARGO_PKG_LICENSE": "",
909 "CARGO_PKG_VERSION_MAJOR": "0",
910 "CARGO_MANIFEST_DIR": "$ROOT$hello-world",
911 "CARGO_PKG_VERSION": "0.1.0",
912 "CARGO_PKG_AUTHORS": "",
913 "CARGO_CRATE_NAME": "hello_world",
914 "CARGO_PKG_LICENSE_FILE": "",
915 "CARGO_PKG_HOMEPAGE": "",
916 "CARGO_PKG_DESCRIPTION": "",
917 "CARGO_PKG_NAME": "hello-world",
918 "CARGO_PKG_VERSION_PATCH": "0",
920 "CARGO_PKG_REPOSITORY": "",
921 "CARGO_PKG_VERSION_MINOR": "1",
922 "CARGO_PKG_VERSION_PRE": "",
937 "crate has not (yet) been built",
942 is_proc_macro: false,
947 root_file_id: FileId(
950 edition: Edition2018,
956 crate_name: CrateName(
959 canonical_name: "an-example",
962 cfg_options: CfgOptions(
968 potential_cfg_options: CfgOptions(
976 "CARGO_PKG_LICENSE": "",
977 "CARGO_PKG_VERSION_MAJOR": "0",
978 "CARGO_MANIFEST_DIR": "$ROOT$hello-world",
979 "CARGO_PKG_VERSION": "0.1.0",
980 "CARGO_PKG_AUTHORS": "",
981 "CARGO_CRATE_NAME": "hello_world",
982 "CARGO_PKG_LICENSE_FILE": "",
983 "CARGO_PKG_HOMEPAGE": "",
984 "CARGO_PKG_DESCRIPTION": "",
985 "CARGO_PKG_NAME": "hello-world",
986 "CARGO_PKG_VERSION_PATCH": "0",
988 "CARGO_PKG_REPOSITORY": "",
989 "CARGO_PKG_VERSION_MINOR": "1",
990 "CARGO_PKG_VERSION_PRE": "",
1014 "crate has not (yet) been built",
1019 is_proc_macro: false,
1024 root_file_id: FileId(
1027 edition: Edition2015,
1033 crate_name: CrateName(
1036 canonical_name: "libc",
1039 cfg_options: CfgOptions(
1046 potential_cfg_options: CfgOptions(
1050 "feature=const-extern-fn",
1052 "feature=extra_traits",
1053 "feature=rustc-dep-of-std",
1060 "CARGO_PKG_LICENSE": "",
1061 "CARGO_PKG_VERSION_MAJOR": "0",
1062 "CARGO_MANIFEST_DIR": "$ROOT$.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.98",
1063 "CARGO_PKG_VERSION": "0.2.98",
1064 "CARGO_PKG_AUTHORS": "",
1065 "CARGO_CRATE_NAME": "libc",
1066 "CARGO_PKG_LICENSE_FILE": "",
1067 "CARGO_PKG_HOMEPAGE": "",
1068 "CARGO_PKG_DESCRIPTION": "",
1069 "CARGO_PKG_NAME": "libc",
1070 "CARGO_PKG_VERSION_PATCH": "98",
1072 "CARGO_PKG_REPOSITORY": "",
1073 "CARGO_PKG_VERSION_MINOR": "2",
1074 "CARGO_PKG_VERSION_PRE": "",
1079 "crate has not (yet) been built",
1083 "https://github.com/rust-lang/libc",
1086 is_proc_macro: false,
1091 root_file_id: FileId(
1094 edition: Edition2018,
1100 crate_name: CrateName(
1103 canonical_name: "hello-world",
1106 cfg_options: CfgOptions(
1112 potential_cfg_options: CfgOptions(
1120 "CARGO_PKG_LICENSE": "",
1121 "CARGO_PKG_VERSION_MAJOR": "0",
1122 "CARGO_MANIFEST_DIR": "$ROOT$hello-world",
1123 "CARGO_PKG_VERSION": "0.1.0",
1124 "CARGO_PKG_AUTHORS": "",
1125 "CARGO_CRATE_NAME": "hello_world",
1126 "CARGO_PKG_LICENSE_FILE": "",
1127 "CARGO_PKG_HOMEPAGE": "",
1128 "CARGO_PKG_DESCRIPTION": "",
1129 "CARGO_PKG_NAME": "hello-world",
1130 "CARGO_PKG_VERSION_PATCH": "0",
1132 "CARGO_PKG_REPOSITORY": "",
1133 "CARGO_PKG_VERSION_MINOR": "1",
1134 "CARGO_PKG_VERSION_PRE": "",
1158 "crate has not (yet) been built",
1163 is_proc_macro: false,
1168 root_file_id: FileId(
1171 edition: Edition2018,
1177 crate_name: CrateName(
1180 canonical_name: "it",
1183 cfg_options: CfgOptions(
1189 potential_cfg_options: CfgOptions(
1197 "CARGO_PKG_LICENSE": "",
1198 "CARGO_PKG_VERSION_MAJOR": "0",
1199 "CARGO_MANIFEST_DIR": "$ROOT$hello-world",
1200 "CARGO_PKG_VERSION": "0.1.0",
1201 "CARGO_PKG_AUTHORS": "",
1202 "CARGO_CRATE_NAME": "hello_world",
1203 "CARGO_PKG_LICENSE_FILE": "",
1204 "CARGO_PKG_HOMEPAGE": "",
1205 "CARGO_PKG_DESCRIPTION": "",
1206 "CARGO_PKG_NAME": "hello-world",
1207 "CARGO_PKG_VERSION_PATCH": "0",
1209 "CARGO_PKG_REPOSITORY": "",
1210 "CARGO_PKG_VERSION_MINOR": "1",
1211 "CARGO_PKG_VERSION_PRE": "",
1235 "crate has not (yet) been built",
1240 is_proc_macro: false,
1248 fn rust_project_hello_world_project_model() {
1249 let crate_graph = load_rust_project("hello-world-project.json");
1258 root_file_id: FileId(
1261 edition: Edition2018,
1265 crate_name: CrateName(
1268 canonical_name: "alloc",
1271 cfg_options: CfgOptions(
1274 potential_cfg_options: CfgOptions(
1292 "no proc macro loaded for sysroot crate",
1297 is_proc_macro: false,
1302 root_file_id: FileId(
1305 edition: Edition2018,
1309 crate_name: CrateName(
1312 canonical_name: "unwind",
1315 cfg_options: CfgOptions(
1318 potential_cfg_options: CfgOptions(
1326 "no proc macro loaded for sysroot crate",
1331 is_proc_macro: false,
1336 root_file_id: FileId(
1339 edition: Edition2018,
1343 crate_name: CrateName(
1346 canonical_name: "std_detect",
1349 cfg_options: CfgOptions(
1352 potential_cfg_options: CfgOptions(
1360 "no proc macro loaded for sysroot crate",
1365 is_proc_macro: false,
1370 root_file_id: FileId(
1373 edition: Edition2018,
1377 crate_name: CrateName(
1380 canonical_name: "proc_macro",
1383 cfg_options: CfgOptions(
1386 potential_cfg_options: CfgOptions(
1404 "no proc macro loaded for sysroot crate",
1409 is_proc_macro: false,
1414 root_file_id: FileId(
1417 edition: Edition2018,
1421 crate_name: CrateName(
1424 canonical_name: "core",
1427 cfg_options: CfgOptions(
1430 potential_cfg_options: CfgOptions(
1438 "no proc macro loaded for sysroot crate",
1443 is_proc_macro: false,
1448 root_file_id: FileId(
1451 edition: Edition2018,
1455 crate_name: CrateName(
1458 canonical_name: "hello_world",
1461 cfg_options: CfgOptions(
1464 potential_cfg_options: CfgOptions(
1509 "no proc macro dylib present",
1514 is_proc_macro: false,
1519 root_file_id: FileId(
1522 edition: Edition2018,
1526 crate_name: CrateName(
1529 canonical_name: "term",
1532 cfg_options: CfgOptions(
1535 potential_cfg_options: CfgOptions(
1543 "no proc macro loaded for sysroot crate",
1548 is_proc_macro: false,
1553 root_file_id: FileId(
1556 edition: Edition2018,
1560 crate_name: CrateName(
1561 "profiler_builtins",
1563 canonical_name: "profiler_builtins",
1566 cfg_options: CfgOptions(
1569 potential_cfg_options: CfgOptions(
1577 "no proc macro loaded for sysroot crate",
1582 is_proc_macro: false,
1587 root_file_id: FileId(
1590 edition: Edition2018,
1594 crate_name: CrateName(
1597 canonical_name: "panic_abort",
1600 cfg_options: CfgOptions(
1603 potential_cfg_options: CfgOptions(
1611 "no proc macro loaded for sysroot crate",
1616 is_proc_macro: false,
1621 root_file_id: FileId(
1624 edition: Edition2018,
1628 crate_name: CrateName(
1631 canonical_name: "test",
1634 cfg_options: CfgOptions(
1637 potential_cfg_options: CfgOptions(
1645 "no proc macro loaded for sysroot crate",
1650 is_proc_macro: false,
1655 root_file_id: FileId(
1658 edition: Edition2018,
1662 crate_name: CrateName(
1665 canonical_name: "std",
1668 cfg_options: CfgOptions(
1671 potential_cfg_options: CfgOptions(
1719 "profiler_builtins",
1761 "no proc macro loaded for sysroot crate",
1766 is_proc_macro: false,
1771 root_file_id: FileId(
1774 edition: Edition2018,
1778 crate_name: CrateName(
1781 canonical_name: "panic_unwind",
1784 cfg_options: CfgOptions(
1787 potential_cfg_options: CfgOptions(
1795 "no proc macro loaded for sysroot crate",
1800 is_proc_macro: false,
1808 fn rust_project_is_proc_macro_has_proc_macro_dep() {
1809 let crate_graph = load_rust_project("is-proc-macro-project.json");
1810 // Since the project only defines one crate (outside the sysroot crates),
1811 // it should be the one with the biggest Id.
1812 let crate_id = crate_graph.iter().max().unwrap();
1813 let crate_data = &crate_graph[crate_id];
1814 // Assert that the project crate with `is_proc_macro` has a dependency
1815 // on the proc_macro sysroot crate.
1816 crate_data.dependencies.iter().find(|&dep| dep.name.deref() == "proc_macro").unwrap();