@@ -8,47 +8,61 @@ use sysinfo::System;
88struct Args {
99 input : String ,
1010}
11- fn main ( ) {
11+ fn get_memory ( ) -> u64 {
12+ let s = System :: new_all ( ) ;
13+ let current = s. process ( sysinfo:: get_current_pid ( ) . unwrap ( ) ) . unwrap ( ) ;
14+ current. memory ( )
15+ }
16+ fn collect_files ( dir : String ) -> Vec < path:: PathBuf > {
17+ glob ( & format ! ( "{}/**/*.ts*" , dir) )
18+ . unwrap ( )
19+ . filter_map ( |file| file. ok ( ) )
20+ . collect ( )
21+ }
22+ fn parse_file (
23+ file : & path:: PathBuf ,
24+ tx : & crossbeam:: channel:: Sender < String > ,
25+ ) -> Option < Box < tsx:: Program > > {
26+ if file. is_dir ( ) {
27+ return None ;
28+ }
29+ return match parse_file_typescript ( file. to_str ( ) . unwrap ( ) ) {
30+ Ok ( program) => Some ( program) ,
31+ Err ( e) => {
32+ tx. send ( e. to_string ( ) ) . unwrap ( ) ;
33+ None
34+ }
35+ } ;
36+ }
37+ fn parse_files ( dir : String ) -> ( Vec < Box < tsx:: Program > > , Vec < String > ) {
1238 rayon:: ThreadPoolBuilder :: new ( )
1339 . stack_size ( 1024 * 1024 * 1024 * 10 )
1440 . build_global ( )
1541 . unwrap ( ) ;
16- let args = Args :: parse ( ) ;
17- let dir = args. input ;
18- let mut errors = Vec :: new ( ) ;
1942 let ( tx, rx) = crossbeam:: channel:: unbounded ( ) ;
20- let start = Instant :: now ( ) ;
21- let files_to_parse: Vec < Result < path:: PathBuf , glob:: GlobError > > =
22- glob ( & format ! ( "{}/**/*.ts*" , dir) ) . unwrap ( ) . collect ( ) ;
23-
43+ let mut errors = Vec :: new ( ) ;
44+ let files_to_parse = collect_files ( dir) ;
45+ log:: info!( "Parsing {} files" , files_to_parse. len( ) ) ;
2446 let files: Vec < Box < tsx:: Program > > = files_to_parse
2547 . par_iter ( )
26- . filter_map ( |file| {
27- if let Ok ( file) = file {
28- if file. is_dir ( ) {
29- return None ;
30- }
31- return match parse_file_typescript ( file. to_str ( ) . unwrap ( ) ) {
32- Ok ( program) => Some ( program) ,
33- Err ( e) => {
34- tx. send ( e. to_string ( ) ) . unwrap ( ) ;
35- None
36- }
37- } ;
38- }
39- None
40- } )
48+ . filter_map ( |file| parse_file ( file, & tx) )
4149 . collect ( ) ;
42- let end = Instant :: now ( ) ;
43- let duration: std:: time:: Duration = end. duration_since ( start) ;
4450 drop ( tx) ;
4551 for e in rx. iter ( ) {
4652 errors. push ( e) ;
4753 }
48- let s = System :: new_all ( ) ;
49- let current = s. process ( sysinfo:: get_current_pid ( ) . unwrap ( ) ) . unwrap ( ) ;
50- let memory = current. memory ( ) ;
51- println ! (
54+ ( files, errors)
55+ }
56+ fn main ( ) {
57+ env_logger:: init ( ) ;
58+ let args = Args :: parse ( ) ;
59+ let dir = args. input ;
60+ let start = Instant :: now ( ) ;
61+ let ( files, errors) = parse_files ( dir) ;
62+ let end = Instant :: now ( ) ;
63+ let duration: std:: time:: Duration = end. duration_since ( start) ;
64+ let memory = get_memory ( ) ;
65+ log:: info!(
5266 "{} files parsed in {:?}.{} seconds with {} errors. Using {} MB of memory" ,
5367 files. len( ) ,
5468 duration. as_secs( ) ,
0 commit comments