@@ -18,65 +18,38 @@ use crate::{
18
18
} ;
19
19
20
20
fn 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 ( ) )
22
23
}
23
24
24
25
fn load_cargo_with_overrides (
25
26
file : & str ,
26
27
cfg_overrides : CfgOverrides ,
27
28
) -> ( 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 ( ) )
47
32
}
48
33
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 {
53
35
let meta: Metadata = get_test_json_file ( file) ;
54
36
let manifest_path =
55
37
ManifestPath :: try_from ( AbsPathBuf :: try_from ( meta. workspace_root . clone ( ) ) . unwrap ( ) ) . unwrap ( ) ;
56
38
let cargo_workspace = CargoWorkspace :: new ( meta, manifest_path, Default :: default ( ) ) ;
57
- let project_workspace = ProjectWorkspace {
39
+ ProjectWorkspace {
58
40
kind : ProjectWorkspaceKind :: Cargo {
59
41
cargo : cargo_workspace,
60
42
build_scripts : WorkspaceBuildScripts :: default ( ) ,
61
43
rustc : Err ( None ) ,
62
44
error : None ,
63
45
set_test : true ,
64
46
} ,
65
- sysroot : get_fake_sysroot ( ) ,
66
- rustc_cfg : Vec :: new ( ) ,
67
47
cfg_overrides : Default :: default ( ) ,
48
+ sysroot : Sysroot :: empty ( ) ,
49
+ rustc_cfg : Vec :: new ( ) ,
68
50
toolchain : None ,
69
51
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
+ }
80
53
}
81
54
82
55
fn load_rust_project ( file : & str ) -> ( CrateGraph , ProcMacroPaths ) {
@@ -91,7 +64,7 @@ fn load_rust_project(file: &str) -> (CrateGraph, ProcMacroPaths) {
91
64
target_layout : Err ( Arc :: from ( "test has no data layout" ) ) ,
92
65
cfg_overrides : Default :: default ( ) ,
93
66
} ;
94
- to_crate_graph ( project_workspace)
67
+ to_crate_graph ( project_workspace, & mut Default :: default ( ) )
95
68
}
96
69
97
70
fn get_test_json_file < T : DeserializeOwned > ( file : & str ) -> T {
@@ -160,13 +133,15 @@ fn rooted_project_json(data: ProjectJsonData) -> ProjectJson {
160
133
ProjectJson :: new ( None , base, data)
161
134
}
162
135
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 ) {
164
140
project_workspace. to_crate_graph (
165
141
& 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 ) ) )
170
145
}
171
146
} ,
172
147
& Default :: default ( ) ,
@@ -256,8 +231,7 @@ fn rust_project_is_proc_macro_has_proc_macro_dep() {
256
231
257
232
#[ test]
258
233
fn 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" ) ;
261
235
crate_graph. sort_deps ( ) ;
262
236
263
237
let ( d_crate_graph, mut d_proc_macros) = ( crate_graph. clone ( ) , proc_macros. clone ( ) ) ;
@@ -269,17 +243,19 @@ fn crate_graph_dedup_identical() {
269
243
270
244
#[ test]
271
245
fn 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 ) ;
280
251
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 ( ) ;
281
257
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 ) ;
283
259
}
284
260
285
261
#[ test]
0 commit comments