From 0a7ca207453bc1b5807fe8a00ca6875dac8c1661 Mon Sep 17 00:00:00 2001 From: Boshen <1430279+Boshen@users.noreply.github.com> Date: Sat, 1 Mar 2025 08:16:11 +0000 Subject: [PATCH] feat(linter): support allowable method diagnostic for eslint/no-console (#9454) closes #9350 --- .../oxc_linter/src/rules/eslint/no_console.rs | 18 +++++++++++++----- .../src/snapshots/eslint_no_console.snap | 16 ++++++++-------- 2 files changed, 21 insertions(+), 13 deletions(-) diff --git a/crates/oxc_linter/src/rules/eslint/no_console.rs b/crates/oxc_linter/src/rules/eslint/no_console.rs index 2b4bd6703f244..983f6e1df373f 100644 --- a/crates/oxc_linter/src/rules/eslint/no_console.rs +++ b/crates/oxc_linter/src/rules/eslint/no_console.rs @@ -10,10 +10,16 @@ use crate::{ rule::Rule, }; -fn no_console_diagnostic(span: Span) -> OxcDiagnostic { +fn no_console_diagnostic(span: Span, allow: &[CompactStr]) -> OxcDiagnostic { + let only_msg = if allow.is_empty() { + String::from("Delete this console statement.") + } else { + format!("Supported methods are: {}.", allow.join(", ")) + }; + OxcDiagnostic::warn("eslint(no-console): Unexpected console statement.") .with_label(span) - .with_help("Delete this console statement.") + .with_help(only_msg) } #[derive(Debug, Default, Clone)] @@ -90,9 +96,11 @@ impl Rule for NoConsole { { if let Some((mem_span, _)) = mem.static_property_info() { let diagnostic_span = ident.span().merge(mem_span); - ctx.diagnostic_with_suggestion(no_console_diagnostic(diagnostic_span), |fixer| { - remove_console(fixer, ctx, node) - }); + + ctx.diagnostic_with_suggestion( + no_console_diagnostic(diagnostic_span, &self.allow), + |fixer| remove_console(fixer, ctx, node), + ); } } } diff --git a/crates/oxc_linter/src/snapshots/eslint_no_console.snap b/crates/oxc_linter/src/snapshots/eslint_no_console.snap index efda2e83cf95b..becdf5fdd26af 100644 --- a/crates/oxc_linter/src/snapshots/eslint_no_console.snap +++ b/crates/oxc_linter/src/snapshots/eslint_no_console.snap @@ -55,53 +55,53 @@ source: crates/oxc_linter/src/tester.rs 1 │ console.log(foo) · ─────────── ╰──── - help: Delete this console statement. + help: Supported methods are: error. ⚠ eslint(no-console): eslint(no-console): Unexpected console statement. ╭─[no_console.tsx:1:1] 1 │ console.error(foo) · ───────────── ╰──── - help: Delete this console statement. + help: Supported methods are: warn. ⚠ eslint(no-console): eslint(no-console): Unexpected console statement. ╭─[no_console.tsx:1:1] 1 │ console.info(foo) · ──────────── ╰──── - help: Delete this console statement. + help: Supported methods are: log. ⚠ eslint(no-console): eslint(no-console): Unexpected console statement. ╭─[no_console.tsx:1:1] 1 │ console.warn(foo) · ──────────── ╰──── - help: Delete this console statement. + help: Supported methods are: error. ⚠ eslint(no-console): eslint(no-console): Unexpected console statement. ╭─[no_console.tsx:1:1] 1 │ console.log(foo) · ─────────── ╰──── - help: Delete this console statement. + help: Supported methods are: warn, info. ⚠ eslint(no-console): eslint(no-console): Unexpected console statement. ╭─[no_console.tsx:1:1] 1 │ console.error(foo) · ───────────── ╰──── - help: Delete this console statement. + help: Supported methods are: warn, info, log. ⚠ eslint(no-console): eslint(no-console): Unexpected console statement. ╭─[no_console.tsx:1:1] 1 │ console.info(foo) · ──────────── ╰──── - help: Delete this console statement. + help: Supported methods are: warn, error, log. ⚠ eslint(no-console): eslint(no-console): Unexpected console statement. ╭─[no_console.tsx:1:1] 1 │ console.warn(foo) · ──────────── ╰──── - help: Delete this console statement. + help: Supported methods are: info, log.