mirror of
https://github.com/danbulant/oxc
synced 2026-05-19 20:28:58 +00:00
refactor(linter): remove the LintSettings parameter from LintContext::new. (#2051)
This commit is contained in:
parent
9e06bd7797
commit
ae4e714713
7 changed files with 28 additions and 45 deletions
|
|
@ -14,7 +14,7 @@ use oxc_linter::{
|
|||
AstroPartialLoader, JavaScriptSource, SveltePartialLoader, VuePartialLoader,
|
||||
LINT_PARTIAL_LOADER_EXT,
|
||||
},
|
||||
LintContext, LintSettings, Linter,
|
||||
LintContext, Linter,
|
||||
};
|
||||
use oxc_parser::Parser;
|
||||
use oxc_semantic::SemanticBuilder;
|
||||
|
|
@ -302,7 +302,6 @@ impl IsolatedLintHandler {
|
|||
let lint_ctx = LintContext::new(
|
||||
path.to_path_buf().into_boxed_path(),
|
||||
&Rc::new(semantic_ret.semantic),
|
||||
LintSettings::default(),
|
||||
);
|
||||
|
||||
let result = linter.run(lint_ctx);
|
||||
|
|
@ -383,7 +382,7 @@ pub struct ServerLinter {
|
|||
|
||||
impl ServerLinter {
|
||||
pub fn new() -> Self {
|
||||
let linter = Linter::new().with_fix(true);
|
||||
let linter = Linter::default().with_fix(true);
|
||||
Self { linter: Arc::new(linter) }
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
use std::{cell::RefCell, path::Path, rc::Rc};
|
||||
use std::{cell::RefCell, path::Path, rc::Rc, sync::Arc};
|
||||
|
||||
use oxc_codegen::{Codegen, CodegenOptions};
|
||||
use oxc_diagnostics::Error;
|
||||
|
|
@ -25,11 +25,11 @@ pub struct LintContext<'a> {
|
|||
|
||||
file_path: Box<Path>,
|
||||
|
||||
settings: LintSettings,
|
||||
settings: Arc<LintSettings>,
|
||||
}
|
||||
|
||||
impl<'a> LintContext<'a> {
|
||||
pub fn new(file_path: Box<Path>, semantic: &Rc<Semantic<'a>>, settings: LintSettings) -> Self {
|
||||
pub fn new(file_path: Box<Path>, semantic: &Rc<Semantic<'a>>) -> Self {
|
||||
let disable_directives =
|
||||
DisableDirectivesBuilder::new(semantic.source_text(), semantic.trivias()).build();
|
||||
Self {
|
||||
|
|
@ -39,7 +39,7 @@ impl<'a> LintContext<'a> {
|
|||
fix: false,
|
||||
current_rule_name: "",
|
||||
file_path,
|
||||
settings,
|
||||
settings: Arc::new(LintSettings::default()),
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -49,6 +49,12 @@ impl<'a> LintContext<'a> {
|
|||
self
|
||||
}
|
||||
|
||||
#[must_use]
|
||||
pub fn with_settings(mut self, settings: &Arc<LintSettings>) -> Self {
|
||||
self.settings = Arc::clone(settings);
|
||||
self
|
||||
}
|
||||
|
||||
pub fn semantic(&self) -> &Rc<Semantic<'a>> {
|
||||
&self.semantic
|
||||
}
|
||||
|
|
@ -57,8 +63,8 @@ impl<'a> LintContext<'a> {
|
|||
&self.disable_directives
|
||||
}
|
||||
|
||||
pub fn settings(&self) -> LintSettings {
|
||||
self.settings.clone()
|
||||
pub fn settings(&self) -> &LintSettings {
|
||||
&self.settings
|
||||
}
|
||||
|
||||
pub fn source_text(&self) -> &'a str {
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ mod rules;
|
|||
mod service;
|
||||
mod utils;
|
||||
|
||||
use std::{io::Write, rc::Rc};
|
||||
use std::{io::Write, rc::Rc, sync::Arc};
|
||||
|
||||
use oxc_diagnostics::Report;
|
||||
pub(crate) use oxc_semantic::AstNode;
|
||||
|
|
@ -75,33 +75,23 @@ impl JsxA11y {
|
|||
pub struct Linter {
|
||||
rules: Vec<(/* rule name */ &'static str, RuleEnum)>,
|
||||
options: LintOptions,
|
||||
settings: LintSettings,
|
||||
settings: Arc<LintSettings>,
|
||||
}
|
||||
|
||||
impl Default for Linter {
|
||||
fn default() -> Self {
|
||||
Self::new()
|
||||
Self::from_options(LintOptions::default()).unwrap()
|
||||
}
|
||||
}
|
||||
|
||||
impl Linter {
|
||||
pub fn new() -> Self {
|
||||
let rules = RULES
|
||||
.iter()
|
||||
.filter(|&rule| rule.category() == RuleCategory::Correctness)
|
||||
.cloned()
|
||||
.map(|rule| (rule.name(), rule))
|
||||
.collect::<Vec<_>>();
|
||||
Self { rules, options: LintOptions::default(), settings: LintSettings::default() }
|
||||
}
|
||||
|
||||
/// # Errors
|
||||
///
|
||||
/// Returns `Err` if there are any errors parsing the configuration file.
|
||||
pub fn from_options(options: LintOptions) -> Result<Self, Report> {
|
||||
let (rules, settings) = options.derive_rules_and_settings()?;
|
||||
let rules = rules.into_iter().map(|rule| (rule.name(), rule)).collect();
|
||||
Ok(Self { rules, options, settings })
|
||||
Ok(Self { rules, options, settings: Arc::new(settings) })
|
||||
}
|
||||
|
||||
#[must_use]
|
||||
|
|
@ -112,7 +102,7 @@ impl Linter {
|
|||
|
||||
#[must_use]
|
||||
pub fn with_settings(mut self, settings: LintSettings) -> Self {
|
||||
self.settings = settings;
|
||||
self.settings = Arc::new(settings);
|
||||
self
|
||||
}
|
||||
|
||||
|
|
@ -132,7 +122,7 @@ impl Linter {
|
|||
|
||||
pub fn run<'a>(&self, ctx: LintContext<'a>) -> Vec<Message<'a>> {
|
||||
let semantic = Rc::clone(ctx.semantic());
|
||||
let mut ctx = ctx.with_fix(self.options.fix);
|
||||
let mut ctx = ctx.with_fix(self.options.fix).with_settings(&self.settings);
|
||||
|
||||
for (rule_name, rule) in &self.rules {
|
||||
ctx.with_rule_name(rule_name);
|
||||
|
|
@ -156,10 +146,6 @@ impl Linter {
|
|||
ctx.into_message()
|
||||
}
|
||||
|
||||
pub fn get_settings(&self) -> LintSettings {
|
||||
self.settings.clone()
|
||||
}
|
||||
|
||||
pub fn print_rules<W: Write>(writer: &mut W) {
|
||||
let rules_by_category = RULES.iter().fold(
|
||||
FxHashMap::default(),
|
||||
|
|
|
|||
|
|
@ -267,11 +267,8 @@ impl Runtime {
|
|||
return semantic_ret.errors.into_iter().map(|err| Message::new(err, None)).collect();
|
||||
};
|
||||
|
||||
let lint_ctx = LintContext::new(
|
||||
path.to_path_buf().into_boxed_path(),
|
||||
&Rc::new(semantic_ret.semantic),
|
||||
self.linter.get_settings(),
|
||||
);
|
||||
let lint_ctx =
|
||||
LintContext::new(path.to_path_buf().into_boxed_path(), &Rc::new(semantic_ret.semantic));
|
||||
self.linter.run(lint_ctx)
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -228,7 +228,7 @@ pub fn get_element_type(context: &LintContext, element: &JSXOpeningElement) -> O
|
|||
let JsxA11y { polymorphic_prop_name, components } = jsx_a11y;
|
||||
|
||||
if let Some(polymorphic_prop_name_value) = polymorphic_prop_name {
|
||||
if let Some(as_tag) = has_jsx_prop_lowercase(element, &polymorphic_prop_name_value) {
|
||||
if let Some(as_tag) = has_jsx_prop_lowercase(element, polymorphic_prop_name_value) {
|
||||
if let Some(JSXAttributeValue::StringLiteral(str)) = get_prop_value(as_tag) {
|
||||
return Some(String::from(str.value.as_str()));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ use oxc::{
|
|||
span::SourceType,
|
||||
transformer::{TransformOptions, TransformTarget, Transformer},
|
||||
};
|
||||
use oxc_linter::{LintContext, LintSettings, Linter};
|
||||
use oxc_linter::{LintContext, Linter};
|
||||
use oxc_prettier::{Prettier, PrettierOptions};
|
||||
use serde::Serialize;
|
||||
use wasm_bindgen::prelude::*;
|
||||
|
|
@ -185,9 +185,8 @@ impl Oxc {
|
|||
self.save_diagnostics(semantic_ret.errors);
|
||||
|
||||
let semantic = Rc::new(semantic_ret.semantic);
|
||||
let lint_ctx =
|
||||
LintContext::new(path.into_boxed_path(), &semantic, LintSettings::default());
|
||||
let linter_ret = Linter::new().run(lint_ctx);
|
||||
let lint_ctx = LintContext::new(path.into_boxed_path(), &semantic);
|
||||
let linter_ret = Linter::default().run(lint_ctx);
|
||||
let diagnostics = linter_ret.into_iter().map(|e| e.error).collect();
|
||||
self.save_diagnostics(diagnostics);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ use std::{path::PathBuf, rc::Rc};
|
|||
|
||||
use oxc_allocator::Allocator;
|
||||
use oxc_benchmark::{criterion_group, criterion_main, BenchmarkId, Criterion};
|
||||
use oxc_linter::{AllowWarnDeny, LintContext, LintOptions, LintSettings, Linter};
|
||||
use oxc_linter::{AllowWarnDeny, LintContext, LintOptions, Linter};
|
||||
use oxc_parser::Parser;
|
||||
use oxc_semantic::SemanticBuilder;
|
||||
use oxc_span::SourceType;
|
||||
|
|
@ -30,11 +30,7 @@ fn bench_linter(criterion: &mut Criterion) {
|
|||
let linter = Linter::from_options(lint_options).unwrap();
|
||||
let semantic = Rc::new(semantic_ret.semantic);
|
||||
b.iter(|| {
|
||||
linter.run(LintContext::new(
|
||||
PathBuf::from("").into_boxed_path(),
|
||||
&semantic,
|
||||
LintSettings::default(),
|
||||
))
|
||||
linter.run(LintContext::new(PathBuf::from("").into_boxed_path(), &semantic))
|
||||
});
|
||||
},
|
||||
);
|
||||
|
|
|
|||
Loading…
Reference in a new issue