Skip to content

Commit

Permalink
test(linter): add default conversion tests
Browse files Browse the repository at this point in the history
  • Loading branch information
DonIsaac committed Aug 23, 2024
1 parent b841d1e commit 46583ad
Show file tree
Hide file tree
Showing 7 changed files with 57 additions and 18 deletions.
4 changes: 2 additions & 2 deletions apps/oxlint/src/lint/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ use std::{env, io::BufWriter, time::Instant};
use ignore::gitignore::Gitignore;
use oxc_diagnostics::{DiagnosticService, GraphicalReportHandler};
use oxc_linter::{
partial_loader::LINT_PARTIAL_LOADER_EXT, LintOptions, LintService, LintServiceOptions, Linter,
partial_loader::LINT_PARTIAL_LOADER_EXT, LintService, LintServiceOptions, Linter, OxlintOptions,
};
use oxc_span::VALID_EXTENSIONS;

Expand Down Expand Up @@ -92,7 +92,7 @@ impl Runner for LintRunner {
let number_of_files = paths.len();

let cwd = std::env::current_dir().unwrap().into_boxed_path();
let lint_options = LintOptions::default()
let lint_options = OxlintOptions::default()
.with_filter(filter)
.with_config_path(basic_options.config)
.with_fix(fix_options.fix_kind())
Expand Down
4 changes: 2 additions & 2 deletions crates/oxc_language_server/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ use futures::future::join_all;
use globset::Glob;
use ignore::gitignore::Gitignore;
use log::{debug, error, info};
use oxc_linter::{FixKind, LintOptions, Linter};
use oxc_linter::{FixKind, Linter, OxlintOptions};
use serde::{Deserialize, Serialize};
use tokio::sync::{Mutex, OnceCell, RwLock, SetError};
use tower_lsp::{
Expand Down Expand Up @@ -345,7 +345,7 @@ impl Backend {
let mut linter = self.server_linter.write().await;
*linter = ServerLinter::new_with_linter(
Linter::from_options(
LintOptions::default()
OxlintOptions::default()
.with_fix(FixKind::SafeFix)
.with_config_path(Some(config_path)),
)
Expand Down
5 changes: 5 additions & 0 deletions crates/oxc_linter/src/config/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,11 @@ pub struct OxlintConfig {
pub globals: OxlintGlobals,
}

/// Configuration used by the linter, fixer, and rules.
///
/// This is a mapping from the public [`OxlintConfig`] API to a trimmed down
/// version that is also better suited for internal use. Do not expose this
/// struct outside this crate.
#[derive(Debug, Default)]
pub(crate) struct LintConfig {
pub(crate) settings: OxlintSettings,
Expand Down
11 changes: 6 additions & 5 deletions crates/oxc_linter/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ pub mod table;
use std::{io::Write, path::Path, rc::Rc, sync::Arc};

use config::LintConfig;
use options::LintOptions;
use oxc_diagnostics::Error;
use oxc_semantic::{AstNode, Semantic};

Expand All @@ -31,7 +32,7 @@ pub use crate::{
context::LintContext,
fixer::FixKind,
frameworks::FrameworkFlags,
options::{AllowWarnDeny, LintOptions},
options::{AllowWarnDeny, OxlintOptions},
rule::{RuleCategory, RuleFixMeta, RuleMeta, RuleWithSeverity},
service::{LintService, LintServiceOptions},
};
Expand Down Expand Up @@ -60,17 +61,17 @@ pub struct Linter {

impl Default for Linter {
fn default() -> Self {
Self::from_options(LintOptions::default()).unwrap()
Self::from_options(OxlintOptions::default()).unwrap()
}
}

impl Linter {
/// # Errors
///
/// Returns `Err` if there are any errors parsing the configuration file.
pub fn from_options(options: LintOptions) -> Result<Self, Error> {
pub fn from_options(options: OxlintOptions) -> Result<Self, Error> {
let (rules, config) = options.derive_rules_and_config()?;
Ok(Self { rules, options, config: Arc::new(config) })
Ok(Self { rules, options: options.into(), config: Arc::new(config) })
}

#[cfg(test)]
Expand Down Expand Up @@ -104,7 +105,7 @@ impl Linter {
self
}

pub fn options(&self) -> &LintOptions {
pub(crate) fn options(&self) -> &LintOptions {
&self.options
}

Expand Down
41 changes: 37 additions & 4 deletions crates/oxc_linter/src/options/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ pub use allow_warn_deny::AllowWarnDeny;
pub use plugins::LintPluginOptions;

#[derive(Debug)]
pub struct LintOptions {
pub struct OxlintOptions {
/// Allow / Deny rules in order. [("allow" / "deny", rule name)]
/// Defaults to [("deny", "correctness")]
pub filter: Vec<(AllowWarnDeny, String)>,
Expand All @@ -33,7 +33,14 @@ pub struct LintOptions {
pub framework_hints: FrameworkFlags,
}

impl Default for LintOptions {
#[derive(Debug, Default, PartialEq)]
pub(crate) struct LintOptions {
pub fix: FixKind,
pub framework_hints: FrameworkFlags,
pub plugins: LintPluginOptions,
}

impl Default for OxlintOptions {
fn default() -> Self {
Self {
filter: vec![(AllowWarnDeny::Warn, String::from("correctness"))],
Expand All @@ -44,8 +51,22 @@ impl Default for LintOptions {
}
}
}
/// Subset of options used directly by the [`Linter`]. Derived from
/// [`OxlintOptions`], which is the public-facing API. Do not expose this
/// outside of this crate.
///
/// [`Linter`]: crate::Linter
impl From<OxlintOptions> for LintOptions {
fn from(options: OxlintOptions) -> Self {
Self {
fix: options.fix,
framework_hints: options.framework_hints,
plugins: options.plugins,
}
}
}

impl LintOptions {
impl OxlintOptions {
#[must_use]
pub fn with_filter(mut self, filter: Vec<(AllowWarnDeny, String)>) -> Self {
if !filter.is_empty() {
Expand Down Expand Up @@ -149,7 +170,7 @@ impl LintOptions {
}
}

impl LintOptions {
impl OxlintOptions {
/// # Errors
///
/// * Returns `Err` if there are any errors parsing the configuration file.
Expand Down Expand Up @@ -251,3 +272,15 @@ impl LintOptions {
.collect::<Vec<_>>()
}
}

#[cfg(test)]
mod test {
use super::*;

#[test]
fn test_default_conversion() {
let lint_options = LintOptions::default();
let oxlint_options = OxlintOptions::default();
assert_eq!(lint_options, oxlint_options.into());
}
}
6 changes: 3 additions & 3 deletions crates/oxc_linter/src/tester.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ use serde::Deserialize;
use serde_json::Value;

use crate::{
fixer::FixKind, options::LintPluginOptions, rules::RULES, AllowWarnDeny, Fixer, LintOptions,
LintService, LintServiceOptions, Linter, OxlintConfig, RuleEnum, RuleWithSeverity,
fixer::FixKind, options::LintPluginOptions, rules::RULES, AllowWarnDeny, Fixer, LintService,
LintServiceOptions, Linter, OxlintConfig, OxlintOptions, RuleEnum, RuleWithSeverity,
};

#[derive(Eq, PartialEq)]
Expand Down Expand Up @@ -344,7 +344,7 @@ impl Tester {
) -> TestResult {
let allocator = Allocator::default();
let rule = self.find_rule().read_json(rule_config.unwrap_or_default());
let options = LintOptions::default()
let options = OxlintOptions::default()
.with_fix(fix.into())
.with_import_plugin(self.plugins.import)
.with_jest_plugin(self.plugins.jest)
Expand Down
4 changes: 2 additions & 2 deletions tasks/benchmark/benches/linter.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ use std::{

use oxc_allocator::Allocator;
use oxc_benchmark::{criterion_group, criterion_main, BenchmarkId, Criterion};
use oxc_linter::{AllowWarnDeny, LintOptions, Linter};
use oxc_linter::{AllowWarnDeny, Linter, OxlintOptions};
use oxc_parser::Parser;
use oxc_semantic::SemanticBuilder;
use oxc_span::SourceType;
Expand Down Expand Up @@ -41,7 +41,7 @@ fn bench_linter(criterion: &mut Criterion) {
(AllowWarnDeny::Deny, "all".into()),
(AllowWarnDeny::Deny, "nursery".into()),
];
let lint_options = LintOptions::default()
let lint_options = OxlintOptions::default()
.with_filter(filter)
.with_import_plugin(true)
.with_jsdoc_plugin(true)
Expand Down

0 comments on commit 46583ad

Please sign in to comment.