refactor(linter/no-control-regex): remove duplicate code (#6527)

This commit is contained in:
DonIsaac 2024-10-13 19:29:39 +00:00
parent 7cc05f1626
commit 2c32dac691

View file

@ -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);