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(),
33 to_crate_graph(project_workspace)
36 fn load_rust_project(file: &str) -> CrateGraph {
37 let data = get_test_json_file(file);
38 let project = rooted_project_json(data);
39 let sysroot = Some(get_fake_sysroot());
40 let project_workspace = ProjectWorkspace::Json { project, sysroot, rustc_cfg: Vec::new() };
41 to_crate_graph(project_workspace)
44 fn get_test_json_file<T: DeserializeOwned>(file: &str) -> T {
45 let file = get_test_path(file);
46 let data = std::fs::read_to_string(file).unwrap();
47 let mut json = data.parse::<serde_json::Value>().unwrap();
48 fixup_paths(&mut json);
49 return serde_json::from_value(json).unwrap();
51 fn fixup_paths(val: &mut serde_json::Value) {
53 serde_json::Value::String(s) => replace_root(s, true),
54 serde_json::Value::Array(vals) => vals.iter_mut().for_each(fixup_paths),
55 serde_json::Value::Object(kvals) => kvals.values_mut().for_each(fixup_paths),
56 serde_json::Value::Null | serde_json::Value::Bool(_) | serde_json::Value::Number(_) => {
62 fn replace_root(s: &mut String, direction: bool) {
64 let root = if cfg!(windows) { r#"C:\\ROOT\"# } else { "/ROOT/" };
65 *s = s.replace("$ROOT$", root)
67 let root = if cfg!(windows) { r#"C:\\\\ROOT\\"# } else { "/ROOT/" };
68 *s = s.replace(root, "$ROOT$")
72 fn get_test_path(file: &str) -> PathBuf {
73 let base = PathBuf::from(env!("CARGO_MANIFEST_DIR"));
74 base.join("test_data").join(file)
77 fn get_fake_sysroot() -> Sysroot {
78 let sysroot_path = get_test_path("fake-sysroot");
79 // there's no `libexec/` directory with a `proc-macro-srv` binary in that
80 // fake sysroot, so we give them both the same path:
81 let sysroot_dir = AbsPathBuf::assert(sysroot_path);
82 let sysroot_src_dir = sysroot_dir.clone();
83 Sysroot::load(sysroot_dir, sysroot_src_dir).unwrap()
86 fn rooted_project_json(data: ProjectJsonData) -> ProjectJson {
87 let mut root = "$ROOT$".to_string();
88 replace_root(&mut root, true);
89 let path = Path::new(&root);
90 let base = AbsPath::assert(path);
91 ProjectJson::new(base, data)
94 fn to_crate_graph(project_workspace: ProjectWorkspace) -> CrateGraph {
95 project_workspace.to_crate_graph(&mut |_, _| Ok(Vec::new()), &mut {
104 fn check_crate_graph(crate_graph: CrateGraph, expect: Expect) {
105 let mut crate_graph = format!("{:#?}", crate_graph);
106 replace_root(&mut crate_graph, false);
107 expect.assert_eq(&crate_graph);
111 fn cargo_hello_world_project_model_with_wildcard_overrides() {
112 let cfg_overrides = CfgOverrides::Wildcard(
113 CfgDiff::new(Vec::new(), vec![CfgAtom::Flag("test".into())]).unwrap(),
115 let crate_graph = load_cargo_with_overrides("hello-world-metadata.json", cfg_overrides);
124 root_file_id: FileId(
127 edition: Edition2018,
133 crate_name: CrateName(
136 canonical_name: "hello-world",
139 cfg_options: CfgOptions(
144 potential_cfg_options: CfgOptions(
151 "CARGO_PKG_LICENSE": "",
152 "CARGO_PKG_VERSION_MAJOR": "0",
153 "CARGO_MANIFEST_DIR": "$ROOT$hello-world",
154 "CARGO_PKG_VERSION": "0.1.0",
155 "CARGO_PKG_AUTHORS": "",
156 "CARGO_CRATE_NAME": "hello_world",
157 "CARGO_PKG_LICENSE_FILE": "",
158 "CARGO_PKG_HOMEPAGE": "",
159 "CARGO_PKG_DESCRIPTION": "",
160 "CARGO_PKG_NAME": "hello-world",
161 "CARGO_PKG_VERSION_PATCH": "0",
163 "CARGO_PKG_REPOSITORY": "",
164 "CARGO_PKG_VERSION_MINOR": "1",
165 "CARGO_PKG_VERSION_PRE": "",
180 "crate has not (yet) been built",
185 is_proc_macro: false,
190 root_file_id: FileId(
193 edition: Edition2018,
199 crate_name: CrateName(
202 canonical_name: "hello-world",
205 cfg_options: CfgOptions(
210 potential_cfg_options: CfgOptions(
217 "CARGO_PKG_LICENSE": "",
218 "CARGO_PKG_VERSION_MAJOR": "0",
219 "CARGO_MANIFEST_DIR": "$ROOT$hello-world",
220 "CARGO_PKG_VERSION": "0.1.0",
221 "CARGO_PKG_AUTHORS": "",
222 "CARGO_CRATE_NAME": "hello_world",
223 "CARGO_PKG_LICENSE_FILE": "",
224 "CARGO_PKG_HOMEPAGE": "",
225 "CARGO_PKG_DESCRIPTION": "",
226 "CARGO_PKG_NAME": "hello-world",
227 "CARGO_PKG_VERSION_PATCH": "0",
229 "CARGO_PKG_REPOSITORY": "",
230 "CARGO_PKG_VERSION_MINOR": "1",
231 "CARGO_PKG_VERSION_PRE": "",
255 "crate has not (yet) been built",
260 is_proc_macro: false,
265 root_file_id: FileId(
268 edition: Edition2018,
274 crate_name: CrateName(
277 canonical_name: "an-example",
280 cfg_options: CfgOptions(
285 potential_cfg_options: CfgOptions(
292 "CARGO_PKG_LICENSE": "",
293 "CARGO_PKG_VERSION_MAJOR": "0",
294 "CARGO_MANIFEST_DIR": "$ROOT$hello-world",
295 "CARGO_PKG_VERSION": "0.1.0",
296 "CARGO_PKG_AUTHORS": "",
297 "CARGO_CRATE_NAME": "hello_world",
298 "CARGO_PKG_LICENSE_FILE": "",
299 "CARGO_PKG_HOMEPAGE": "",
300 "CARGO_PKG_DESCRIPTION": "",
301 "CARGO_PKG_NAME": "hello-world",
302 "CARGO_PKG_VERSION_PATCH": "0",
304 "CARGO_PKG_REPOSITORY": "",
305 "CARGO_PKG_VERSION_MINOR": "1",
306 "CARGO_PKG_VERSION_PRE": "",
330 "crate has not (yet) been built",
335 is_proc_macro: false,
340 root_file_id: FileId(
343 edition: Edition2018,
349 crate_name: CrateName(
352 canonical_name: "it",
355 cfg_options: CfgOptions(
360 potential_cfg_options: CfgOptions(
367 "CARGO_PKG_LICENSE": "",
368 "CARGO_PKG_VERSION_MAJOR": "0",
369 "CARGO_MANIFEST_DIR": "$ROOT$hello-world",
370 "CARGO_PKG_VERSION": "0.1.0",
371 "CARGO_PKG_AUTHORS": "",
372 "CARGO_CRATE_NAME": "hello_world",
373 "CARGO_PKG_LICENSE_FILE": "",
374 "CARGO_PKG_HOMEPAGE": "",
375 "CARGO_PKG_DESCRIPTION": "",
376 "CARGO_PKG_NAME": "hello-world",
377 "CARGO_PKG_VERSION_PATCH": "0",
379 "CARGO_PKG_REPOSITORY": "",
380 "CARGO_PKG_VERSION_MINOR": "1",
381 "CARGO_PKG_VERSION_PRE": "",
405 "crate has not (yet) been built",
410 is_proc_macro: false,
415 root_file_id: FileId(
418 edition: Edition2015,
424 crate_name: CrateName(
427 canonical_name: "libc",
430 cfg_options: CfgOptions(
437 potential_cfg_options: CfgOptions(
441 "feature=const-extern-fn",
443 "feature=extra_traits",
444 "feature=rustc-dep-of-std",
451 "CARGO_PKG_LICENSE": "",
452 "CARGO_PKG_VERSION_MAJOR": "0",
453 "CARGO_MANIFEST_DIR": "$ROOT$.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.98",
454 "CARGO_PKG_VERSION": "0.2.98",
455 "CARGO_PKG_AUTHORS": "",
456 "CARGO_CRATE_NAME": "libc",
457 "CARGO_PKG_LICENSE_FILE": "",
458 "CARGO_PKG_HOMEPAGE": "",
459 "CARGO_PKG_DESCRIPTION": "",
460 "CARGO_PKG_NAME": "libc",
461 "CARGO_PKG_VERSION_PATCH": "98",
463 "CARGO_PKG_REPOSITORY": "",
464 "CARGO_PKG_VERSION_MINOR": "2",
465 "CARGO_PKG_VERSION_PRE": "",
470 "crate has not (yet) been built",
474 "https://github.com/rust-lang/libc",
477 is_proc_macro: false,
485 fn cargo_hello_world_project_model_with_selective_overrides() {
486 let cfg_overrides = {
487 CfgOverrides::Selective(
490 CfgDiff::new(Vec::new(), vec![CfgAtom::Flag("test".into())]).unwrap(),
495 let crate_graph = load_cargo_with_overrides("hello-world-metadata.json", cfg_overrides);
504 root_file_id: FileId(
507 edition: Edition2018,
513 crate_name: CrateName(
516 canonical_name: "hello-world",
519 cfg_options: CfgOptions(
525 potential_cfg_options: CfgOptions(
533 "CARGO_PKG_LICENSE": "",
534 "CARGO_PKG_VERSION_MAJOR": "0",
535 "CARGO_MANIFEST_DIR": "$ROOT$hello-world",
536 "CARGO_PKG_VERSION": "0.1.0",
537 "CARGO_PKG_AUTHORS": "",
538 "CARGO_CRATE_NAME": "hello_world",
539 "CARGO_PKG_LICENSE_FILE": "",
540 "CARGO_PKG_HOMEPAGE": "",
541 "CARGO_PKG_DESCRIPTION": "",
542 "CARGO_PKG_NAME": "hello-world",
543 "CARGO_PKG_VERSION_PATCH": "0",
545 "CARGO_PKG_REPOSITORY": "",
546 "CARGO_PKG_VERSION_MINOR": "1",
547 "CARGO_PKG_VERSION_PRE": "",
562 "crate has not (yet) been built",
567 is_proc_macro: false,
572 root_file_id: FileId(
575 edition: Edition2018,
581 crate_name: CrateName(
584 canonical_name: "hello-world",
587 cfg_options: CfgOptions(
593 potential_cfg_options: CfgOptions(
601 "CARGO_PKG_LICENSE": "",
602 "CARGO_PKG_VERSION_MAJOR": "0",
603 "CARGO_MANIFEST_DIR": "$ROOT$hello-world",
604 "CARGO_PKG_VERSION": "0.1.0",
605 "CARGO_PKG_AUTHORS": "",
606 "CARGO_CRATE_NAME": "hello_world",
607 "CARGO_PKG_LICENSE_FILE": "",
608 "CARGO_PKG_HOMEPAGE": "",
609 "CARGO_PKG_DESCRIPTION": "",
610 "CARGO_PKG_NAME": "hello-world",
611 "CARGO_PKG_VERSION_PATCH": "0",
613 "CARGO_PKG_REPOSITORY": "",
614 "CARGO_PKG_VERSION_MINOR": "1",
615 "CARGO_PKG_VERSION_PRE": "",
639 "crate has not (yet) been built",
644 is_proc_macro: false,
649 root_file_id: FileId(
652 edition: Edition2018,
658 crate_name: CrateName(
661 canonical_name: "an-example",
664 cfg_options: CfgOptions(
670 potential_cfg_options: CfgOptions(
678 "CARGO_PKG_LICENSE": "",
679 "CARGO_PKG_VERSION_MAJOR": "0",
680 "CARGO_MANIFEST_DIR": "$ROOT$hello-world",
681 "CARGO_PKG_VERSION": "0.1.0",
682 "CARGO_PKG_AUTHORS": "",
683 "CARGO_CRATE_NAME": "hello_world",
684 "CARGO_PKG_LICENSE_FILE": "",
685 "CARGO_PKG_HOMEPAGE": "",
686 "CARGO_PKG_DESCRIPTION": "",
687 "CARGO_PKG_NAME": "hello-world",
688 "CARGO_PKG_VERSION_PATCH": "0",
690 "CARGO_PKG_REPOSITORY": "",
691 "CARGO_PKG_VERSION_MINOR": "1",
692 "CARGO_PKG_VERSION_PRE": "",
716 "crate has not (yet) been built",
721 is_proc_macro: false,
726 root_file_id: FileId(
729 edition: Edition2018,
735 crate_name: CrateName(
738 canonical_name: "it",
741 cfg_options: CfgOptions(
747 potential_cfg_options: CfgOptions(
755 "CARGO_PKG_LICENSE": "",
756 "CARGO_PKG_VERSION_MAJOR": "0",
757 "CARGO_MANIFEST_DIR": "$ROOT$hello-world",
758 "CARGO_PKG_VERSION": "0.1.0",
759 "CARGO_PKG_AUTHORS": "",
760 "CARGO_CRATE_NAME": "hello_world",
761 "CARGO_PKG_LICENSE_FILE": "",
762 "CARGO_PKG_HOMEPAGE": "",
763 "CARGO_PKG_DESCRIPTION": "",
764 "CARGO_PKG_NAME": "hello-world",
765 "CARGO_PKG_VERSION_PATCH": "0",
767 "CARGO_PKG_REPOSITORY": "",
768 "CARGO_PKG_VERSION_MINOR": "1",
769 "CARGO_PKG_VERSION_PRE": "",
793 "crate has not (yet) been built",
798 is_proc_macro: false,
803 root_file_id: FileId(
806 edition: Edition2015,
812 crate_name: CrateName(
815 canonical_name: "libc",
818 cfg_options: CfgOptions(
825 potential_cfg_options: CfgOptions(
829 "feature=const-extern-fn",
831 "feature=extra_traits",
832 "feature=rustc-dep-of-std",
839 "CARGO_PKG_LICENSE": "",
840 "CARGO_PKG_VERSION_MAJOR": "0",
841 "CARGO_MANIFEST_DIR": "$ROOT$.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.98",
842 "CARGO_PKG_VERSION": "0.2.98",
843 "CARGO_PKG_AUTHORS": "",
844 "CARGO_CRATE_NAME": "libc",
845 "CARGO_PKG_LICENSE_FILE": "",
846 "CARGO_PKG_HOMEPAGE": "",
847 "CARGO_PKG_DESCRIPTION": "",
848 "CARGO_PKG_NAME": "libc",
849 "CARGO_PKG_VERSION_PATCH": "98",
851 "CARGO_PKG_REPOSITORY": "",
852 "CARGO_PKG_VERSION_MINOR": "2",
853 "CARGO_PKG_VERSION_PRE": "",
858 "crate has not (yet) been built",
862 "https://github.com/rust-lang/libc",
865 is_proc_macro: false,
873 fn cargo_hello_world_project_model() {
874 let crate_graph = load_cargo("hello-world-metadata.json");
883 root_file_id: FileId(
886 edition: Edition2018,
892 crate_name: CrateName(
895 canonical_name: "hello-world",
898 cfg_options: CfgOptions(
904 potential_cfg_options: CfgOptions(
912 "CARGO_PKG_LICENSE": "",
913 "CARGO_PKG_VERSION_MAJOR": "0",
914 "CARGO_MANIFEST_DIR": "$ROOT$hello-world",
915 "CARGO_PKG_VERSION": "0.1.0",
916 "CARGO_PKG_AUTHORS": "",
917 "CARGO_CRATE_NAME": "hello_world",
918 "CARGO_PKG_LICENSE_FILE": "",
919 "CARGO_PKG_HOMEPAGE": "",
920 "CARGO_PKG_DESCRIPTION": "",
921 "CARGO_PKG_NAME": "hello-world",
922 "CARGO_PKG_VERSION_PATCH": "0",
924 "CARGO_PKG_REPOSITORY": "",
925 "CARGO_PKG_VERSION_MINOR": "1",
926 "CARGO_PKG_VERSION_PRE": "",
941 "crate has not (yet) been built",
946 is_proc_macro: false,
951 root_file_id: FileId(
954 edition: Edition2018,
960 crate_name: CrateName(
963 canonical_name: "hello-world",
966 cfg_options: CfgOptions(
972 potential_cfg_options: CfgOptions(
980 "CARGO_PKG_LICENSE": "",
981 "CARGO_PKG_VERSION_MAJOR": "0",
982 "CARGO_MANIFEST_DIR": "$ROOT$hello-world",
983 "CARGO_PKG_VERSION": "0.1.0",
984 "CARGO_PKG_AUTHORS": "",
985 "CARGO_CRATE_NAME": "hello_world",
986 "CARGO_PKG_LICENSE_FILE": "",
987 "CARGO_PKG_HOMEPAGE": "",
988 "CARGO_PKG_DESCRIPTION": "",
989 "CARGO_PKG_NAME": "hello-world",
990 "CARGO_PKG_VERSION_PATCH": "0",
992 "CARGO_PKG_REPOSITORY": "",
993 "CARGO_PKG_VERSION_MINOR": "1",
994 "CARGO_PKG_VERSION_PRE": "",
1018 "crate has not (yet) been built",
1023 is_proc_macro: false,
1028 root_file_id: FileId(
1031 edition: Edition2018,
1037 crate_name: CrateName(
1040 canonical_name: "an-example",
1043 cfg_options: CfgOptions(
1049 potential_cfg_options: CfgOptions(
1057 "CARGO_PKG_LICENSE": "",
1058 "CARGO_PKG_VERSION_MAJOR": "0",
1059 "CARGO_MANIFEST_DIR": "$ROOT$hello-world",
1060 "CARGO_PKG_VERSION": "0.1.0",
1061 "CARGO_PKG_AUTHORS": "",
1062 "CARGO_CRATE_NAME": "hello_world",
1063 "CARGO_PKG_LICENSE_FILE": "",
1064 "CARGO_PKG_HOMEPAGE": "",
1065 "CARGO_PKG_DESCRIPTION": "",
1066 "CARGO_PKG_NAME": "hello-world",
1067 "CARGO_PKG_VERSION_PATCH": "0",
1069 "CARGO_PKG_REPOSITORY": "",
1070 "CARGO_PKG_VERSION_MINOR": "1",
1071 "CARGO_PKG_VERSION_PRE": "",
1095 "crate has not (yet) been built",
1100 is_proc_macro: false,
1105 root_file_id: FileId(
1108 edition: Edition2018,
1114 crate_name: CrateName(
1117 canonical_name: "it",
1120 cfg_options: CfgOptions(
1126 potential_cfg_options: CfgOptions(
1134 "CARGO_PKG_LICENSE": "",
1135 "CARGO_PKG_VERSION_MAJOR": "0",
1136 "CARGO_MANIFEST_DIR": "$ROOT$hello-world",
1137 "CARGO_PKG_VERSION": "0.1.0",
1138 "CARGO_PKG_AUTHORS": "",
1139 "CARGO_CRATE_NAME": "hello_world",
1140 "CARGO_PKG_LICENSE_FILE": "",
1141 "CARGO_PKG_HOMEPAGE": "",
1142 "CARGO_PKG_DESCRIPTION": "",
1143 "CARGO_PKG_NAME": "hello-world",
1144 "CARGO_PKG_VERSION_PATCH": "0",
1146 "CARGO_PKG_REPOSITORY": "",
1147 "CARGO_PKG_VERSION_MINOR": "1",
1148 "CARGO_PKG_VERSION_PRE": "",
1172 "crate has not (yet) been built",
1177 is_proc_macro: false,
1182 root_file_id: FileId(
1185 edition: Edition2015,
1191 crate_name: CrateName(
1194 canonical_name: "libc",
1197 cfg_options: CfgOptions(
1204 potential_cfg_options: CfgOptions(
1208 "feature=const-extern-fn",
1210 "feature=extra_traits",
1211 "feature=rustc-dep-of-std",
1218 "CARGO_PKG_LICENSE": "",
1219 "CARGO_PKG_VERSION_MAJOR": "0",
1220 "CARGO_MANIFEST_DIR": "$ROOT$.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.98",
1221 "CARGO_PKG_VERSION": "0.2.98",
1222 "CARGO_PKG_AUTHORS": "",
1223 "CARGO_CRATE_NAME": "libc",
1224 "CARGO_PKG_LICENSE_FILE": "",
1225 "CARGO_PKG_HOMEPAGE": "",
1226 "CARGO_PKG_DESCRIPTION": "",
1227 "CARGO_PKG_NAME": "libc",
1228 "CARGO_PKG_VERSION_PATCH": "98",
1230 "CARGO_PKG_REPOSITORY": "",
1231 "CARGO_PKG_VERSION_MINOR": "2",
1232 "CARGO_PKG_VERSION_PRE": "",
1237 "crate has not (yet) been built",
1241 "https://github.com/rust-lang/libc",
1244 is_proc_macro: false,
1252 fn rust_project_hello_world_project_model() {
1253 let crate_graph = load_rust_project("hello-world-project.json");
1262 root_file_id: FileId(
1265 edition: Edition2018,
1269 crate_name: CrateName(
1272 canonical_name: "alloc",
1275 cfg_options: CfgOptions(
1278 potential_cfg_options: CfgOptions(
1296 "no proc macro loaded for sysroot crate",
1301 is_proc_macro: false,
1306 root_file_id: FileId(
1309 edition: Edition2018,
1313 crate_name: CrateName(
1316 canonical_name: "core",
1319 cfg_options: CfgOptions(
1322 potential_cfg_options: CfgOptions(
1330 "no proc macro loaded for sysroot crate",
1335 is_proc_macro: false,
1340 root_file_id: FileId(
1343 edition: Edition2018,
1347 crate_name: CrateName(
1350 canonical_name: "panic_abort",
1353 cfg_options: CfgOptions(
1356 potential_cfg_options: CfgOptions(
1364 "no proc macro loaded for sysroot crate",
1369 is_proc_macro: false,
1374 root_file_id: FileId(
1377 edition: Edition2018,
1381 crate_name: CrateName(
1384 canonical_name: "panic_unwind",
1387 cfg_options: CfgOptions(
1390 potential_cfg_options: CfgOptions(
1398 "no proc macro loaded for sysroot crate",
1403 is_proc_macro: false,
1408 root_file_id: FileId(
1411 edition: Edition2018,
1415 crate_name: CrateName(
1418 canonical_name: "proc_macro",
1421 cfg_options: CfgOptions(
1424 potential_cfg_options: CfgOptions(
1442 "no proc macro loaded for sysroot crate",
1447 is_proc_macro: false,
1452 root_file_id: FileId(
1455 edition: Edition2018,
1459 crate_name: CrateName(
1460 "profiler_builtins",
1462 canonical_name: "profiler_builtins",
1465 cfg_options: CfgOptions(
1468 potential_cfg_options: CfgOptions(
1476 "no proc macro loaded for sysroot crate",
1481 is_proc_macro: false,
1486 root_file_id: FileId(
1489 edition: Edition2018,
1493 crate_name: CrateName(
1496 canonical_name: "std",
1499 cfg_options: CfgOptions(
1502 potential_cfg_options: CfgOptions(
1550 "profiler_builtins",
1592 "no proc macro loaded for sysroot crate",
1597 is_proc_macro: false,
1602 root_file_id: FileId(
1605 edition: Edition2018,
1609 crate_name: CrateName(
1612 canonical_name: "std_detect",
1615 cfg_options: CfgOptions(
1618 potential_cfg_options: CfgOptions(
1626 "no proc macro loaded for sysroot crate",
1631 is_proc_macro: false,
1636 root_file_id: FileId(
1639 edition: Edition2018,
1643 crate_name: CrateName(
1646 canonical_name: "term",
1649 cfg_options: CfgOptions(
1652 potential_cfg_options: CfgOptions(
1660 "no proc macro loaded for sysroot crate",
1665 is_proc_macro: false,
1670 root_file_id: FileId(
1673 edition: Edition2018,
1677 crate_name: CrateName(
1680 canonical_name: "test",
1683 cfg_options: CfgOptions(
1686 potential_cfg_options: CfgOptions(
1694 "no proc macro loaded for sysroot crate",
1699 is_proc_macro: false,
1704 root_file_id: FileId(
1707 edition: Edition2018,
1711 crate_name: CrateName(
1714 canonical_name: "unwind",
1717 cfg_options: CfgOptions(
1720 potential_cfg_options: CfgOptions(
1728 "no proc macro loaded for sysroot crate",
1733 is_proc_macro: false,
1738 root_file_id: FileId(
1741 edition: Edition2018,
1745 crate_name: CrateName(
1748 canonical_name: "hello_world",
1751 cfg_options: CfgOptions(
1754 potential_cfg_options: CfgOptions(
1799 "no proc macro dylib present",
1804 is_proc_macro: false,
1812 fn rust_project_is_proc_macro_has_proc_macro_dep() {
1813 let crate_graph = load_rust_project("is-proc-macro-project.json");
1814 // Since the project only defines one crate (outside the sysroot crates),
1815 // it should be the one with the biggest Id.
1816 let crate_id = crate_graph.iter().max().unwrap();
1817 let crate_data = &crate_graph[crate_id];
1818 // Assert that the project crate with `is_proc_macro` has a dependency
1819 // on the proc_macro sysroot crate.
1820 crate_data.dependencies.iter().find(|&dep| dep.name.deref() == "proc_macro").unwrap();