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
1 change: 1 addition & 0 deletions apps/oxlint/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ mod command;
mod init;
mod lint;
mod lsp;
mod mode;
mod output_formatter;
mod result;
mod walk;
Expand Down
39 changes: 6 additions & 33 deletions apps/oxlint/src/lint.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
use std::{
env,
ffi::OsStr,
fs,
io::{ErrorKind, Write},
path::{Path, PathBuf, absolute},
sync::Arc,
Expand All @@ -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::{
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -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;
}
}

Expand Down
33 changes: 33 additions & 0 deletions apps/oxlint/src/mode/init.rs
Original file line number Diff line number Diff line change
@@ -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
}
3 changes: 3 additions & 0 deletions apps/oxlint/src/mode/mod.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
mod init;

pub use init::run_init;
Loading