From 1f169f4b09a18edd67adee348e718d89a9ff3912 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartek=20Iwa=C5=84czuk?= Date: Mon, 17 Feb 2025 15:46:55 +0100 Subject: [PATCH] fix(lint): don't mark plugin diagnostic as fixable, if it's not (#28147) A vector with fixes was always created, even if there were no applicable fixes. --- cli/ops/lint.rs | 12 ++++++++---- .../lint/lint_plugin_no_fixer/__test__.jsonc | 6 ++++++ tests/specs/lint/lint_plugin_no_fixer/a.ts | 1 + .../specs/lint/lint_plugin_no_fixer/deno.json | 5 +++++ .../specs/lint/lint_plugin_no_fixer/lint.out | 9 +++++++++ .../specs/lint/lint_plugin_no_fixer/plugin.ts | 19 +++++++++++++++++++ 6 files changed, 48 insertions(+), 4 deletions(-) create mode 100644 tests/specs/lint/lint_plugin_no_fixer/__test__.jsonc create mode 100644 tests/specs/lint/lint_plugin_no_fixer/a.ts create mode 100644 tests/specs/lint/lint_plugin_no_fixer/deno.json create mode 100644 tests/specs/lint/lint_plugin_no_fixer/lint.out create mode 100644 tests/specs/lint/lint_plugin_no_fixer/plugin.ts diff --git a/cli/ops/lint.rs b/cli/ops/lint.rs index b140b05d4d..c73593b083 100644 --- a/cli/ops/lint.rs +++ b/cli/ops/lint.rs @@ -146,10 +146,14 @@ impl LintPluginContainer { }) .collect::, LintReportError>>()?; - let fixes = vec![LintFix { - changes, - description: format!("Fix this {} problem", id).into(), - }]; + let mut fixes = vec![]; + + if !changes.is_empty() { + fixes.push(LintFix { + changes, + description: format!("Fix this {} problem", id).into(), + }); + } let lint_diagnostic = LintDiagnostic { specifier, diff --git a/tests/specs/lint/lint_plugin_no_fixer/__test__.jsonc b/tests/specs/lint/lint_plugin_no_fixer/__test__.jsonc new file mode 100644 index 0000000000..601b3a5509 --- /dev/null +++ b/tests/specs/lint/lint_plugin_no_fixer/__test__.jsonc @@ -0,0 +1,6 @@ +{ + "tempDir": true, + "args": "lint a.ts", + "output": "lint.out", + "exitCode": 1 +} diff --git a/tests/specs/lint/lint_plugin_no_fixer/a.ts b/tests/specs/lint/lint_plugin_no_fixer/a.ts new file mode 100644 index 0000000000..0366a968a7 --- /dev/null +++ b/tests/specs/lint/lint_plugin_no_fixer/a.ts @@ -0,0 +1 @@ +const _a = "foo"; diff --git a/tests/specs/lint/lint_plugin_no_fixer/deno.json b/tests/specs/lint/lint_plugin_no_fixer/deno.json new file mode 100644 index 0000000000..57b9dcb364 --- /dev/null +++ b/tests/specs/lint/lint_plugin_no_fixer/deno.json @@ -0,0 +1,5 @@ +{ + "lint": { + "plugins": ["./plugin.ts"] + } +} diff --git a/tests/specs/lint/lint_plugin_no_fixer/lint.out b/tests/specs/lint/lint_plugin_no_fixer/lint.out new file mode 100644 index 0000000000..4889f05f14 --- /dev/null +++ b/tests/specs/lint/lint_plugin_no_fixer/lint.out @@ -0,0 +1,9 @@ +error[test-plugin/my-rule]: should be _b + --> [WILDCARD]a.ts:1:7 + | +1 | const _a = "foo"; + | ^^ + + +Found 1 problem +Checked 1 file diff --git a/tests/specs/lint/lint_plugin_no_fixer/plugin.ts b/tests/specs/lint/lint_plugin_no_fixer/plugin.ts new file mode 100644 index 0000000000..eb62b82c43 --- /dev/null +++ b/tests/specs/lint/lint_plugin_no_fixer/plugin.ts @@ -0,0 +1,19 @@ +export default { + name: "test-plugin", + rules: { + "my-rule": { + create(context) { + return { + Identifier(node) { + if (node.name === "_a") { + context.report({ + node, + message: "should be _b", + }); + } + }, + }; + }, + }, + }, +};