diff --git a/apps/oxlint/src/lib.rs b/apps/oxlint/src/lib.rs index 79507f75d56f4..632a0208fbe7b 100644 --- a/apps/oxlint/src/lib.rs +++ b/apps/oxlint/src/lib.rs @@ -5,6 +5,7 @@ mod command; mod init; mod lint; mod lsp; +mod mode; mod output_formatter; mod result; mod walk; diff --git a/apps/oxlint/src/lint.rs b/apps/oxlint/src/lint.rs index 41f7b4b86cffe..7ef9b655c7827 100644 --- a/apps/oxlint/src/lint.rs +++ b/apps/oxlint/src/lint.rs @@ -1,7 +1,6 @@ use std::{ env, ffi::OsStr, - fs, io::{ErrorKind, Write}, path::{Path, PathBuf, absolute}, sync::Arc, @@ -11,7 +10,6 @@ use std::{ use cow_utils::CowUtils; use ignore::{gitignore::Gitignore, overrides::OverrideBuilder}; use rustc_hash::{FxHashMap, FxHashSet}; -use serde_json::Value; use oxc_diagnostics::{DiagnosticSender, DiagnosticService, GraphicalReportHandler, OxcDiagnostic}; use oxc_linter::{ @@ -64,6 +62,10 @@ impl CliRunner { .. } = self.options; + if basic_options.init { + return crate::mode::run_init(&self.cwd, stdout); + } + let external_linter = self.external_linter.as_ref(); let mut paths = paths; @@ -215,11 +217,8 @@ impl CliRunner { oxlintrc.plugins = Some(plugins); } - let oxlintrc_for_print = if misc_options.print_config || basic_options.init { - Some(oxlintrc.clone()) - } else { - None - }; + let oxlintrc_for_print = + if misc_options.print_config { Some(oxlintrc.clone()) } else { None }; let config_builder = match ConfigStoreBuilder::from_oxlintrc( false, @@ -254,32 +253,6 @@ impl CliRunner { print_and_flush_stdout(stdout, "\n"); return CliRunResult::PrintConfigResult; - } else if basic_options.init { - let schema_relative_path = "node_modules/oxlint/configuration_schema.json"; - let configuration = if self.cwd.join(schema_relative_path).is_file() { - let mut config_json: Value = serde_json::from_str(&config_file).unwrap(); - if let Value::Object(ref mut obj) = config_json { - let mut json_object = serde_json::Map::new(); - json_object.insert( - "$schema".to_string(), - format!("./{schema_relative_path}").into(), - ); - json_object.extend(obj.clone()); - *obj = json_object; - } - serde_json::to_string_pretty(&config_json).unwrap() - } else { - config_file - }; - - if fs::write(DEFAULT_OXLINTRC, configuration).is_ok() { - print_and_flush_stdout(stdout, "Configuration file created\n"); - return CliRunResult::ConfigFileInitSucceeded; - } - - // failed case - print_and_flush_stdout(stdout, "Failed to create configuration file\n"); - return CliRunResult::ConfigFileInitFailed; } } diff --git a/apps/oxlint/src/mode/init.rs b/apps/oxlint/src/mode/init.rs new file mode 100644 index 0000000000000..b5bb6a6949602 --- /dev/null +++ b/apps/oxlint/src/mode/init.rs @@ -0,0 +1,33 @@ +use std::{fs, path::Path}; + +use oxc_linter::Oxlintrc; +use serde_json::Value; + +use crate::{DEFAULT_OXLINTRC, cli::CliRunResult, lint::print_and_flush_stdout}; + +pub fn run_init(cwd: &Path, stdout: &mut dyn std::io::Write) -> CliRunResult { + let oxlintrc_for_print = serde_json::to_string_pretty(&Oxlintrc::default()).unwrap(); + + let schema_relative_path = "node_modules/oxlint/configuration_schema.json"; + let configuration = if cwd.join(schema_relative_path).is_file() { + let mut config_json: Value = serde_json::from_str(&oxlintrc_for_print).unwrap(); + if let Value::Object(ref mut obj) = config_json { + let mut json_object = serde_json::Map::new(); + json_object.insert("$schema".to_string(), format!("./{schema_relative_path}").into()); + json_object.extend(obj.clone()); + *obj = json_object; + } + serde_json::to_string_pretty(&config_json).unwrap() + } else { + oxlintrc_for_print + }; + + if fs::write(DEFAULT_OXLINTRC, configuration).is_ok() { + print_and_flush_stdout(stdout, "Configuration file created\n"); + return CliRunResult::ConfigFileInitSucceeded; + } + + // failed case + print_and_flush_stdout(stdout, "Failed to create configuration file\n"); + CliRunResult::ConfigFileInitFailed +} diff --git a/apps/oxlint/src/mode/mod.rs b/apps/oxlint/src/mode/mod.rs new file mode 100644 index 0000000000000..1b70c9d726cc0 --- /dev/null +++ b/apps/oxlint/src/mode/mod.rs @@ -0,0 +1,3 @@ +mod init; + +pub use init::run_init;