mirror of
https://github.com/danbulant/oxc
synced 2026-05-19 04:08:41 +00:00
refactor(linter/no-control-regex): remove duplicate code (#6527)
This commit is contained in:
parent
7cc05f1626
commit
2c32dac691
1 changed files with 24 additions and 36 deletions
|
|
@ -88,24 +88,7 @@ impl Rule for NoControlRegex {
|
|||
if let Argument::StringLiteral(pattern) = &expr.arguments[0] {
|
||||
// get pattern from arguments. Missing or non-string arguments
|
||||
// will be runtime errors, but are not covered by this rule.
|
||||
let alloc = Allocator::default();
|
||||
let flags = extract_regex_flags(&expr.arguments);
|
||||
let flags_text = flags.map_or(String::new(), |f| f.to_string());
|
||||
let parser = Parser::new(
|
||||
&alloc,
|
||||
pattern.value.as_str(),
|
||||
ParserOptions::default()
|
||||
.with_span_offset(
|
||||
expr.arguments.first().map_or(0, |arg| arg.span().start),
|
||||
)
|
||||
.with_flags(&flags_text),
|
||||
);
|
||||
|
||||
let Ok(pattern) = parser.parse() else {
|
||||
return;
|
||||
};
|
||||
|
||||
check_pattern(context, &pattern, expr.span);
|
||||
parse_and_check_regex(context, &pattern.value, &expr.arguments, expr.span);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -123,24 +106,7 @@ impl Rule for NoControlRegex {
|
|||
if let Argument::StringLiteral(pattern) = &expr.arguments[0] {
|
||||
// get pattern from arguments. Missing or non-string arguments
|
||||
// will be runtime errors, but are not covered by this rule.
|
||||
let alloc = Allocator::default();
|
||||
let flags = extract_regex_flags(&expr.arguments);
|
||||
let flags_text = flags.map_or(String::new(), |f| f.to_string());
|
||||
let parser = Parser::new(
|
||||
&alloc,
|
||||
pattern.value.as_str(),
|
||||
ParserOptions::default()
|
||||
.with_span_offset(
|
||||
expr.arguments.first().map_or(0, |arg| arg.span().start),
|
||||
)
|
||||
.with_flags(&flags_text),
|
||||
);
|
||||
|
||||
let Ok(pattern) = parser.parse() else {
|
||||
return;
|
||||
};
|
||||
|
||||
check_pattern(context, &pattern, expr.span);
|
||||
parse_and_check_regex(context, &pattern.value, &expr.arguments, expr.span);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -149,6 +115,28 @@ impl Rule for NoControlRegex {
|
|||
}
|
||||
}
|
||||
|
||||
fn parse_and_check_regex<'a>(
|
||||
ctx: &LintContext<'a>,
|
||||
source_text: &'a str,
|
||||
arguments: &oxc_allocator::Vec<'a, Argument<'a>>,
|
||||
expr_span: Span,
|
||||
) {
|
||||
let allocator = Allocator::default();
|
||||
let flags = extract_regex_flags(arguments);
|
||||
let flags_text = flags.map_or(String::new(), |f| f.to_string());
|
||||
let parser = Parser::new(
|
||||
&allocator,
|
||||
source_text,
|
||||
ParserOptions::default()
|
||||
.with_span_offset(arguments.first().map_or(0, |arg| arg.span().start))
|
||||
.with_flags(&flags_text),
|
||||
);
|
||||
let Ok(pattern) = parser.parse() else {
|
||||
return;
|
||||
};
|
||||
check_pattern(ctx, &pattern, expr_span);
|
||||
}
|
||||
|
||||
fn check_pattern(context: &LintContext, pattern: &Pattern, span: Span) {
|
||||
let mut finder = ControlCharacterFinder { control_chars: Vec::new() };
|
||||
finder.visit_pattern(pattern);
|
||||
|
|
|
|||
Loading…
Reference in a new issue