11use crate :: rust_file:: RustFile ;
22use std:: collections:: HashSet ;
33use std:: ops:: Deref ;
4- use syn:: { File , Item , ItemUse , UseTree } ;
4+ use syn:: { Item , ItemUse , UseTree } ;
55
66fn parse_module_item ( item : & Item , dependencies : & mut Vec < String > , current_module : & str ) {
77 match item {
@@ -20,25 +20,16 @@ fn parse_module_item(item: &Item, dependencies: &mut Vec<String>, current_module
2020}
2121
2222pub fn get_dependencies_in_file ( file : & RustFile ) -> Vec < String > {
23- get_dependencies_in_ast ( & file. ast , & file. logical_path )
24- }
25-
26- fn get_dependencies_in_ast ( ast : & File , current_module_logical_path : & str ) -> Vec < String > {
2723 let mut dependencies = Vec :: new ( ) ;
2824
29- for item in ast. items . iter ( ) {
25+ for item in file . ast . items . iter ( ) {
3026 match item {
3127 Item :: Use ( ItemUse { tree, .. } ) => {
32- collect_dependencies_from_tree (
33- tree,
34- & mut dependencies,
35- current_module_logical_path,
36- "" ,
37- ) ;
28+ collect_dependencies_from_tree ( tree, & mut dependencies, & file. logical_path , "" ) ;
3829 }
3930 Item :: Mod ( mod_item) => {
4031 if let Some ( ( _, items) ) = & mod_item. content {
41- let module = format ! ( "{}::{}" , current_module_logical_path , mod_item. ident) ;
32+ let module = format ! ( "{}::{}" , & file . logical_path , mod_item. ident) ;
4233 for sub_item in items. iter ( ) {
4334 parse_module_item ( sub_item, & mut dependencies, & module) ;
4435 }
@@ -120,18 +111,9 @@ fn collect_dependencies_from_tree(
120111mod tests {
121112 use super :: * ;
122113
123- fn get_dependencies_in_str ( s : & str , current_module_logical_path : & str ) -> Vec < String > {
124- let ast: File = match syn:: parse_str ( s) {
125- Ok ( ast) => ast,
126- Err ( e) => panic ! ( "Failed to parse string '{}': {}" , s, e) ,
127- } ;
128-
129- get_dependencies_in_ast ( & ast, current_module_logical_path)
130- }
131-
132114 #[ test]
133115 pub fn test_parsing ( ) {
134- let dependencies = get_dependencies_in_file ( & RustFile :: from (
116+ let dependencies = get_dependencies_in_file ( & RustFile :: from_file_system (
135117 "./examples/sample_project/src/conversion/application.rs" ,
136118 ) ) ;
137119 assert_eq ! (
@@ -146,7 +128,7 @@ mod tests {
146128
147129 #[ test]
148130 pub fn test_workspace_parsing ( ) {
149- let dependencies = get_dependencies_in_file ( & RustFile :: from (
131+ let dependencies = get_dependencies_in_file ( & RustFile :: from_file_system (
150132 "./examples/workspace_project/conversion/src/application.rs" ,
151133 ) ) ;
152134 assert_eq ! (
@@ -186,7 +168,11 @@ mod tests {
186168 };
187169 "# ;
188170
189- let dependencies = get_dependencies_in_str ( source, "crate::domain" ) ;
171+ let dependencies = get_dependencies_in_file ( & RustFile :: from_content (
172+ "/src/domain.rs" ,
173+ "crate::domain" ,
174+ source,
175+ ) ) ;
190176
191177 let expected_dependencies = vec ! [
192178 "crate::application::container::self" ,
@@ -233,7 +219,8 @@ mod tests {
233219 use std::fmt::{Display, Formatter};
234220 "# ;
235221
236- let dependencies = get_dependencies_in_str ( source, "my_app" ) ;
222+ let dependencies =
223+ get_dependencies_in_file ( & RustFile :: from_content ( "/src/my_app.rs" , "my_app" , source) ) ;
237224
238225 let expected_dependencies = vec ! [
239226 "my_app::dependency_parsing::get_dependencies_in_file" ,
@@ -251,7 +238,7 @@ mod tests {
251238 #[ test]
252239 fn test_super_dependencies ( ) {
253240 assert_eq ! (
254- get_dependencies_in_file( & RustFile :: from (
241+ get_dependencies_in_file( & RustFile :: from_file_system (
255242 "./examples/sample_project/src/conversion/infrastructure.rs"
256243 ) ) ,
257244 vec![ String :: from(
@@ -266,7 +253,11 @@ mod tests {
266253 use crate::module::*;
267254 "# ;
268255
269- let dependencies = get_dependencies_in_str ( source, "crate::module" ) ;
256+ let dependencies = get_dependencies_in_file ( & RustFile :: from_content (
257+ "/src/domain.rs" ,
258+ "crate::module" ,
259+ source,
260+ ) ) ;
270261
271262 let expected_dependencies = vec ! [ "crate::module::*" ] ;
272263
@@ -279,7 +270,11 @@ mod tests {
279270 use crate::module::original_name as alias_name;
280271 "# ;
281272
282- let dependencies = get_dependencies_in_str ( source, "crate::module" ) ;
273+ let dependencies = get_dependencies_in_file ( & RustFile :: from_content (
274+ "/src/domain.rs" ,
275+ "crate::module" ,
276+ source,
277+ ) ) ;
283278
284279 let expected_dependencies = vec ! [ "crate::module::original_name" ] ;
285280
@@ -295,7 +290,8 @@ mod tests {
295290 }
296291 "# ;
297292
298- let dependencies = get_dependencies_in_str ( source, "crate" ) ;
293+ let dependencies =
294+ get_dependencies_in_file ( & RustFile :: from_content ( "/src/domain.rs" , "crate" , source) ) ;
299295
300296 let expected_dependencies = vec ! [ "crate::some::dependency" , "crate::another::dependency" ] ;
301297
@@ -312,7 +308,8 @@ mod tests {
312308 }
313309 "# ;
314310
315- let dependencies = get_dependencies_in_str ( source, "crate" ) ;
311+ let dependencies =
312+ get_dependencies_in_file ( & RustFile :: from_content ( "/src/domain.rs" , "crate" , source) ) ;
316313
317314 let expected_dependencies = vec ! [ "crate::nested::dependency" . to_string( ) ] ;
318315
@@ -325,7 +322,8 @@ mod tests {
325322 mod submodule {}
326323 "# ;
327324
328- let dependencies = get_dependencies_in_str ( source, "crate" ) ;
325+ let dependencies =
326+ get_dependencies_in_file ( & RustFile :: from_content ( "/src/domain.rs" , "crate" , source) ) ;
329327
330328 let expected_dependencies: Vec < String > = vec ! [ ] ;
331329
@@ -344,7 +342,8 @@ mod tests {
344342 }
345343 "# ;
346344
347- let dependencies = get_dependencies_in_str ( source, "crate" ) ;
345+ let dependencies =
346+ get_dependencies_in_file ( & RustFile :: from_content ( "/src/domain.rs" , "crate" , source) ) ;
348347
349348 let expected_dependencies = vec ! [ "crate::some::dependency" , "crate::nested::dependency" ] ;
350349
@@ -359,7 +358,11 @@ mod tests {
359358 }
360359 "# ;
361360
362- let dependencies = get_dependencies_in_str ( source, "crate::application::use_case" ) ;
361+ let dependencies = get_dependencies_in_file ( & RustFile :: from_content (
362+ "/src/domain.rs" ,
363+ "crate::application::use_case" ,
364+ source,
365+ ) ) ;
363366
364367 let expected_dependencies = vec ! [ "crate::application::use_case::*" ] ;
365368
@@ -373,7 +376,11 @@ mod tests {
373376 use super::query;
374377 "# ;
375378
376- let dependencies = get_dependencies_in_str ( source, "crate::application::use_case" ) ;
379+ let dependencies = get_dependencies_in_file ( & RustFile :: from_content (
380+ "/src/domain.rs" ,
381+ "crate::application::use_case" ,
382+ source,
383+ ) ) ;
377384
378385 let expected_dependencies = vec ! [ "crate::some::dependency" , "crate::application::query" ] ;
379386
0 commit comments