diff --git a/crates/oxc_linter/src/fixer.rs b/crates/oxc_linter/src/fixer.rs index 448063c6615c1..e1169b82db91a 100644 --- a/crates/oxc_linter/src/fixer.rs +++ b/crates/oxc_linter/src/fixer.rs @@ -316,7 +316,7 @@ impl<'a> Fixer<'a> { if start > end { return; } - if i64::from(start) <= last_pos { + if i64::from(start) < last_pos { return; } @@ -558,14 +558,13 @@ mod test { } #[test] - fn apply_one_fix_when_the_start_the_same_as_the_previous_end() { + fn apply_two_fix_when_the_start_the_same_as_the_previous_end() { let result = get_fix_result(vec![ create_message(remove_start(), Some(REMOVE_START)), create_message(replace_id(), Some(REPLACE_ID)), ]); - assert_eq!(result.fixed_code, TEST_CODE.replace("var ", "")); - assert_eq!(result.messages.len(), 1); - assert_eq!(result.messages[0].error.to_string(), "foo"); + assert_eq!(result.fixed_code, TEST_CODE.replace("var answer", "foo")); + assert_eq!(result.messages.len(), 0); assert!(result.fixed); } diff --git a/crates/oxc_linter/src/rules/eslint/no_useless_escape.rs b/crates/oxc_linter/src/rules/eslint/no_useless_escape.rs index 0c01938dd0f1e..096295699804e 100644 --- a/crates/oxc_linter/src/rules/eslint/no_useless_escape.rs +++ b/crates/oxc_linter/src/rules/eslint/no_useless_escape.rs @@ -186,7 +186,7 @@ fn check_template(string: &str) -> Vec { let mut offsets = vec![]; let mut in_escape = false; - let mut prev_char = '`'; + let mut prev_non_escape_char = '`'; let mut byte_offset = 1; let mut chars = string.chars().peekable(); @@ -199,7 +199,7 @@ fn check_template(string: &str) -> Vec { match c { c if c.is_ascii_digit() || c == '`' => { /* noop */ } '{' => { - if prev_char != '$' { + if prev_non_escape_char != '$' { offsets.push(byte_offset - c.len_utf8()); } } @@ -213,10 +213,11 @@ fn check_template(string: &str) -> Vec { } _ => {} } + prev_non_escape_char = c; } else if c == '\\' { in_escape = true; } else { - prev_char = c; + prev_non_escape_char = c; } } @@ -400,7 +401,7 @@ fn test() { ("var foo = '\\#';", "var foo = '#';", None), ("var foo = '\\$';", "var foo = '$';", None), ("var foo = '\\p';", "var foo = 'p';", None), - ("var foo = '\\p\\a\\@';", "var foo = 'p\\a@';", None), + ("var foo = '\\p\\a\\@';", "var foo = 'pa@';", None), ("", "", None), ("var foo = '\\`';", "var foo = '`';", None), ("var foo = `\\\"`;", "var foo = `\"`;", None), diff --git a/crates/oxc_linter/src/snapshots/no_useless_escape.snap b/crates/oxc_linter/src/snapshots/no_useless_escape.snap index 96aaa1e121d7b..5bc1093baa3e1 100644 --- a/crates/oxc_linter/src/snapshots/no_useless_escape.snap +++ b/crates/oxc_linter/src/snapshots/no_useless_escape.snap @@ -181,12 +181,6 @@ source: crates/oxc_linter/src/tester.rs · ── ╰──── - ⚠ eslint(no-useless-escape): Unnecessary escape character '{' - ╭─[no_useless_escape.tsx:1:14] - 1 │ var foo = `\$\{{${foo}`; - · ── - ╰──── - ⚠ eslint(no-useless-escape): Unnecessary escape character '$' ╭─[no_useless_escape.tsx:1:12] 1 │ var foo = `\$a${foo}`;