From 5b5b0dd2923963713403a2c868d7f8e128bb440d Mon Sep 17 00:00:00 2001 From: Piotr Rogulski Date: Mon, 4 Dec 2023 11:53:46 +0100 Subject: [PATCH] Add indent to the ignore comment (#207) --- packages/custom_lint/CHANGELOG.md | 4 +++ packages/custom_lint/test/ignore_test.dart | 28 +++++++++++++++++++ packages/custom_lint_builder/CHANGELOG.md | 4 +++ .../custom_lint_builder/lib/src/ignore.dart | 6 +++- 4 files changed, 41 insertions(+), 1 deletion(-) diff --git a/packages/custom_lint/CHANGELOG.md b/packages/custom_lint/CHANGELOG.md index 2c487cb4..a8616733 100644 --- a/packages/custom_lint/CHANGELOG.md +++ b/packages/custom_lint/CHANGELOG.md @@ -1,3 +1,7 @@ +## Unreleased fix + +- `// ignore` comments now correctly respect indentation when they are inserted (thanks to @PiotrRogulski) + ## 0.5.7 - 2023-11-20 - Support JSON output format via CLI parameter `--format json|default` (thanks to @kuhnroyal) diff --git a/packages/custom_lint/test/ignore_test.dart b/packages/custom_lint/test/ignore_test.dart index 17a5a928..1d03f6a3 100644 --- a/packages/custom_lint/test/ignore_test.dart +++ b/packages/custom_lint/test/ignore_test.dart @@ -66,6 +66,34 @@ void fn2() {} expectMatchesGoldenFixes(fixes); }); + test('Emits indented ignore quick-fix', () async { + final plugin = createPlugin( + name: 'test_lint', + main: source, + ); + + final app = createLintUsage( + name: 'test_app', + plugins: {'test_lint': plugin.uri}, + source: { + 'lib/main.dart': ''' + void fn() {} +''', + }, + ); + + final runner = await startRunnerForApp(app); + await runner.getLints(reload: false); + final fixes = await runner + .getFixes(app.file('lib', 'main.dart').path, 10) + .then((e) => e.fixes); + + expect( + fixes[0].fixes[0].change.edits[0].edits[0].replacement, + startsWith('${' ' * 4}// ignore: hello_world'), + ); + }); + test('supports `// ignore: code`', () async { final plugin = createPlugin( name: 'test_lint', diff --git a/packages/custom_lint_builder/CHANGELOG.md b/packages/custom_lint_builder/CHANGELOG.md index 8b639b98..9c817183 100644 --- a/packages/custom_lint_builder/CHANGELOG.md +++ b/packages/custom_lint_builder/CHANGELOG.md @@ -1,3 +1,7 @@ +## Unreleased fix + +- `// ignore` comments now correctly respect indentation when they are inserted (thanks to @PiotrRogulski) + ## 0.5.7 - 2023-11-20 - `custom_lint` upgraded to `0.5.7` diff --git a/packages/custom_lint_builder/lib/src/ignore.dart b/packages/custom_lint_builder/lib/src/ignore.dart index 6409bcf6..b382c308 100644 --- a/packages/custom_lint_builder/lib/src/ignore.dart +++ b/packages/custom_lint_builder/lib/src/ignore.dart @@ -128,9 +128,13 @@ class IgnoreCode extends DartFix { final startLineOffset = resolver.lineInfo.getOffsetOfLine(offsetLine); + final indentLength = resolver.source.contents.data + .substring(startLineOffset) + .indexOf(RegExp(r'\S')); + builder.addSimpleInsertion( startLineOffset, - '// ignore: ${analysisError.errorCode.name}\n', + '${' ' * indentLength}// ignore: ${analysisError.errorCode.name}\n', ); } });