Skip to content

Commit 18797c0

Browse files
committed
initializing vectors with capacity
1 parent 8063f3a commit 18797c0

File tree

3 files changed

+34
-16
lines changed

3 files changed

+34
-16
lines changed

Cargo.lock

+17
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

+1
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ ignore = "0.4.23"
1515
itertools = "0.13.0"
1616
path-clean = "1.0.1"
1717
lazy_static = "1.5.0"
18+
num_cpus = "1.16.0"
1819
rayon = "1.10.0"
1920
regex = "1.11.1"
2021
serde = { version = "1.0.214", features = ["derive"] }

src/project_builder.rs

+16-16
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ pub struct ProjectBuilder<'a> {
3535
pub codeowners_file_path: PathBuf,
3636
}
3737

38+
const INITIAL_VECTOR_CAPACITY: usize = 1000;
39+
3840
impl<'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

Comments
 (0)