diff --git a/crates/oxc_linter/src/rules/eslint/no_misleading_character_class.rs b/crates/oxc_linter/src/rules/eslint/no_misleading_character_class.rs index 9256ae5ce013f..4ea9c1174b6f2 100644 --- a/crates/oxc_linter/src/rules/eslint/no_misleading_character_class.rs +++ b/crates/oxc_linter/src/rules/eslint/no_misleading_character_class.rs @@ -185,23 +185,23 @@ impl Rule for NoMisleadingCharacterClass { } // Always check for combining marks, regional indicator, ZWJ, and emoji modifier sequences - if combining_class_sequences(unfiltered_chars) { - ctx.diagnostic(combining_class_diagnostic(pattern.span)); + if let Some(span) = combining_class_sequences(unfiltered_chars) { + ctx.diagnostic(combining_class_diagnostic(span)); } - if regional_indicator_symbol_sequences(unfiltered_chars) { - ctx.diagnostic(regional_indicator_diagnostic(pattern.span)); + if let Some(span) = regional_indicator_symbol_sequences(unfiltered_chars) { + ctx.diagnostic(regional_indicator_diagnostic(span)); } - if zwj_sequences(unfiltered_chars) { - ctx.diagnostic(zwj_diagnostic(pattern.span)); + if let Some(span) = zwj_sequences(unfiltered_chars) { + ctx.diagnostic(zwj_diagnostic(span)); } - if emoji_modifier_sequences(unfiltered_chars) { - ctx.diagnostic(emoji_modifiers_diagnostic(pattern.span)); + if let Some(span) = emoji_modifier_sequences(unfiltered_chars) { + ctx.diagnostic(emoji_modifiers_diagnostic(span)); } - if surrogate_pair_sequences(unfiltered_chars) { - ctx.diagnostic(surrogate_pair_diagnostic(pattern.span)); + if let Some(span) = surrogate_pair_sequences(unfiltered_chars) { + ctx.diagnostic(surrogate_pair_diagnostic(span)); } - if surrogate_pair_sequences_without_flag(unfiltered_chars) { - ctx.diagnostic(surrogate_pair_diagnostic(pattern.span)); + if let Some(span) = surrogate_pair_sequences_without_flag(unfiltered_chars) { + ctx.diagnostic(surrogate_pair_diagnostic(span)); } } }); @@ -220,13 +220,13 @@ fn is_regional_indicator_symbol(value: u32) -> bool { } // Find regional indicator symbol pairs -fn regional_indicator_symbol_sequences(chars: &[&Character]) -> bool { +fn regional_indicator_symbol_sequences(chars: &[&Character]) -> Option { for (prev, curr) in chars.iter().tuple_windows() { if is_regional_indicator_symbol(prev.value) && is_regional_indicator_symbol(curr.value) { - return true; + return Some(Span::new(prev.span.start, curr.span.end)); } } - false + None } // Returns true if the code point is a combining mark (Unicode category Mn, Mc, or Me) @@ -269,21 +269,21 @@ fn is_combining_character(value: u32) -> bool { } // Find combining mark sequences: previous is not combining, current is combining -fn combining_class_sequences(chars: &[&Character]) -> bool { +fn combining_class_sequences(chars: &[&Character]) -> Option { for (index, &char) in chars.iter().enumerate() { if index == 0 { continue; } let previous = chars[index - 1]; if is_combining_character(char.value) && !is_combining_character(previous.value) { - return true; + return Some(Span::new(previous.span.start, char.span.end)); } } - false + None } -// Returns true if a zero width joiner character is detected between two characters -fn zwj_sequences(chars: &[&Character]) -> bool { +// Returns the span of a zero width joiner sequence detected between two non-ZWJ characters, if any +fn zwj_sequences(chars: &[&Character]) -> Option { for (index, &char) in chars.iter().enumerate() { let previous = if index > 0 { Some(chars[index - 1]) } else { None }; let next = chars.get(index + 1).copied(); @@ -292,17 +292,17 @@ fn zwj_sequences(chars: &[&Character]) -> bool { && previous.value != 0x200D && next.value != 0x200D { - return true; + return Some(Span::new(previous.span.start, next.span.end)); } } - false + None } fn is_emoji_modifier(char: &Character) -> bool { char.value >= 0x1f3fb && char.value <= 0x1f3ff } -// Returns true if a emoji modifier sequence is detected +// Returns the span of an emoji modifier sequence detected between a non-emoji-modifier character and an emoji modifier, if any. // // Emoji modifiers are special Unicode characters used to modify the appearance of other emojis, such as: // - Skin tone @@ -311,7 +311,7 @@ fn is_emoji_modifier(char: &Character) -> bool { // - etc. // // They’re combined with base emojis (like people or body parts) to create variant emoji sequences. -fn emoji_modifier_sequences(chars: &[&Character]) -> bool { +fn emoji_modifier_sequences(chars: &[&Character]) -> Option { for (index, &char) in chars.iter().enumerate() { if index == 0 { continue; @@ -319,11 +319,11 @@ fn emoji_modifier_sequences(chars: &[&Character]) -> bool { let previous = chars[index - 1]; if is_emoji_modifier(char) && !is_emoji_modifier(previous) { - return true; + return Some(Span::new(previous.span.start, char.span.end)); } } - false + None } // Returns true if the two code units form a surrogate pair @@ -346,8 +346,8 @@ fn is_unicode_code_point_escape(char: &Character) -> bool { matches!(char.kind, CharacterKind::UnicodeEscape) } -// Find surrogate pairs where at least one is a Unicode code point escape -fn surrogate_pair_sequences_without_flag(chars: &[&Character]) -> bool { +// Find surrogate pairs where neither character is a Unicode code point escape +fn surrogate_pair_sequences_without_flag(chars: &[&Character]) -> Option { for (index, &char) in chars.iter().enumerate() { if index == 0 { continue; @@ -357,14 +357,14 @@ fn surrogate_pair_sequences_without_flag(chars: &[&Character]) -> bool { && !is_unicode_code_point_escape(previous) && !is_unicode_code_point_escape(char) { - return true; + return Some(Span::new(previous.span.start, char.span.end)); } } - false + None } // Find surrogate pairs where at least one is a Unicode code point escape -fn surrogate_pair_sequences(chars: &[&Character]) -> bool { +fn surrogate_pair_sequences(chars: &[&Character]) -> Option { for (index, &char) in chars.iter().enumerate() { if index == 0 { continue; @@ -373,10 +373,10 @@ fn surrogate_pair_sequences(chars: &[&Character]) -> bool { if is_surrogate_pair(previous.value, char.value) && (is_unicode_code_point_escape(previous) || is_unicode_code_point_escape(char)) { - return true; + return Some(Span::new(previous.span.start, char.span.end)); } } - false + None } #[test] diff --git a/crates/oxc_linter/src/snapshots/eslint_no_misleading_character_class.snap b/crates/oxc_linter/src/snapshots/eslint_no_misleading_character_class.snap index c45203f228ca9..f48f8abdee177 100644 --- a/crates/oxc_linter/src/snapshots/eslint_no_misleading_character_class.snap +++ b/crates/oxc_linter/src/snapshots/eslint_no_misleading_character_class.snap @@ -2,817 +2,820 @@ source: crates/oxc_linter/src/tester.rs --- ⚠ eslint(no-misleading-character-class): Unexpected surrogate pair in character class. - ╭─[no_misleading_character_class.tsx:1:10] + ╭─[no_misleading_character_class.tsx:1:11] 1 │ var r = /[👍]/ - · ──── + · ── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected surrogate pair in character class. - ╭─[no_misleading_character_class.tsx:1:10] + ╭─[no_misleading_character_class.tsx:1:11] 1 │ var r = /[\uD83D\uDC4D]/ - · ────────────── + · ──────────── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected surrogate pair in character class. - ╭─[no_misleading_character_class.tsx:1:10] + ╭─[no_misleading_character_class.tsx:1:11] 1 │ var r = /[\uD83D\uDC4D-\uffff]/ - · ───────────────────── + · ──────────── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected surrogate pair in character class. - ╭─[no_misleading_character_class.tsx:1:10] + ╭─[no_misleading_character_class.tsx:1:11] 1 │ var r = /[👍]/ - · ──── + · ── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected surrogate pair in character class. - ╭─[no_misleading_character_class.tsx:1:10] + ╭─[no_misleading_character_class.tsx:1:17] 1 │ var r = /before[\uD83D\uDC4D]after/ - · ───────────────────────── + · ──────────── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected surrogate pair in character class. - ╭─[no_misleading_character_class.tsx:1:10] + ╭─[no_misleading_character_class.tsx:1:17] 1 │ var r = /[before\uD83D\uDC4Dafter]/ - · ───────────────────────── + · ──────────── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected surrogate pair in character class. - ╭─[no_misleading_character_class.tsx:1:10] + ╭─[no_misleading_character_class.tsx:1:17] 1 │ var r = /\uDC4D[\uD83D\uDC4D]/ - · ──────────────────── + · ──────────── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected surrogate pair in character class. - ╭─[no_misleading_character_class.tsx:1:10] + ╭─[no_misleading_character_class.tsx:1:11] 1 │ var r = /[👍]/ - · ──── + · ── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected surrogate pair in character class. - ╭─[no_misleading_character_class.tsx:1:10] + ╭─[no_misleading_character_class.tsx:1:11] 1 │ var r = /[👍]\a/ - · ────── + · ── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected surrogate pair in character class. - ╭─[no_misleading_character_class.tsx:1:10] + ╭─[no_misleading_character_class.tsx:1:13] 1 │ var r = /\a[👍]\a/ - · ──────── + · ── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected surrogate pair in character class. - ╭─[no_misleading_character_class.tsx:1:10] + ╭─[no_misleading_character_class.tsx:1:15] 1 │ var r = /(?<=[👍])/ - · ───────── + · ── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected surrogate pair in character class. - ╭─[no_misleading_character_class.tsx:1:10] + ╭─[no_misleading_character_class.tsx:1:15] 1 │ var r = /(?<=[👍])/ - · ───────── + · ── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected combining class in character class. - ╭─[no_misleading_character_class.tsx:1:10] + ╭─[no_misleading_character_class.tsx:1:11] 1 │ var r = /[Á]/ - · ─── + · ─ ╰──── ⚠ eslint(no-misleading-character-class): Unexpected combining class in character class. - ╭─[no_misleading_character_class.tsx:1:10] + ╭─[no_misleading_character_class.tsx:1:11] 1 │ var r = /[Á]/u - · ─── + · ─ ╰──── ⚠ eslint(no-misleading-character-class): Unexpected combining class in character class. - ╭─[no_misleading_character_class.tsx:1:10] + ╭─[no_misleading_character_class.tsx:1:11] 1 │ var r = /[\u0041\u0301]/ - · ────────────── + · ──────────── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected combining class in character class. - ╭─[no_misleading_character_class.tsx:1:10] + ╭─[no_misleading_character_class.tsx:1:11] 1 │ var r = /[\u0041\u0301]/u - · ────────────── + · ──────────── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected combining class in character class. - ╭─[no_misleading_character_class.tsx:1:10] + ╭─[no_misleading_character_class.tsx:1:11] 1 │ var r = /[\u{41}\u{301}]/u - · ─────────────── + · ───────────── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected combining class in character class. - ╭─[no_misleading_character_class.tsx:1:10] + ╭─[no_misleading_character_class.tsx:1:11] 1 │ var r = /[❇️]/ - · ──── + · ── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected combining class in character class. - ╭─[no_misleading_character_class.tsx:1:10] + ╭─[no_misleading_character_class.tsx:1:11] 1 │ var r = /[❇️]/u - · ──── + · ── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected combining class in character class. - ╭─[no_misleading_character_class.tsx:1:10] + ╭─[no_misleading_character_class.tsx:1:11] 1 │ var r = /[\u2747\uFE0F]/ - · ────────────── + · ──────────── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected combining class in character class. - ╭─[no_misleading_character_class.tsx:1:10] + ╭─[no_misleading_character_class.tsx:1:11] 1 │ var r = /[\u2747\uFE0F]/u - · ────────────── + · ──────────── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected combining class in character class. - ╭─[no_misleading_character_class.tsx:1:10] + ╭─[no_misleading_character_class.tsx:1:11] 1 │ var r = /[\u{2747}\u{FE0F}]/u - · ────────────────── + · ──────────────── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected surrogate pair in character class. - ╭─[no_misleading_character_class.tsx:1:10] + ╭─[no_misleading_character_class.tsx:1:11] 1 │ var r = /[👶🏻]/ - · ──── + · ── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected emoji modifier in character class. - ╭─[no_misleading_character_class.tsx:1:10] + ╭─[no_misleading_character_class.tsx:1:11] 1 │ var r = /[👶🏻]/u - · ──── + · ── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected emoji modifier in character class. - ╭─[no_misleading_character_class.tsx:1:10] + ╭─[no_misleading_character_class.tsx:1:11] 1 │ var r = /[a\uD83C\uDFFB]/u - · ─────────────── + · ───────────── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected emoji modifier in character class. - ╭─[no_misleading_character_class.tsx:1:10] + ╭─[no_misleading_character_class.tsx:1:11] 1 │ var r = /[\uD83D\uDC76\uD83C\uDFFB]/u - · ────────────────────────── + · ──────────────────────── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected emoji modifier in character class. - ╭─[no_misleading_character_class.tsx:1:10] + ╭─[no_misleading_character_class.tsx:1:11] 1 │ var r = /[\u{1F476}\u{1F3FB}]/u - · ──────────────────── + · ────────────────── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected surrogate pair in character class. - ╭─[no_misleading_character_class.tsx:1:10] + ╭─[no_misleading_character_class.tsx:1:11] 1 │ var r = /[🇯🇵]/ - · ──── + · ─ ╰──── ⚠ eslint(no-misleading-character-class): Unexpected surrogate pair in character class. - ╭─[no_misleading_character_class.tsx:1:10] + ╭─[no_misleading_character_class.tsx:1:11] 1 │ var r = /[🇯🇵]/i - · ──── + · ─ ╰──── ⚠ eslint(no-misleading-character-class): Unexpected regional indicator in character class. - ╭─[no_misleading_character_class.tsx:1:10] + ╭─[no_misleading_character_class.tsx:1:11] 1 │ var r = /[🇯🇵]/u - · ──── + · ── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected regional indicator in character class. - ╭─[no_misleading_character_class.tsx:1:10] + ╭─[no_misleading_character_class.tsx:1:11] 1 │ var r = /[\uD83C\uDDEF\uD83C\uDDF5]/u - · ────────────────────────── + · ──────────────────────── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected regional indicator in character class. - ╭─[no_misleading_character_class.tsx:1:10] + ╭─[no_misleading_character_class.tsx:1:11] 1 │ var r = /[\u{1F1EF}\u{1F1F5}]/u - · ──────────────────── + · ────────────────── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected joined character sequence in character class. - ╭─[no_misleading_character_class.tsx:1:10] + ╭─[no_misleading_character_class.tsx:1:15] 1 │ var r = /[👨‍👩‍👦]/ - · ──── + · ─ ╰──── ⚠ eslint(no-misleading-character-class): Unexpected surrogate pair in character class. - ╭─[no_misleading_character_class.tsx:1:10] + ╭─[no_misleading_character_class.tsx:1:11] 1 │ var r = /[👨‍👩‍👦]/ - · ──── + · ── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected joined character sequence in character class. - ╭─[no_misleading_character_class.tsx:1:10] + ╭─[no_misleading_character_class.tsx:1:11] 1 │ var r = /[👨‍👩‍👦]/u - · ──── + · ── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected joined character sequence in character class. - ╭─[no_misleading_character_class.tsx:1:10] + ╭─[no_misleading_character_class.tsx:1:11] 1 │ var r = /[👩‍👦]/u - · ──── + · ── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected joined character sequence in character class. - ╭─[no_misleading_character_class.tsx:1:10] + ╭─[no_misleading_character_class.tsx:1:11] 1 │ var r = /[👩‍👦][👩‍👦]/u - · ──────── + · ── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected joined character sequence in character class. - ╭─[no_misleading_character_class.tsx:1:10] + ╭─[no_misleading_character_class.tsx:1:24] 1 │ var r = /[👩‍👦][👩‍👦]/u - · ──────── + · ── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected joined character sequence in character class. - ╭─[no_misleading_character_class.tsx:1:10] + ╭─[no_misleading_character_class.tsx:1:11] 1 │ var r = /[👨‍👩‍👦]foo[👨‍👩‍👦]/u - · ─────────── + · ── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected joined character sequence in character class. - ╭─[no_misleading_character_class.tsx:1:10] + ╭─[no_misleading_character_class.tsx:1:34] 1 │ var r = /[👨‍👩‍👦]foo[👨‍👩‍👦]/u - · ─────────── + · ── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected joined character sequence in character class. - ╭─[no_misleading_character_class.tsx:1:10] + ╭─[no_misleading_character_class.tsx:1:11] 1 │ var r = /[👨‍👩‍👦👩‍👦]/u - · ────── + · ── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected joined character sequence in character class. - ╭─[no_misleading_character_class.tsx:1:10] + ╭─[no_misleading_character_class.tsx:1:11] 1 │ var r = /[\uD83D\uDC68\u200D\uD83D\uDC69\u200D\uD83D\uDC66]/u - · ────────────────────────────────────────────────── + · ────────────────────────────── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected joined character sequence in character class. - ╭─[no_misleading_character_class.tsx:1:10] + ╭─[no_misleading_character_class.tsx:1:11] 1 │ var r = /[\u{1F468}\u{200D}\u{1F469}\u{200D}\u{1F466}]/u - · ───────────────────────────────────────────── + · ────────────────────────── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected joined character sequence in character class. - ╭─[no_misleading_character_class.tsx:1:10] + ╭─[no_misleading_character_class.tsx:1:11] 1 │ var r = /[\uD83D\uDC68\u200D\uD83D\uDC69]/u - · ──────────────────────────────── + · ────────────────────────────── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected joined character sequence in character class. - ╭─[no_misleading_character_class.tsx:1:10] + ╭─[no_misleading_character_class.tsx:1:11] 1 │ var r = /[\u{1F468}\u{200D}\u{1F469}]/u - · ──────────────────────────── + · ────────────────────────── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected joined character sequence in character class. - ╭─[no_misleading_character_class.tsx:1:10] + ╭─[no_misleading_character_class.tsx:1:11] 1 │ var r = /[\u{1F468}\u{200D}\u{1F469}\u{200D}\u{1F466}]foo[\u{1F468}\u{200D}\u{1F469}\u{200D}\u{1F466}]/u - · ───────────────────────────────────────────────────────────────────────────────────────────── + · ────────────────────────── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected joined character sequence in character class. - ╭─[no_misleading_character_class.tsx:1:10] + ╭─[no_misleading_character_class.tsx:1:59] 1 │ var r = /[\u{1F468}\u{200D}\u{1F469}\u{200D}\u{1F466}]foo[\u{1F468}\u{200D}\u{1F469}\u{200D}\u{1F466}]/u - · ───────────────────────────────────────────────────────────────────────────────────────────── + · ────────────────────────── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected surrogate pair in character class. - ╭─[no_misleading_character_class.tsx:1:17] + ╭─[no_misleading_character_class.tsx:1:18] 1 │ var r = RegExp("[👍]", "") - · ──── + · ── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected surrogate pair in character class. - ╭─[no_misleading_character_class.tsx:1:21] + ╭─[no_misleading_character_class.tsx:1:22] 1 │ var r = new RegExp("[👍]", "") - · ──── + · ── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected surrogate pair in character class. - ╭─[no_misleading_character_class.tsx:1:21] + ╭─[no_misleading_character_class.tsx:1:22] 1 │ var r = new RegExp('[👍]', ``) - · ──── + · ── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected surrogate pair in character class. - ╭─[no_misleading_character_class.tsx:1:21] - 1 │ ╭─▶ var r = new RegExp(` - 2 │ ╰─▶ [👍]`) + ╭─[no_misleading_character_class.tsx:2:21] + 1 │ var r = new RegExp(` + 2 │ [👍]`) + · ─ ╰──── ⚠ eslint(no-misleading-character-class): Unexpected combining class in character class. - ╭─[no_misleading_character_class.tsx:1:21] - 1 │ ╭─▶ var r = new RegExp(` - 2 │ ╰─▶ [❇️]`) + ╭─[no_misleading_character_class.tsx:2:21] + 1 │ var r = new RegExp(` + 2 │ [❇️]`) + · ─ ╰──── ⚠ eslint(no-misleading-character-class): Unexpected combining class in character class. - ╭─[no_misleading_character_class.tsx:1:21] - 1 │ ╭─▶ var r = new RegExp(` - 2 │ ╰─▶ [❇️]`) + ╭─[no_misleading_character_class.tsx:2:5] + 1 │ var r = new RegExp(` + 2 │ [❇️]`) + · ─ ╰──── ⚠ eslint(no-misleading-character-class): Unexpected surrogate pair in character class. - ╭─[no_misleading_character_class.tsx:1:39] + ╭─[no_misleading_character_class.tsx:1:40] 1 │ const flags = ""; var r = new RegExp("[👍]", flags) - · ──── + · ── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected surrogate pair in character class. - ╭─[no_misleading_character_class.tsx:1:17] + ╭─[no_misleading_character_class.tsx:1:18] 1 │ var r = RegExp("[\\uD83D\\uDC4D]", "") - · ──────────────── + · ────────────── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected surrogate pair in character class. - ╭─[no_misleading_character_class.tsx:1:17] + ╭─[no_misleading_character_class.tsx:1:24] 1 │ var r = RegExp("before[\\uD83D\\uDC4D]after", "") - · ─────────────────────────── + · ────────────── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected surrogate pair in character class. - ╭─[no_misleading_character_class.tsx:1:17] + ╭─[no_misleading_character_class.tsx:1:24] 1 │ var r = RegExp("[before\\uD83D\\uDC4Dafter]", "") - · ─────────────────────────── + · ────────────── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected surrogate pair in character class. - ╭─[no_misleading_character_class.tsx:1:17] + ╭─[no_misleading_character_class.tsx:1:28] 1 │ var r = RegExp("\t\t\t👍[👍]") - · ──────────── + · ── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected surrogate pair in character class. - ╭─[no_misleading_character_class.tsx:1:21] + ╭─[no_misleading_character_class.tsx:1:28] 1 │ var r = new RegExp("\u1234[\\uD83D\\uDC4D]") - · ────────────────────── + · ────────────── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected surrogate pair in character class. - ╭─[no_misleading_character_class.tsx:1:21] + ╭─[no_misleading_character_class.tsx:1:40] 1 │ var r = new RegExp("\\u1234\\u5678👎[👍]") - · ──────────────────── + · ── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected surrogate pair in character class. - ╭─[no_misleading_character_class.tsx:1:21] + ╭─[no_misleading_character_class.tsx:1:40] 1 │ var r = new RegExp("\\u1234\\u5678👍[👍]") - · ──────────────────── + · ── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected surrogate pair in character class. - ╭─[no_misleading_character_class.tsx:1:21] + ╭─[no_misleading_character_class.tsx:1:22] 1 │ var r = new RegExp("[👍]", "") - · ──── + · ── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected surrogate pair in character class. - ╭─[no_misleading_character_class.tsx:1:21] + ╭─[no_misleading_character_class.tsx:1:22] 1 │ var r = new RegExp("[👍]", "") - · ──── + · ── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected surrogate pair in character class. - ╭─[no_misleading_character_class.tsx:1:21] + ╭─[no_misleading_character_class.tsx:1:22] 1 │ var r = new RegExp("[👍]\\a", "") - · ─────── + · ── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected surrogate pair in character class. - ╭─[no_misleading_character_class.tsx:1:21] + ╭─[no_misleading_character_class.tsx:1:27] 1 │ var r = new RegExp("/(?<=[👍])", "") - · ────────── + · ── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected surrogate pair in character class. - ╭─[no_misleading_character_class.tsx:1:21] + ╭─[no_misleading_character_class.tsx:1:27] 1 │ var r = new RegExp("/(?<=[👍])", "") - · ────────── + · ── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected combining class in character class. - ╭─[no_misleading_character_class.tsx:1:21] + ╭─[no_misleading_character_class.tsx:1:22] 1 │ var r = new RegExp("[Á]", "") - · ─── + · ─ ╰──── ⚠ eslint(no-misleading-character-class): Unexpected combining class in character class. - ╭─[no_misleading_character_class.tsx:1:21] + ╭─[no_misleading_character_class.tsx:1:22] 1 │ var r = new RegExp("[Á]", "u") - · ─── + · ─ ╰──── ⚠ eslint(no-misleading-character-class): Unexpected combining class in character class. - ╭─[no_misleading_character_class.tsx:1:21] + ╭─[no_misleading_character_class.tsx:1:22] 1 │ var r = new RegExp("[\\u0041\\u0301]", "") - · ──────────────── + · ────────────── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected combining class in character class. - ╭─[no_misleading_character_class.tsx:1:21] + ╭─[no_misleading_character_class.tsx:1:22] 1 │ var r = new RegExp("[\\u0041\\u0301]", "u") - · ──────────────── + · ────────────── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected combining class in character class. - ╭─[no_misleading_character_class.tsx:1:21] + ╭─[no_misleading_character_class.tsx:1:22] 1 │ var r = new RegExp("[\\u{41}\\u{301}]", "u") - · ───────────────── + · ─────────────── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected combining class in character class. - ╭─[no_misleading_character_class.tsx:1:21] + ╭─[no_misleading_character_class.tsx:1:22] 1 │ var r = new RegExp("[❇️]", "") - · ──── + · ── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected combining class in character class. - ╭─[no_misleading_character_class.tsx:1:21] + ╭─[no_misleading_character_class.tsx:1:22] 1 │ var r = new RegExp("[❇️]", "u") - · ──── + · ── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected combining class in character class. - ╭─[no_misleading_character_class.tsx:1:13] + ╭─[no_misleading_character_class.tsx:1:14] 1 │ new RegExp("[ \\ufe0f]", "") - · ────────── + · ──────── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected combining class in character class. - ╭─[no_misleading_character_class.tsx:1:13] + ╭─[no_misleading_character_class.tsx:1:14] 1 │ new RegExp("[ \\ufe0f]", "u") - · ────────── + · ──────── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected combining class in character class. - ╭─[no_misleading_character_class.tsx:1:13] + ╭─[no_misleading_character_class.tsx:1:14] 1 │ new RegExp("[ \\ufe0f][ \\ufe0f]") - · ──────────────────── + · ──────── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected combining class in character class. - ╭─[no_misleading_character_class.tsx:1:13] + ╭─[no_misleading_character_class.tsx:1:24] 1 │ new RegExp("[ \\ufe0f][ \\ufe0f]") - · ──────────────────── + · ──────── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected combining class in character class. - ╭─[no_misleading_character_class.tsx:1:21] + ╭─[no_misleading_character_class.tsx:1:22] 1 │ var r = new RegExp("[\\u2747\\uFE0F]", "") - · ──────────────── + · ────────────── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected combining class in character class. - ╭─[no_misleading_character_class.tsx:1:21] + ╭─[no_misleading_character_class.tsx:1:22] 1 │ var r = new RegExp("[\\u2747\\uFE0F]", "u") - · ──────────────── + · ────────────── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected combining class in character class. - ╭─[no_misleading_character_class.tsx:1:21] + ╭─[no_misleading_character_class.tsx:1:22] 1 │ var r = new RegExp("[\\u{2747}\\u{FE0F}]", "u") - · ──────────────────── + · ────────────────── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected surrogate pair in character class. - ╭─[no_misleading_character_class.tsx:1:21] + ╭─[no_misleading_character_class.tsx:1:22] 1 │ var r = new RegExp("[👶🏻]", "") - · ──── + · ── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected emoji modifier in character class. - ╭─[no_misleading_character_class.tsx:1:21] + ╭─[no_misleading_character_class.tsx:1:22] 1 │ var r = new RegExp("[👶🏻]", "u") - · ──── + · ── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected emoji modifier in character class. - ╭─[no_misleading_character_class.tsx:1:21] + ╭─[no_misleading_character_class.tsx:1:22] 1 │ var r = new RegExp("[\\uD83D\\uDC76\\uD83C\\uDFFB]", "u") - · ────────────────────────────── + · ──────────────────────────── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected emoji modifier in character class. - ╭─[no_misleading_character_class.tsx:1:21] + ╭─[no_misleading_character_class.tsx:1:22] 1 │ var r = new RegExp("[\\u{1F476}\\u{1F3FB}]", "u") - · ────────────────────── + · ──────────────────── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected surrogate pair in character class. - ╭─[no_misleading_character_class.tsx:1:17] + ╭─[no_misleading_character_class.tsx:1:25] 1 │ var r = RegExp(` 👍[👍]`) - · ──────────── + · ─ ╰──── ⚠ eslint(no-misleading-character-class): Unexpected surrogate pair in character class. - ╭─[no_misleading_character_class.tsx:1:17] + ╭─[no_misleading_character_class.tsx:1:28] 1 │ var r = RegExp(`\t\t\t👍[👍]`) - · ──────────── + · ── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected surrogate pair in character class. - ╭─[no_misleading_character_class.tsx:1:21] + ╭─[no_misleading_character_class.tsx:1:22] 1 │ var r = new RegExp("[🇯🇵]", "") - · ──── + · ─ ╰──── ⚠ eslint(no-misleading-character-class): Unexpected surrogate pair in character class. - ╭─[no_misleading_character_class.tsx:1:21] + ╭─[no_misleading_character_class.tsx:1:22] 1 │ var r = new RegExp("[🇯🇵]", "i") - · ──── + · ─ ╰──── ⚠ eslint(no-misleading-character-class): Unexpected surrogate pair in character class. - ╭─[no_misleading_character_class.tsx:1:21] + ╭─[no_misleading_character_class.tsx:1:22] 1 │ var r = new RegExp('[🇯🇵]', `i`) - · ──── + · ─ ╰──── ⚠ eslint(no-misleading-character-class): Unexpected surrogate pair in character class. - ╭─[no_misleading_character_class.tsx:1:21] + ╭─[no_misleading_character_class.tsx:1:22] 1 │ var r = new RegExp("[🇯🇵]") - · ──── + · ─ ╰──── ⚠ eslint(no-misleading-character-class): Unexpected surrogate pair in character class. - ╭─[no_misleading_character_class.tsx:1:21] + ╭─[no_misleading_character_class.tsx:1:22] 1 │ var r = new RegExp("[🇯🇵]",) - · ──── + · ─ ╰──── ⚠ eslint(no-misleading-character-class): Unexpected surrogate pair in character class. - ╭─[no_misleading_character_class.tsx:1:22] + ╭─[no_misleading_character_class.tsx:1:23] 1 │ var r = new RegExp(("[🇯🇵]")) - · ──── + · ─ ╰──── ⚠ eslint(no-misleading-character-class): Unexpected surrogate pair in character class. - ╭─[no_misleading_character_class.tsx:1:23] + ╭─[no_misleading_character_class.tsx:1:24] 1 │ var r = new RegExp((("[🇯🇵]"))) - · ──── + · ─ ╰──── ⚠ eslint(no-misleading-character-class): Unexpected surrogate pair in character class. - ╭─[no_misleading_character_class.tsx:1:22] + ╭─[no_misleading_character_class.tsx:1:23] 1 │ var r = new RegExp(("[🇯🇵]"),) - · ──── + · ─ ╰──── ⚠ eslint(no-misleading-character-class): Unexpected regional indicator in character class. - ╭─[no_misleading_character_class.tsx:1:21] + ╭─[no_misleading_character_class.tsx:1:22] 1 │ var r = new RegExp("[🇯🇵]", "u") - · ──── + · ── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected regional indicator in character class. - ╭─[no_misleading_character_class.tsx:1:21] + ╭─[no_misleading_character_class.tsx:1:22] 1 │ var r = new RegExp("[\\uD83C\\uDDEF\\uD83C\\uDDF5]", "u") - · ────────────────────────────── + · ──────────────────────────── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected regional indicator in character class. - ╭─[no_misleading_character_class.tsx:1:21] + ╭─[no_misleading_character_class.tsx:1:22] 1 │ var r = new RegExp("[\\u{1F1EF}\\u{1F1F5}]", "u") - · ────────────────────── + · ──────────────────── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected joined character sequence in character class. - ╭─[no_misleading_character_class.tsx:1:21] + ╭─[no_misleading_character_class.tsx:1:26] 1 │ var r = new RegExp("[👨‍👩‍👦]", "") - · ──── + · ─ ╰──── ⚠ eslint(no-misleading-character-class): Unexpected surrogate pair in character class. - ╭─[no_misleading_character_class.tsx:1:21] + ╭─[no_misleading_character_class.tsx:1:22] 1 │ var r = new RegExp("[👨‍👩‍👦]", "") - · ──── + · ── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected joined character sequence in character class. - ╭─[no_misleading_character_class.tsx:1:21] + ╭─[no_misleading_character_class.tsx:1:22] 1 │ var r = new RegExp("[👨‍👩‍👦]", "u") - · ──── + · ── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected joined character sequence in character class. - ╭─[no_misleading_character_class.tsx:1:21] + ╭─[no_misleading_character_class.tsx:1:22] 1 │ var r = new RegExp("[👩‍👦]", "u") - · ──── + · ── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected joined character sequence in character class. - ╭─[no_misleading_character_class.tsx:1:21] + ╭─[no_misleading_character_class.tsx:1:22] 1 │ var r = new RegExp("[👩‍👦][👩‍👦]", "u") - · ──────── + · ── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected joined character sequence in character class. - ╭─[no_misleading_character_class.tsx:1:21] + ╭─[no_misleading_character_class.tsx:1:35] 1 │ var r = new RegExp("[👩‍👦][👩‍👦]", "u") - · ──────── + · ── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected joined character sequence in character class. - ╭─[no_misleading_character_class.tsx:1:21] + ╭─[no_misleading_character_class.tsx:1:22] 1 │ var r = new RegExp("[👨‍👩‍👦]foo[👨‍👩‍👦]", "u") - · ─────────── + · ── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected joined character sequence in character class. - ╭─[no_misleading_character_class.tsx:1:21] + ╭─[no_misleading_character_class.tsx:1:45] 1 │ var r = new RegExp("[👨‍👩‍👦]foo[👨‍👩‍👦]", "u") - · ─────────── + · ── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected joined character sequence in character class. - ╭─[no_misleading_character_class.tsx:1:21] + ╭─[no_misleading_character_class.tsx:1:22] 1 │ var r = new RegExp("[👨‍👩‍👦👩‍👦]", "u") - · ────── + · ── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected joined character sequence in character class. - ╭─[no_misleading_character_class.tsx:1:21] + ╭─[no_misleading_character_class.tsx:1:22] 1 │ var r = new RegExp("[\\uD83D\\uDC68\\u200D\\uD83D\\uDC69\\u200D\\uD83D\\uDC66]", "u") - · ────────────────────────────────────────────────────────── + · ─────────────────────────────────── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected joined character sequence in character class. - ╭─[no_misleading_character_class.tsx:1:21] + ╭─[no_misleading_character_class.tsx:1:22] 1 │ var r = new RegExp("[\\u{1F468}\\u{200D}\\u{1F469}\\u{200D}\\u{1F466}]", "u") - · ────────────────────────────────────────────────── + · ───────────────────────────── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected combining class in character class. - ╭─[no_misleading_character_class.tsx:1:32] + ╭─[no_misleading_character_class.tsx:1:33] 1 │ var r = new globalThis.RegExp("[❇️]", "") - · ──── + · ── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected emoji modifier in character class. - ╭─[no_misleading_character_class.tsx:1:32] + ╭─[no_misleading_character_class.tsx:1:33] 1 │ var r = new globalThis.RegExp("[👶🏻]", "u") - · ──── + · ── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected surrogate pair in character class. - ╭─[no_misleading_character_class.tsx:1:32] + ╭─[no_misleading_character_class.tsx:1:33] 1 │ var r = new globalThis.RegExp("[🇯🇵]", "") - · ──── + · ─ ╰──── ⚠ eslint(no-misleading-character-class): Unexpected joined character sequence in character class. - ╭─[no_misleading_character_class.tsx:1:32] + ╭─[no_misleading_character_class.tsx:1:33] 1 │ var r = new globalThis.RegExp("[\\u{1F468}\\u{200D}\\u{1F469}\\u{200D}\\u{1F466}]", "u") - · ────────────────────────────────────────────────── + · ───────────────────────────── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected surrogate pair in character class. - ╭─[no_misleading_character_class.tsx:1:2] + ╭─[no_misleading_character_class.tsx:1:3] 1 │ /[\ud83d\u{dc4d}]/u - · ──────────────── + · ────────────── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected surrogate pair in character class. - ╭─[no_misleading_character_class.tsx:1:2] + ╭─[no_misleading_character_class.tsx:1:3] 1 │ /[\u{d83d}\udc4d]/u - · ──────────────── + · ────────────── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected surrogate pair in character class. - ╭─[no_misleading_character_class.tsx:1:2] + ╭─[no_misleading_character_class.tsx:1:3] 1 │ /[\u{d83d}\u{dc4d}]/u - · ────────────────── + · ──────────────── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected surrogate pair in character class. - ╭─[no_misleading_character_class.tsx:1:2] + ╭─[no_misleading_character_class.tsx:1:3] 1 │ /[\uD83D\u{DC4d}]/u - · ──────────────── + · ────────────── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected surrogate pair in character class. - ╭─[no_misleading_character_class.tsx:1:9] + ╭─[no_misleading_character_class.tsx:1:10] 1 │ RegExp(/[👍]/) - · ──── + · ── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected surrogate pair in character class. - ╭─[no_misleading_character_class.tsx:1:9] + ╭─[no_misleading_character_class.tsx:1:10] 1 │ RegExp(/[👍]/, 'i'); - · ──── + · ── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected surrogate pair in character class. - ╭─[no_misleading_character_class.tsx:1:9] + ╭─[no_misleading_character_class.tsx:1:10] 1 │ RegExp(/[👍]/, 'g'); - · ──── + · ── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected combining class in character class. - ╭─[no_misleading_character_class.tsx:1:13] + ╭─[no_misleading_character_class.tsx:1:17] 1 │ new RegExp("\x5B \\ufe0f\u005D") - · ────────────────── + · ──────── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected combining class in character class. - ╭─[no_misleading_character_class.tsx:1:13] + ╭─[no_misleading_character_class.tsx:1:14] 1 │ new RegExp("[ \u{5c}ufe0f]") - · ────────────── + · ──────────── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected combining class in character class. - ╭─[no_misleading_character_class.tsx:1:13] + ╭─[no_misleading_character_class.tsx:1:14] 1 │ new RegExp("[ \\ufe\60f]") - · ──────────── + · ────────── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected combining class in character class. - ╭─[no_misleading_character_class.tsx:1:13] + ╭─[no_misleading_character_class.tsx:1:14] 1 │ new RegExp("[ \\uf\e0f]") - · ─────────── + · ───────── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected joined character sequence in character class. - ╭─[no_misleading_character_class.tsx:1:13] + ╭─[no_misleading_character_class.tsx:1:14] 1 │ new RegExp(`[.\\u200D.]`) - · ─────────── + · ───────── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected joined character sequence in character class. - ╭─[no_misleading_character_class.tsx:1:13] + ╭─[no_misleading_character_class.tsx:1:14] 1 │ new RegExp(`[.\\\x75200D.]`) - · ────────────── + · ──────────── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected emoji modifier in character class. - ╭─[no_misleading_character_class.tsx:1:10] + ╭─[no_misleading_character_class.tsx:1:12] 1 │ var r = /[[👶🏻]]/v - · ────── + · ── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected combining class in character class. - ╭─[no_misleading_character_class.tsx:1:2] + ╭─[no_misleading_character_class.tsx:1:3] 1 │ /[Á]/ - · ─── + · ─ ╰──── ⚠ eslint(no-misleading-character-class): Unexpected combining class in character class. - ╭─[no_misleading_character_class.tsx:1:2] + ╭─[no_misleading_character_class.tsx:1:3] 1 │ /[\\̶]/ - · ──── + · ── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected combining class in character class. - ╭─[no_misleading_character_class.tsx:1:2] + ╭─[no_misleading_character_class.tsx:1:3] 1 │ /[\n̅]/ - · ──── + · ── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected surrogate pair in character class. - ╭─[no_misleading_character_class.tsx:1:2] + ╭─[no_misleading_character_class.tsx:1:3] 1 │ /[\👍]/ - · ───── + · ─── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected combining class in character class. - ╭─[no_misleading_character_class.tsx:1:9] + ╭─[no_misleading_character_class.tsx:1:10] 1 │ RegExp('[\è]') - · ──── + · ── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected surrogate pair in character class. - ╭─[no_misleading_character_class.tsx:1:9] + ╭─[no_misleading_character_class.tsx:1:10] 1 │ RegExp('[\👍]') - · ───── + · ─── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected surrogate pair in character class. - ╭─[no_misleading_character_class.tsx:1:9] + ╭─[no_misleading_character_class.tsx:1:10] 1 │ RegExp('[\\👍]') - · ────── + · ──── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected combining class in character class. - ╭─[no_misleading_character_class.tsx:1:9] + ╭─[no_misleading_character_class.tsx:1:10] 1 │ RegExp('[\❇️]') - · ───── + · ─── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected surrogate pair in character class. - ╭─[no_misleading_character_class.tsx:1:9] + ╭─[no_misleading_character_class.tsx:1:10] 1 │ RegExp(`[\👍]`) // Backslash + U+D83D + U+DC4D - · ───── + · ─── ╰──── ⚠ eslint(no-misleading-character-class): Unexpected joined character sequence in character class. - ╭─[no_misleading_character_class.tsx:1:2] + ╭─[no_misleading_character_class.tsx:1:3] 1 │ /[\u200c\u200d\p{ID_Continue}.]/ - · ────────────────────────────── + · ────────────── ╰────