@@ -6,6 +6,7 @@ use std::collections::HashMap;
66use std:: error:: Error ;
77use std:: path:: Path ;
88use strum:: IntoEnumIterator ;
9+ use globset:: { Glob , GlobSetBuilder } ;
910
1011pub mod language;
1112
@@ -22,6 +23,13 @@ pub fn get_size_by_language_sorted(
2223 language_types : & [ LanguageType ] ,
2324 include_hidden : bool ,
2425) -> Result < Vec < ( Language , usize ) > > {
26+ let globset = globs_to_exclude. iter ( )
27+ . filter_map ( |glob| Glob :: new ( glob) . ok ( ) )
28+ . fold ( GlobSetBuilder :: new ( ) , |mut builder, glob| {
29+ builder. add ( glob) ;
30+ builder
31+ } )
32+ . build ( ) ?;
2533 let analysis = match get_statistics ( dir, globs_to_exclude, language_types, include_hidden) {
2634 Ok ( stats) => stats,
2735 Err ( e) => return Err ( anyhow ! ( "Could not analyze repository: {}" , e) )
@@ -30,6 +38,7 @@ pub fn get_size_by_language_sorted(
3038 // NOTE If finer control is ever needed, summary_with can be used.
3139 let mut size_by_language: Vec < ( Language , _ ) > = analysis. iter ( )
3240 . filter ( |( path, _) | include_hidden || !is_hidden ( path) )
41+ . filter ( |( path, _) | !globset. is_match ( path) )
3342 . filter ( |( _, entry) | {
3443 let lang_type = LanguageType ( entry. language ( ) . category ( ) ) ;
3544 language_types. contains ( & lang_type)
0 commit comments