From bd91c1a7dfa5058e28e343fdc31902f80a276c5a Mon Sep 17 00:00:00 2001 From: Yuji Sugiura Date: Sat, 7 Sep 2024 19:27:22 +0900 Subject: [PATCH] Revert "Revert to see benchmark" This reverts commit 213468e8a45b9d2c47d997c127a90875c9efabe3. --- .../src/rules/eslint/no_invalid_regexp.rs | 26 +++++++++++++------ 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/crates/oxc_linter/src/rules/eslint/no_invalid_regexp.rs b/crates/oxc_linter/src/rules/eslint/no_invalid_regexp.rs index 2ab342aa5a1a1b..762fa3d529ac3a 100644 --- a/crates/oxc_linter/src/rules/eslint/no_invalid_regexp.rs +++ b/crates/oxc_linter/src/rules/eslint/no_invalid_regexp.rs @@ -1,6 +1,6 @@ use oxc_allocator::Allocator; use oxc_ast::{ast::Argument, AstKind}; -use oxc_diagnostics::OxcDiagnostic; +use oxc_diagnostics::{LabeledSpan, OxcDiagnostic}; use oxc_macros::declare_oxc_lint; use oxc_regular_expression::{FlagsParser, ParserOptions, PatternParser}; use oxc_span::Span; @@ -81,17 +81,27 @@ impl Rule for NoInvalidRegexp { // For compatibility with ESLint, we need to check "user-defined duplicated" flags here // "valid duplicated" flags are also checked let mut unique_flags = FxHashSet::default(); + let mut violations = vec![]; for (idx, ch) in flags_text.char_indices() { if !unique_flags.insert(ch) { - #[allow(clippy::cast_possible_truncation)] - let span_start = flags_span_start + idx as u32; - return ctx.diagnostic( - // Use the same prefix with `oxc_regular_expression` - OxcDiagnostic::warn("Invalid regular expression: Duplicated flag") - .with_label(Span::new(span_start, span_start)), - ); + violations.push(idx); } } + if !violations.is_empty() { + return ctx.diagnostic( + // Use the same prefix with `oxc_regular_expression` + OxcDiagnostic::warn("Invalid regular expression: Duplicated flag").with_labels( + violations + .iter() + .map(|&start| { + #[allow(clippy::cast_possible_truncation)] + let start = flags_span_start + start as u32; + LabeledSpan::new_with_span(None, Span::new(start, start)) + }) + .collect::>(), + ), + ); + } // Omit user defined invalid flags for flag in &self.0.allow_constructor_flags {