From cba1e7f463aedf5aed9f7582bc1c8d645230b2e3 Mon Sep 17 00:00:00 2001 From: Wang Wenzhe Date: Wed, 8 May 2024 14:32:57 +0800 Subject: [PATCH] chore(linter): shorten eslint/eqeqeq rule error message's span (#3193) --- crates/oxc_linter/src/rules/eslint/eqeqeq.rs | 18 ++++++++- crates/oxc_linter/src/snapshots/eqeqeq.snap | 40 ++++++++++---------- 2 files changed, 36 insertions(+), 22 deletions(-) diff --git a/crates/oxc_linter/src/rules/eslint/eqeqeq.rs b/crates/oxc_linter/src/rules/eslint/eqeqeq.rs index 533de51c9..7c576a9a5 100644 --- a/crates/oxc_linter/src/rules/eslint/eqeqeq.rs +++ b/crates/oxc_linter/src/rules/eslint/eqeqeq.rs @@ -101,10 +101,24 @@ impl Rule for Eqeqeq { let (preferred_operator, preferred_operator_with_padding) = to_strict_eq_operator_str(binary_expr.operator); + #[allow(clippy::cast_possible_truncation)] + let operator_span = { + let left_end = binary_expr.left.span().end; + let right_start = binary_expr.right.span().start; + let offset = Span::new(left_end, right_start) + .source_text(ctx.source_text()) + .find(operator) + .unwrap_or(0) as u32; + + let operator_start = left_end + offset; + let operator_end = operator_start + operator.len() as u32; + Span::new(operator_start, operator_end) + }; + // If the comparison is a `typeof` comparison or both sides are literals with the same type, then it's safe to fix. if is_type_of_binary_bool || are_literals_and_same_type_bool { ctx.diagnostic_with_fix( - EqeqeqDiagnostic(operator, preferred_operator, binary_expr.span), + EqeqeqDiagnostic(operator, preferred_operator, operator_span), || { let start = binary_expr.left.span().end; let end = binary_expr.right.span().start; @@ -112,7 +126,7 @@ impl Rule for Eqeqeq { }, ); } else { - ctx.diagnostic(EqeqeqDiagnostic(operator, preferred_operator, binary_expr.span)); + ctx.diagnostic(EqeqeqDiagnostic(operator, preferred_operator, operator_span)); } } } diff --git a/crates/oxc_linter/src/snapshots/eqeqeq.snap b/crates/oxc_linter/src/snapshots/eqeqeq.snap index 504fba8c5..c66891ade 100644 --- a/crates/oxc_linter/src/snapshots/eqeqeq.snap +++ b/crates/oxc_linter/src/snapshots/eqeqeq.snap @@ -10,71 +10,71 @@ expression: eqeqeq help: Prefer > operator ⚠ eslint(eqeqeq): Expected === and instead saw == - ╭─[eqeqeq.tsx:1:1] + ╭─[eqeqeq.tsx:1:12] 1 │ typeof foo == 'undefined' - · ───────────────────────── + · ── ╰──── help: Prefer === operator ⚠ eslint(eqeqeq): Expected !== and instead saw != - ╭─[eqeqeq.tsx:1:1] + ╭─[eqeqeq.tsx:1:9] 1 │ 'hello' != 'world' - · ────────────────── + · ── ╰──── help: Prefer !== operator ⚠ eslint(eqeqeq): Expected === and instead saw == - ╭─[eqeqeq.tsx:1:1] + ╭─[eqeqeq.tsx:1:3] 1 │ 0 == 0 - · ────── + · ── ╰──── help: Prefer === operator ⚠ eslint(eqeqeq): Expected === and instead saw == - ╭─[eqeqeq.tsx:1:1] + ╭─[eqeqeq.tsx:1:6] 1 │ true == true - · ──────────── + · ── ╰──── help: Prefer === operator ⚠ eslint(eqeqeq): Expected === and instead saw == - ╭─[eqeqeq.tsx:1:1] + ╭─[eqeqeq.tsx:1:5] 1 │ foo == null - · ─────────── + · ── ╰──── help: Prefer === operator ⚠ eslint(eqeqeq): Expected === and instead saw == - ╭─[eqeqeq.tsx:1:1] + ╭─[eqeqeq.tsx:1:3] 1 │ a == b - · ────── + · ── ╰──── help: Prefer === operator ⚠ eslint(eqeqeq): Expected === and instead saw == - ╭─[eqeqeq.tsx:1:1] + ╭─[eqeqeq.tsx:1:5] 1 │ foo == true - · ─────────── + · ── ╰──── help: Prefer === operator ⚠ eslint(eqeqeq): Expected !== and instead saw != - ╭─[eqeqeq.tsx:1:1] + ╭─[eqeqeq.tsx:1:9] 1 │ bananas != 1 - · ──────────── + · ── ╰──── help: Prefer !== operator ⚠ eslint(eqeqeq): Expected === and instead saw == - ╭─[eqeqeq.tsx:1:1] + ╭─[eqeqeq.tsx:1:7] 1 │ value == undefined - · ────────────────── + · ── ╰──── help: Prefer === operator ⚠ eslint(eqeqeq): Expected === and instead saw == - ╭─[eqeqeq.tsx:1:1] + ╭─[eqeqeq.tsx:1:6] 1 │ null == null - · ──────────── + · ── ╰──── help: Prefer === operator