Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/cruel-meals-talk.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@biomejs/biome": patch
---

Improved the rule `noBiomeFirstException`. The rule can now inspect if extended configurations already contain the catch-all `**` inside `files.includes` and, if so, the rule suggests removing `**` from the user configuration.
1 change: 1 addition & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

15 changes: 7 additions & 8 deletions crates/biome_cli/src/commands/check.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@ use biome_configuration::{Configuration, FormatterConfiguration, LinterConfigura
use biome_console::Console;
use biome_deserialize::Merge;
use biome_fs::FileSystem;
use biome_service::{Workspace, WorkspaceError, configuration::LoadedConfiguration};
use biome_service::{Workspace, WorkspaceError};
use camino::Utf8PathBuf;
use std::ffi::OsString;

pub(crate) struct CheckCommandPayload {
Expand Down Expand Up @@ -47,17 +48,15 @@ impl CommandRunner for CheckCommandPayload {

fn merge_configuration(
&mut self,
loaded_configuration: LoadedConfiguration,
loaded_configuration: Configuration,
loaded_directory: Option<Utf8PathBuf>,
_loaded_file: Option<Utf8PathBuf>,

fs: &dyn FileSystem,
_console: &mut dyn Console,
) -> Result<Configuration, WorkspaceError> {
let LoadedConfiguration {
configuration: biome_configuration,
directory_path,
..
} = loaded_configuration;
let mut configuration =
self.combine_configuration(directory_path, biome_configuration, fs)?;
self.combine_configuration(loaded_directory, loaded_configuration, fs)?;

let formatter = configuration
.formatter
Expand Down
14 changes: 6 additions & 8 deletions crates/biome_cli/src/commands/ci.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@ use biome_configuration::{
use biome_console::Console;
use biome_deserialize::Merge;
use biome_fs::FileSystem;
use biome_service::configuration::LoadedConfiguration;
use biome_service::{Workspace, WorkspaceError};
use camino::Utf8PathBuf;
use std::ffi::OsString;

pub(crate) struct CiCommandPayload {
Expand Down Expand Up @@ -45,17 +45,15 @@ impl CommandRunner for CiCommandPayload {

fn merge_configuration(
&mut self,
loaded_configuration: LoadedConfiguration,
loaded_configuration: Configuration,
loaded_directory: Option<Utf8PathBuf>,
_loaded_file: Option<Utf8PathBuf>,

fs: &dyn FileSystem,
_console: &mut dyn Console,
) -> Result<Configuration, WorkspaceError> {
let LoadedConfiguration {
configuration: biome_configuration,
directory_path: configuration_path,
..
} = loaded_configuration;
let mut configuration =
self.combine_configuration(configuration_path, biome_configuration, fs)?;
self.combine_configuration(loaded_directory, loaded_configuration, fs)?;

let formatter = configuration
.formatter
Expand Down
15 changes: 6 additions & 9 deletions crates/biome_cli/src/commands/format.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ use biome_configuration::{Configuration, FilesConfiguration, FormatterConfigurat
use biome_console::Console;
use biome_deserialize::Merge;
use biome_fs::FileSystem;
use biome_service::configuration::LoadedConfiguration;
use biome_service::{Workspace, WorkspaceError};
use camino::Utf8PathBuf;
use std::ffi::OsString;

pub(crate) struct FormatCommandPayload {
Expand Down Expand Up @@ -49,18 +49,15 @@ impl CommandRunner for FormatCommandPayload {

fn merge_configuration(
&mut self,
loaded_configuration: LoadedConfiguration,
loaded_configuration: Configuration,
loaded_directory: Option<Utf8PathBuf>,
_loaded_file: Option<Utf8PathBuf>,

fs: &dyn FileSystem,
_console: &mut dyn Console,
) -> Result<Configuration, WorkspaceError> {
let LoadedConfiguration {
configuration: biome_configuration,
directory_path: configuration_path,
..
} = loaded_configuration;

let mut configuration =
self.combine_configuration(configuration_path, biome_configuration, fs)?;
self.combine_configuration(loaded_directory, loaded_configuration, fs)?;

// merge formatter options
if configuration
Expand Down
29 changes: 15 additions & 14 deletions crates/biome_cli/src/commands/lint.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@ use biome_configuration::{Configuration, FilesConfiguration, LinterConfiguration
use biome_console::Console;
use biome_deserialize::Merge;
use biome_fs::FileSystem;
use biome_service::configuration::LoadedConfiguration;
use biome_service::{Workspace, WorkspaceError};
use camino::Utf8PathBuf;
use std::ffi::OsString;

pub(crate) struct LintCommandPayload {
Expand Down Expand Up @@ -45,17 +45,14 @@ impl CommandRunner for LintCommandPayload {

fn merge_configuration(
&mut self,
loaded_configuration: LoadedConfiguration,
mut loaded_configuration: Configuration,
_loaded_directory: Option<Utf8PathBuf>,
_loaded_file: Option<Utf8PathBuf>,
_fs: &dyn FileSystem,
_console: &mut dyn Console,
) -> Result<Configuration, WorkspaceError> {
let LoadedConfiguration {
configuration: mut fs_configuration,
..
} = loaded_configuration;

fs_configuration.merge_with(Configuration {
linter: if fs_configuration
loaded_configuration.merge_with(Configuration {
linter: if loaded_configuration
.linter
.as_ref()
.is_some_and(LinterConfiguration::is_enabled)
Expand All @@ -73,7 +70,9 @@ impl CommandRunner for LintCommandPayload {
..Default::default()
});

let css = fs_configuration.css.get_or_insert_with(Default::default);
let css = loaded_configuration
.css
.get_or_insert_with(Default::default);
if self.css_linter.is_some() {
css.linter.merge_with(self.css_linter.clone());
}
Expand All @@ -82,26 +81,28 @@ impl CommandRunner for LintCommandPayload {
}

if self.graphql_linter.is_some() {
let graphql = fs_configuration
let graphql = loaded_configuration
.graphql
.get_or_insert_with(Default::default);
graphql.linter.merge_with(self.graphql_linter.clone());
}
if self.javascript_linter.is_some() {
let javascript = fs_configuration
let javascript = loaded_configuration
.javascript
.get_or_insert_with(Default::default);
javascript.linter.merge_with(self.javascript_linter.clone());
}
let json = fs_configuration.json.get_or_insert_with(Default::default);
let json = loaded_configuration
.json
.get_or_insert_with(Default::default);
if self.json_linter.is_some() {
json.linter.merge_with(self.json_linter.clone());
}
if self.json_parser.is_some() {
json.parser.merge_with(self.json_parser.clone());
}

Ok(fs_configuration)
Ok(loaded_configuration)
}

fn get_files_to_process(
Expand Down
11 changes: 6 additions & 5 deletions crates/biome_cli/src/commands/migrate.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ use crate::execute::{Execution, TraversalMode};
use biome_configuration::Configuration;
use biome_console::{Console, ConsoleExt, markup};
use biome_fs::FileSystem;
use biome_service::configuration::LoadedConfiguration;
use biome_service::{Workspace, WorkspaceError};
use camino::Utf8PathBuf;
use std::ffi::OsString;
Expand All @@ -26,13 +25,15 @@ impl CommandRunner for MigrateCommandPayload {

fn merge_configuration(
&mut self,
loaded_configuration: LoadedConfiguration,
loaded_configuration: Configuration,
loaded_directory: Option<Utf8PathBuf>,
loaded_file: Option<Utf8PathBuf>,
_fs: &dyn FileSystem,
_console: &mut dyn Console,
) -> Result<Configuration, WorkspaceError> {
self.configuration_file_path = loaded_configuration.file_path;
self.configuration_directory_path = loaded_configuration.directory_path;
Ok(loaded_configuration.configuration)
self.configuration_file_path = loaded_file;
self.configuration_directory_path = loaded_directory;
Ok(loaded_configuration)
}

fn get_files_to_process(
Expand Down
26 changes: 22 additions & 4 deletions crates/biome_cli/src/commands/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -955,14 +955,26 @@ pub(crate) trait CommandRunner: Sized {
loaded_configuration.file_path,
loaded_configuration.diagnostics.len(),
);
let configuration_dir_path = loaded_configuration.directory_path.clone();
let LoadedConfiguration {
extended_configurations,
configuration,
diagnostics: _,
directory_path,
file_path,
} = loaded_configuration;

// Merge the FS configuration with the CLI arguments
let configuration = self.merge_configuration(loaded_configuration, fs, console)?;
let configuration = self.merge_configuration(
configuration,
directory_path.clone(),
file_path,
fs,
console,
)?;

let execution = self.get_execution(cli_options, console, workspace)?;

let root_configuration_dir = configuration_dir_path
let root_configuration_dir = directory_path
.clone()
.unwrap_or_else(|| working_dir.clone());
// Using `--config-path`, users can point to a (root) config file that
Expand Down Expand Up @@ -1003,6 +1015,10 @@ pub(crate) trait CommandRunner: Sized {
project_key: open_project_result.project_key,
workspace_directory: Some(BiomePath::new(project_dir)),
configuration,
extended_configurations: extended_configurations
.into_iter()
.map(|(path, config)| (BiomePath::from(path), config))
.collect(),
})?;
if self.should_validate_configuration_diagnostics() {
print_diagnostics_from_workspace_result(
Expand Down Expand Up @@ -1080,7 +1096,9 @@ pub(crate) trait CommandRunner: Sized {
/// The CLI arguments take precedence over the option configured in the configuration file.
fn merge_configuration(
&mut self,
loaded_configuration: LoadedConfiguration,
loaded_configuration: Configuration,
loaded_directory: Option<Utf8PathBuf>,
loaded_file: Option<Utf8PathBuf>,
fs: &dyn FileSystem,
console: &mut dyn Console,
) -> Result<Configuration, WorkspaceError>;
Expand Down
7 changes: 6 additions & 1 deletion crates/biome_cli/src/commands/rage.rs
Original file line number Diff line number Diff line change
Expand Up @@ -216,11 +216,16 @@ impl Display for RageConfiguration<'_> {
diagnostics,
directory_path,
file_path,
extended_configurations,
} = loaded_configuration;
let vcs_enabled = configuration.is_vcs_enabled();
let mut settings = Settings::default();
settings
.merge_with_configuration(configuration.clone(), None)
.merge_with_configuration(
configuration.clone(),
None,
extended_configurations,
)
.unwrap();

let status = if !diagnostics.is_empty() {
Expand Down
17 changes: 9 additions & 8 deletions crates/biome_cli/src/commands/search.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@ use biome_console::Console;
use biome_deserialize::Merge;
use biome_fs::FileSystem;
use biome_grit_patterns::GritTargetLanguage;
use biome_service::configuration::LoadedConfiguration;
use biome_service::workspace::ParsePatternParams;
use biome_service::{Workspace, WorkspaceError};
use camino::Utf8PathBuf;
use std::ffi::OsString;

pub(crate) struct SearchCommandPayload {
Expand All @@ -26,19 +26,20 @@ impl CommandRunner for SearchCommandPayload {

fn merge_configuration(
&mut self,
loaded_configuration: LoadedConfiguration,
mut loaded_configuration: Configuration,
_loaded_directory: Option<Utf8PathBuf>,
_loaded_file: Option<Utf8PathBuf>,
_fs: &dyn FileSystem,
_console: &mut dyn Console,
) -> Result<Configuration, WorkspaceError> {
let LoadedConfiguration {
mut configuration, ..
} = loaded_configuration;
configuration
loaded_configuration
.files
.merge_with(self.files_configuration.clone());
configuration.vcs.merge_with(self.vcs_configuration.clone());
loaded_configuration
.vcs
.merge_with(self.vcs_configuration.clone());

Ok(configuration)
Ok(loaded_configuration)
}

fn get_files_to_process(
Expand Down
2 changes: 1 addition & 1 deletion crates/biome_configuration/src/analyzer/linter/rules.rs

Large diffs are not rendered by default.

Loading
Loading