@@ -35,6 +35,8 @@ pub struct ProjectBuilder<'a> {
3535 pub codeowners_file_path : PathBuf ,
3636}
3737
38+ const INITIAL_VECTOR_CAPACITY : usize = 1000 ;
39+
3840impl < ' a > ProjectBuilder < ' a > {
3941 pub fn new ( config : & ' a Config , base_path : PathBuf , codeowners_file_path : PathBuf ) -> Self {
4042 Self {
@@ -46,8 +48,7 @@ impl<'a> ProjectBuilder<'a> {
4648
4749 #[ instrument( level = "debug" , skip_all) ]
4850 pub fn build ( & mut self ) -> Result < Project , Error > {
49- let mut entry_types = Vec :: new ( ) ;
50-
51+ let mut entry_types = Vec :: with_capacity ( INITIAL_VECTOR_CAPACITY ) ;
5152 let mut builder = WalkBuilder :: new ( & self . base_path ) ;
5253 builder. hidden ( false ) ;
5354 let walkdir = builder. build ( ) ;
@@ -56,7 +57,9 @@ impl<'a> ProjectBuilder<'a> {
5657 let entry = entry. change_context ( Error :: Io ) ?;
5758 entry_types. push ( self . build_entry_type ( entry) ?) ;
5859 }
59- self . build_project_from_entry_types ( entry_types)
60+ let project = self . build_project_from_entry_types ( entry_types) ?;
61+
62+ Ok ( project)
6063 }
6164
6265 fn build_entry_type ( & mut self , entry : ignore:: DirEntry ) -> Result < EntryType , Error > {
@@ -68,22 +71,20 @@ impl<'a> ProjectBuilder<'a> {
6871 if is_dir {
6972 return Ok ( EntryType :: Directory ( absolute_path. to_owned ( ) , relative_path. to_owned ( ) ) ) ;
7073 }
71- let file_name = relative_path. file_name ( ) . expect ( "expected a file_name" ) ;
74+ let file_name = relative_path
75+ . file_name ( )
76+ . expect ( "expected a file_name" )
77+ . to_string_lossy ( )
78+ . to_lowercase ( ) ;
7279
73- match file_name. to_str ( ) . unwrap_or ( "" ) {
74- name if name. eq_ignore_ascii_case ( "package.yml" )
75- && matches_globs ( relative_path. parent ( ) . unwrap ( ) , & self . config . ruby_package_paths ) =>
76- {
80+ match file_name. as_str ( ) {
81+ name if name == "package.yml" && matches_globs ( relative_path. parent ( ) . unwrap ( ) , & self . config . ruby_package_paths ) => {
7782 Ok ( EntryType :: RubyPackage ( absolute_path. to_owned ( ) , relative_path. to_owned ( ) ) )
7883 }
79- name if name. eq_ignore_ascii_case ( "package.json" )
80- && matches_globs ( relative_path. parent ( ) . unwrap ( ) , & self . config . javascript_package_paths ) =>
81- {
84+ name if name == "package.json" && matches_globs ( relative_path. parent ( ) . unwrap ( ) , & self . config . javascript_package_paths ) => {
8285 Ok ( EntryType :: JavascriptPackage ( absolute_path. to_owned ( ) , relative_path. to_owned ( ) ) )
8386 }
84- name if name. eq_ignore_ascii_case ( ".codeowner" ) => {
85- Ok ( EntryType :: CodeownerFile ( absolute_path. to_owned ( ) , relative_path. to_owned ( ) ) )
86- }
87+ ".codeowner" => Ok ( EntryType :: CodeownerFile ( absolute_path. to_owned ( ) , relative_path. to_owned ( ) ) ) ,
8788 _ if matches_globs ( & relative_path, & self . config . team_file_glob ) => {
8889 Ok ( EntryType :: TeamFile ( absolute_path. to_owned ( ) , relative_path. to_owned ( ) ) )
8990 }
@@ -101,7 +102,7 @@ impl<'a> ProjectBuilder<'a> {
101102 . fold (
102103 || {
103104 (
104- Vec :: < ProjectFile > :: new ( ) ,
105+ Vec :: < ProjectFile > :: with_capacity ( INITIAL_VECTOR_CAPACITY ) ,
105106 Vec :: < Package > :: new ( ) ,
106107 Vec :: < VendoredGem > :: new ( ) ,
107108 Vec :: < DirectoryCodeownersFile > :: new ( ) ,
@@ -223,7 +224,6 @@ fn build_project_file(path: PathBuf) -> ProjectFile {
223224 } ;
224225
225226 let first_line = content. lines ( ) . next ( ) ;
226-
227227 let Some ( first_line) = first_line else {
228228 return ProjectFile { path, owner : None } ;
229229 } ;
0 commit comments