@@ -18,65 +18,38 @@ use crate::{
1818} ;
1919
2020fn load_cargo ( file : & str ) -> ( CrateGraph , ProcMacroPaths ) {
21- load_cargo_with_overrides ( file, CfgOverrides :: default ( ) )
21+ let project_workspace = load_workspace_from_metadata ( file) ;
22+ to_crate_graph ( project_workspace, & mut Default :: default ( ) )
2223}
2324
2425fn load_cargo_with_overrides (
2526 file : & str ,
2627 cfg_overrides : CfgOverrides ,
2728) -> ( CrateGraph , ProcMacroPaths ) {
28- let meta: Metadata = get_test_json_file ( file) ;
29- let manifest_path =
30- ManifestPath :: try_from ( AbsPathBuf :: try_from ( meta. workspace_root . clone ( ) ) . unwrap ( ) ) . unwrap ( ) ;
31- let cargo_workspace = CargoWorkspace :: new ( meta, manifest_path, Default :: default ( ) ) ;
32- let project_workspace = ProjectWorkspace {
33- kind : ProjectWorkspaceKind :: Cargo {
34- cargo : cargo_workspace,
35- build_scripts : WorkspaceBuildScripts :: default ( ) ,
36- rustc : Err ( None ) ,
37- error : None ,
38- set_test : true ,
39- } ,
40- cfg_overrides,
41- sysroot : Sysroot :: empty ( ) ,
42- rustc_cfg : Vec :: new ( ) ,
43- toolchain : None ,
44- target_layout : Err ( "target_data_layout not loaded" . into ( ) ) ,
45- } ;
46- to_crate_graph ( project_workspace)
29+ let project_workspace =
30+ ProjectWorkspace { cfg_overrides, ..load_workspace_from_metadata ( file) } ;
31+ to_crate_graph ( project_workspace, & mut Default :: default ( ) )
4732}
4833
49- fn load_cargo_with_fake_sysroot (
50- file_map : & mut FxHashMap < AbsPathBuf , FileId > ,
51- file : & str ,
52- ) -> ( CrateGraph , ProcMacroPaths ) {
34+ fn load_workspace_from_metadata ( file : & str ) -> ProjectWorkspace {
5335 let meta: Metadata = get_test_json_file ( file) ;
5436 let manifest_path =
5537 ManifestPath :: try_from ( AbsPathBuf :: try_from ( meta. workspace_root . clone ( ) ) . unwrap ( ) ) . unwrap ( ) ;
5638 let cargo_workspace = CargoWorkspace :: new ( meta, manifest_path, Default :: default ( ) ) ;
57- let project_workspace = ProjectWorkspace {
39+ ProjectWorkspace {
5840 kind : ProjectWorkspaceKind :: Cargo {
5941 cargo : cargo_workspace,
6042 build_scripts : WorkspaceBuildScripts :: default ( ) ,
6143 rustc : Err ( None ) ,
6244 error : None ,
6345 set_test : true ,
6446 } ,
65- sysroot : get_fake_sysroot ( ) ,
66- rustc_cfg : Vec :: new ( ) ,
6747 cfg_overrides : Default :: default ( ) ,
48+ sysroot : Sysroot :: empty ( ) ,
49+ rustc_cfg : Vec :: new ( ) ,
6850 toolchain : None ,
6951 target_layout : Err ( "target_data_layout not loaded" . into ( ) ) ,
70- } ;
71- project_workspace. to_crate_graph (
72- & mut {
73- |path| {
74- let len = file_map. len ( ) ;
75- Some ( * file_map. entry ( path. to_path_buf ( ) ) . or_insert ( FileId :: from_raw ( len as u32 ) ) )
76- }
77- } ,
78- & Default :: default ( ) ,
79- )
52+ }
8053}
8154
8255fn load_rust_project ( file : & str ) -> ( CrateGraph , ProcMacroPaths ) {
@@ -91,7 +64,7 @@ fn load_rust_project(file: &str) -> (CrateGraph, ProcMacroPaths) {
9164 target_layout : Err ( Arc :: from ( "test has no data layout" ) ) ,
9265 cfg_overrides : Default :: default ( ) ,
9366 } ;
94- to_crate_graph ( project_workspace)
67+ to_crate_graph ( project_workspace, & mut Default :: default ( ) )
9568}
9669
9770fn get_test_json_file < T : DeserializeOwned > ( file : & str ) -> T {
@@ -160,13 +133,15 @@ fn rooted_project_json(data: ProjectJsonData) -> ProjectJson {
160133 ProjectJson :: new ( None , base, data)
161134}
162135
163- fn to_crate_graph ( project_workspace : ProjectWorkspace ) -> ( CrateGraph , ProcMacroPaths ) {
136+ fn to_crate_graph (
137+ project_workspace : ProjectWorkspace ,
138+ file_map : & mut FxHashMap < AbsPathBuf , FileId > ,
139+ ) -> ( CrateGraph , ProcMacroPaths ) {
164140 project_workspace. to_crate_graph (
165141 & mut {
166- let mut counter = 0 ;
167- move |_path| {
168- counter += 1 ;
169- Some ( FileId :: from_raw ( counter) )
142+ |path| {
143+ let len = file_map. len ( ) ;
144+ Some ( * file_map. entry ( path. to_path_buf ( ) ) . or_insert ( FileId :: from_raw ( len as u32 ) ) )
170145 }
171146 } ,
172147 & Default :: default ( ) ,
@@ -256,8 +231,7 @@ fn rust_project_is_proc_macro_has_proc_macro_dep() {
256231
257232#[ test]
258233fn crate_graph_dedup_identical ( ) {
259- let ( mut crate_graph, proc_macros) =
260- load_cargo_with_fake_sysroot ( & mut Default :: default ( ) , "regex-metadata.json" ) ;
234+ let ( mut crate_graph, proc_macros) = load_cargo ( "regex-metadata.json" ) ;
261235 crate_graph. sort_deps ( ) ;
262236
263237 let ( d_crate_graph, mut d_proc_macros) = ( crate_graph. clone ( ) , proc_macros. clone ( ) ) ;
@@ -269,17 +243,19 @@ fn crate_graph_dedup_identical() {
269243
270244#[ test]
271245fn crate_graph_dedup ( ) {
272- let path_map = & mut Default :: default ( ) ;
273- let ( mut crate_graph, _proc_macros) =
274- load_cargo_with_fake_sysroot ( path_map, "ripgrep-metadata.json" ) ;
275- assert_eq ! ( crate_graph. iter( ) . count( ) , 81 ) ;
276- crate_graph. sort_deps ( ) ;
277- let ( regex_crate_graph, mut regex_proc_macros) =
278- load_cargo_with_fake_sysroot ( path_map, "regex-metadata.json" ) ;
279- assert_eq ! ( regex_crate_graph. iter( ) . count( ) , 60 ) ;
246+ let mut file_map = Default :: default ( ) ;
247+
248+ let ripgrep_workspace = load_workspace_from_metadata ( "ripgrep-metadata.json" ) ;
249+ let ( mut crate_graph, _proc_macros) = to_crate_graph ( ripgrep_workspace, & mut file_map) ;
250+ assert_eq ! ( crate_graph. iter( ) . count( ) , 71 ) ;
280251
252+ let regex_workspace = load_workspace_from_metadata ( "regex-metadata.json" ) ;
253+ let ( regex_crate_graph, mut regex_proc_macros) = to_crate_graph ( regex_workspace, & mut file_map) ;
254+ assert_eq ! ( regex_crate_graph. iter( ) . count( ) , 50 ) ;
255+
256+ crate_graph. sort_deps ( ) ;
281257 crate_graph. extend ( regex_crate_graph, & mut regex_proc_macros) ;
282- assert_eq ! ( crate_graph. iter( ) . count( ) , 118 ) ;
258+ assert_eq ! ( crate_graph. iter( ) . count( ) , 108 ) ;
283259}
284260
285261#[ test]
0 commit comments