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
74 changes: 32 additions & 42 deletions apps/oxlint/src/lint.rs
Original file line number Diff line number Diff line change
Expand Up @@ -182,6 +182,36 @@ impl CliRunner {
}

let mut external_plugin_store = ExternalPluginStore::new(self.external_linter.is_some());
{
let mut plugins = oxlintrc.plugins.unwrap_or_default();
enable_plugins.apply_overrides(&mut plugins);
oxlintrc.plugins = Some(plugins);
}

let base_ignore_patterns = oxlintrc.ignore_patterns.clone();
let config_builder = match ConfigStoreBuilder::from_oxlintrc(
false,
oxlintrc.clone(),
external_linter,
&mut external_plugin_store,
) {
Ok(builder) => builder,
Err(e) => {
print_and_flush_stdout(
stdout,
&format!(
"Failed to parse oxlint configuration file.\n{}\n",
render_report(&handler, &OxcDiagnostic::error(e.to_string()))
),
);
return CliRunResult::InvalidOptionConfig;
}
}
.with_filters(&filters);

if misc_options.print_config {
return crate::mode::run_print_config(&config_builder, oxlintrc, stdout);
}

let search_for_nested_configs = !disable_nested_config &&
// If the `--config` option is explicitly passed, we should not search for nested config files
Expand All @@ -207,55 +237,15 @@ impl CliRunner {
FxHashMap::default()
};

let ignore_matcher = {
LintIgnoreMatcher::new(&oxlintrc.ignore_patterns, &self.cwd, nested_ignore_patterns)
};

{
let mut plugins = oxlintrc.plugins.unwrap_or_default();
enable_plugins.apply_overrides(&mut plugins);
oxlintrc.plugins = Some(plugins);
}

let oxlintrc_for_print =
if misc_options.print_config { Some(oxlintrc.clone()) } else { None };

let config_builder = match ConfigStoreBuilder::from_oxlintrc(
false,
oxlintrc,
external_linter,
&mut external_plugin_store,
) {
Ok(builder) => builder,
Err(e) => {
print_and_flush_stdout(
stdout,
&format!(
"Failed to parse oxlint configuration file.\n{}\n",
render_report(&handler, &OxcDiagnostic::error(e.to_string()))
),
);
return CliRunResult::InvalidOptionConfig;
}
}
.with_filters(&filters);
let ignore_matcher =
{ LintIgnoreMatcher::new(&base_ignore_patterns, &self.cwd, nested_ignore_patterns) };

// If no external rules, discard `ExternalLinter`
let mut external_linter = self.external_linter;
if external_plugin_store.is_empty() {
external_linter = None;
}

if let Some(basic_config_file) = oxlintrc_for_print {
let config_file = config_builder.resolve_final_config_file(basic_config_file);
if misc_options.print_config {
print_and_flush_stdout(stdout, &config_file);
print_and_flush_stdout(stdout, "\n");

return CliRunResult::PrintConfigResult;
}
}

// TODO(refactor): pull this into a shared function, so that the language server can use
// the same functionality.
let use_cross_module = config_builder.plugins().has_import()
Expand Down
2 changes: 2 additions & 0 deletions apps/oxlint/src/mode/mod.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
mod init;
mod print_config;

pub use init::run_init;
pub use print_config::run_print_config;
15 changes: 15 additions & 0 deletions apps/oxlint/src/mode/print_config.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
use oxc_linter::{ConfigStoreBuilder, Oxlintrc};

use crate::{cli::CliRunResult, lint::print_and_flush_stdout};

pub fn run_print_config(
store_builder: &ConfigStoreBuilder,
oxlintrc: Oxlintrc,
stdout: &mut dyn std::io::Write,
) -> CliRunResult {
let config_file = store_builder.resolve_final_config_file(oxlintrc);
print_and_flush_stdout(stdout, &config_file);
print_and_flush_stdout(stdout, "\n");

CliRunResult::PrintConfigResult
}
Loading