Skip to content

Commit

Permalink
refactor: avoid some allocations and introduce some refactorings
Browse files Browse the repository at this point in the history
  • Loading branch information
Conaclos committed Jan 25, 2025
1 parent 5fd2f17 commit fd3cd48
Show file tree
Hide file tree
Showing 3 changed files with 55 additions and 61 deletions.
8 changes: 4 additions & 4 deletions crates/biome_service/src/projects.rs
Original file line number Diff line number Diff line change
Expand Up @@ -179,15 +179,15 @@ impl Projects {
FeatureKind::Format => {
let formatter = &settings.formatter;
(
&formatter.includes_files,
&formatter.includes,
&formatter.included_files,
&formatter.ignored_files,
)
}
FeatureKind::Lint => {
let linter = &settings.linter;
(
&linter.includes_files,
&linter.includes,
&linter.included_files,
&linter.ignored_files,
)
Expand All @@ -196,7 +196,7 @@ impl Projects {
FeatureKind::Assist => {
let assists = &settings.assist;
(
&assists.includes_files,
&assists.includes,
&assists.included_files,
&assists.ignored_files,
)
Expand All @@ -207,7 +207,7 @@ impl Projects {
};

let mut is_feature_included = true;
if !feature_includes_files.is_empty() {
if !feature_includes_files.is_unset() {
is_feature_included = if is_dir(path) {
feature_includes_files.matches_directory_with_exceptions(path)
} else {
Expand Down
102 changes: 48 additions & 54 deletions crates/biome_service/src/settings.rs
Original file line number Diff line number Diff line change
Expand Up @@ -242,7 +242,7 @@ pub struct FormatSettings {
/// List of included paths/files
pub included_files: Matcher,
/// List of included paths/files
pub includes_files: IncludesFiles,
pub includes: Includes,
}

impl FormatSettings {
Expand Down Expand Up @@ -300,7 +300,7 @@ pub struct LinterSettings {
pub included_files: Matcher,

/// List of included paths/files
pub includes_files: IncludesFiles,
pub includes: Includes,

/// Rule domains
pub domains: Option<FxHashMap<RuleDomain, RuleDomainValue>>,
Expand Down Expand Up @@ -341,7 +341,7 @@ pub struct AssistSettings {
pub included_files: Matcher,

/// List of included paths/files
pub includes_files: IncludesFiles,
pub includes: Includes,
}

impl AssistSettings {
Expand Down Expand Up @@ -600,66 +600,63 @@ pub struct FilesSettings {
pub included_files: Matcher,

/// List of included paths/files
pub includes_files: IncludesFiles,
pub includes: Includes,

/// Files not recognized by Biome should not emit a diagnostic
pub ignore_unknown: Option<FilesIgnoreUnknownEnabled>,
}

#[derive(Clone, Default, Debug)]
pub struct IncludesFiles {
pub struct Includes {
/// This path is used to normalize the tested paths against [Self::globs].
working_directory: Option<Utf8PathBuf>,
includes_files: Option<Box<[biome_glob::Glob]>>,
/// If `None`, then all files are included
/// Otherwise this filtered out all files that doesn't match.
globs: Option<Box<[biome_glob::Glob]>>,
}

impl IncludesFiles {
impl Includes {
fn new(
working_directory: Option<Utf8PathBuf>,
includes_files: Option<&[biome_glob::Glob]>,
globs: Option<impl Into<Box<[biome_glob::Glob]>>>,
) -> Self {
if let Some(includes_files) = includes_files {
Self {
working_directory,
includes_files: Some(includes_files.to_vec().into_boxed_slice()),
}
} else {
Self {
working_directory,
includes_files: None,
}
Self {
working_directory,
globs: globs.map(|globs| globs.into()),
}
}

pub fn is_empty(&self) -> bool {
self.includes_files.is_none()
/// Returns `true` is no globs are set.
pub fn is_unset(&self) -> bool {
self.globs.is_none()
}

/// Normalize `path` and match it against the list of globs.
pub fn matches_with_exceptions(&self, path: &Utf8Path) -> bool {
if let Some(includes_files) = self.includes_files.as_ref() {
let path = if let Some(working_directory) = &self.working_directory {
path.strip_prefix(working_directory).unwrap_or(path)
} else {
path
};
let candidate_path = biome_glob::CandidatePath::new(path);
candidate_path.matches_with_exceptions(includes_files)
let Some(globs) = self.globs.as_ref() else {
return true;
};
let path = if let Some(working_directory) = &self.working_directory {
path.strip_prefix(working_directory).unwrap_or(path)
} else {
true
}
path
};
let candidate_path = biome_glob::CandidatePath::new(path);
candidate_path.matches_with_exceptions(globs)
}

/// Normalize `path` and match it against the list of globs.
pub fn matches_directory_with_exceptions(&self, path: &Utf8Path) -> bool {
if let Some(includes_files) = self.includes_files.as_ref() {
let path = if let Some(working_directory) = &self.working_directory {
path.strip_prefix(working_directory).unwrap_or(path)
} else {
path
};
let candidate_path = biome_glob::CandidatePath::new(path);
candidate_path.matches_directory_with_exceptions(includes_files)
let Some(globs) = self.globs.as_ref() else {
return true;
};
let path = if let Some(working_directory) = &self.working_directory {
path.strip_prefix(working_directory).unwrap_or(path)
} else {
true
}
path
};
let candidate_path = biome_glob::CandidatePath::new(path);
candidate_path.matches_directory_with_exceptions(globs)
}
}

Expand Down Expand Up @@ -693,7 +690,7 @@ fn to_file_settings(
working_directory.clone(),
config.include.as_deref(),
)?,
includes_files: IncludesFiles::new(working_directory, config.includes.as_deref()),
includes: Includes::new(working_directory, config.includes),
ignore_unknown: config.ignore_unknown,
})
} else {
Expand Down Expand Up @@ -1076,7 +1073,7 @@ impl OverrideSettings {
pub struct OverrideSettingPattern {
exclude: Matcher,
include: Matcher,
includes_files: IncludesFiles,
includes: Includes,
/// Formatter settings applied to all files in the workspaces
pub formatter: OverrideFormatSettings,
/// Linter settings applied to all files in the workspace
Expand All @@ -1097,8 +1094,8 @@ impl OverrideSettingPattern {
return false;
}
self.include.matches_path(file_path)
|| if !self.includes_files.is_empty() {
self.includes_files.matches_with_exceptions(file_path)
|| if !self.includes.is_unset() {
self.includes.matches_with_exceptions(file_path)
} else {
false
}
Expand Down Expand Up @@ -1377,10 +1374,7 @@ pub fn to_override_settings(
languages.html = to_html_language_settings(html, &current_settings.languages.html);

let pattern_setting = OverrideSettingPattern {
includes_files: IncludesFiles::new(
working_directory.clone(),
pattern.includes.as_deref(),
),
includes: Includes::new(working_directory.clone(), pattern.includes),
include: Matcher::from_globs(working_directory.clone(), pattern.include.as_deref())?,
exclude: Matcher::from_globs(working_directory.clone(), pattern.ignore.as_deref())?,
formatter,
Expand Down Expand Up @@ -1511,7 +1505,7 @@ pub fn to_format_settings(
bracket_spacing: conf.bracket_spacing,
ignored_files: Matcher::from_globs(working_directory.clone(), conf.ignore.as_deref())?,
included_files: Matcher::from_globs(working_directory.clone(), conf.include.as_deref())?,
includes_files: IncludesFiles::new(working_directory, conf.includes.as_deref()),
includes: Includes::new(working_directory, conf.includes),
})
}

Expand All @@ -1538,7 +1532,7 @@ impl TryFrom<OverrideFormatterConfiguration> for FormatSettings {
format_with_errors: conf.format_with_errors,
ignored_files: Matcher::empty(),
included_files: Matcher::empty(),
includes_files: Default::default(),
includes: Default::default(),
})
}
}
Expand All @@ -1552,7 +1546,7 @@ pub fn to_linter_settings(
rules: conf.rules,
ignored_files: Matcher::from_globs(working_directory.clone(), conf.ignore.as_deref())?,
included_files: Matcher::from_globs(working_directory.clone(), conf.include.as_deref())?,
includes_files: IncludesFiles::new(working_directory, conf.includes.as_deref()),
includes: Includes::new(working_directory, conf.includes),
domains: conf.domains,
})
}
Expand All @@ -1566,7 +1560,7 @@ impl TryFrom<OverrideLinterConfiguration> for LinterSettings {
rules: conf.rules,
ignored_files: Matcher::empty(),
included_files: Matcher::empty(),
includes_files: Default::default(),
includes: Default::default(),
domains: conf.domains,
})
}
Expand All @@ -1581,7 +1575,7 @@ pub fn to_assist_settings(
actions: conf.actions,
ignored_files: Matcher::from_globs(working_directory.clone(), conf.ignore.as_deref())?,
included_files: Matcher::from_globs(working_directory.clone(), conf.include.as_deref())?,
includes_files: IncludesFiles::new(working_directory, conf.includes.as_deref()),
includes: Includes::new(working_directory, conf.includes),
})
}

Expand All @@ -1594,7 +1588,7 @@ impl TryFrom<OverrideAssistConfiguration> for AssistSettings {
actions: conf.actions,
ignored_files: Matcher::empty(),
included_files: Matcher::empty(),
includes_files: Default::default(),
includes: Default::default(),
})
}
}
Expand Down
6 changes: 3 additions & 3 deletions crates/biome_service/src/workspace/server.rs
Original file line number Diff line number Diff line change
Expand Up @@ -483,13 +483,13 @@ impl WorkspaceServer {
return false;
};
let mut is_included = true;
if !files_settings.includes_files.is_empty() {
if !files_settings.includes.is_unset() {
is_included = if is_dir(path) {
files_settings
.includes_files
.includes
.matches_directory_with_exceptions(path)
} else {
files_settings.includes_files.matches_with_exceptions(path)
files_settings.includes.matches_with_exceptions(path)
};
}
if !files_settings.included_files.is_empty() {
Expand Down

0 comments on commit fd3cd48

Please sign in to comment.