Skip to content

Commit 2ac5992

Browse files
srawlinsCommit Queue
authored andcommitted
DAS plugins: Support fixes to ignore diagnostics
Change-Id: I71ae995d1a4a94ecfeafd187c5674c41b6d928d4 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/395702 Reviewed-by: Brian Wilkerson <[email protected]> Commit-Queue: Samuel Rawlins <[email protected]> Reviewed-by: Konstantin Shcheglov <[email protected]>
1 parent 4305541 commit 2ac5992

File tree

9 files changed

+52
-42
lines changed

9 files changed

+52
-42
lines changed

pkg/analysis_server/lib/src/g3/fixes.dart

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,12 @@
33
// BSD-style license that can be found in the LICENSE file.
44

55
import 'package:analysis_server/src/protocol_server.dart' show SourceEdit;
6-
import 'package:analysis_server/src/services/correction/fix.dart';
76
import 'package:analysis_server_plugin/edit/fix/dart_fix_context.dart';
87
import 'package:analysis_server_plugin/edit/fix/fix.dart';
98
import 'package:analysis_server_plugin/src/correction/dart_change_workspace.dart';
109
import 'package:analysis_server_plugin/src/correction/fix_in_file_processor.dart';
1110
import 'package:analysis_server_plugin/src/correction/fix_processor.dart';
11+
import 'package:analysis_server_plugin/src/correction/ignore_diagnostic.dart';
1212
import 'package:analyzer/dart/analysis/results.dart';
1313
import 'package:analyzer/error/error.dart';
1414
import 'package:analyzer/file_system/file_system.dart';
@@ -110,9 +110,9 @@ class LintFixTester {
110110
fixes = await FixProcessor(context).compute();
111111
fixes.removeWhere(
112112
(fix) =>
113-
fix.kind == DartFixKind.IGNORE_ERROR_LINE ||
114-
fix.kind == DartFixKind.IGNORE_ERROR_FILE ||
115-
fix.kind == DartFixKind.IGNORE_ERROR_ANALYSIS_FILE,
113+
fix.kind == ignoreErrorLineKind ||
114+
fix.kind == ignoreErrorFileKind ||
115+
fix.kind == ignoreErrorAnalysisFileKind,
116116
);
117117
}
118118

pkg/analysis_server/lib/src/services/correction/fix.dart

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -824,21 +824,6 @@ abstract final class DartFixKind {
824824
DartFixKindPriority.standard,
825825
'Extract local variable',
826826
);
827-
static const IGNORE_ERROR_LINE = FixKind(
828-
'dart.fix.ignore.line',
829-
DartFixKindPriority.ignore,
830-
"Ignore '{0}' for this line",
831-
);
832-
static const IGNORE_ERROR_FILE = FixKind(
833-
'dart.fix.ignore.file',
834-
DartFixKindPriority.ignore - 1,
835-
"Ignore '{0}' for the whole file",
836-
);
837-
static const IGNORE_ERROR_ANALYSIS_FILE = FixKind(
838-
'dart.fix.ignore.analysis',
839-
DartFixKindPriority.ignore - 2,
840-
"Ignore '{0}' in `analysis_options.yaml`",
841-
);
842827
static const IMPORT_ASYNC = FixKind(
843828
'dart.fix.import.async',
844829
49,

pkg/analysis_server/lib/src/services/correction/fix_internal.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,6 @@ import 'package:analysis_server/src/services/correction/dart/data_driven.dart';
103103
import 'package:analysis_server/src/services/correction/dart/extend_class_for_mixin.dart';
104104
import 'package:analysis_server/src/services/correction/dart/extract_local_variable.dart';
105105
import 'package:analysis_server/src/services/correction/dart/flutter_remove_widget.dart';
106-
import 'package:analysis_server/src/services/correction/dart/ignore_diagnostic.dart';
107106
import 'package:analysis_server/src/services/correction/dart/import_library.dart';
108107
import 'package:analysis_server/src/services/correction/dart/inline_invocation.dart';
109108
import 'package:analysis_server/src/services/correction/dart/inline_typedef.dart';
@@ -250,6 +249,7 @@ import 'package:analysis_server/src/services/correction/dart/wrap_in_text.dart';
250249
import 'package:analysis_server/src/services/correction/dart/wrap_in_unawaited.dart';
251250
import 'package:analysis_server_plugin/src/correction/fix_generators.dart';
252251
import 'package:analysis_server_plugin/src/correction/fix_processor.dart';
252+
import 'package:analysis_server_plugin/src/correction/ignore_diagnostic.dart';
253253
import 'package:analyzer/error/error.dart';
254254
import 'package:analyzer/src/dart/error/ffi_code.g.dart';
255255
import 'package:analyzer/src/error/codes.dart';

pkg/analysis_server/test/src/services/correction/fix/ignore_diagnostic_test.dart

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
// for details. All rights reserved. Use of this source code is governed by a
33
// BSD-style license that can be found in the LICENSE file.
44

5-
import 'package:analysis_server/src/services/correction/fix.dart';
5+
import 'package:analysis_server_plugin/src/correction/ignore_diagnostic.dart';
66
import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
77
import 'package:test_reflective_loader/test_reflective_loader.dart';
88

@@ -19,7 +19,7 @@ void main() {
1919
@reflectiveTest
2020
class IgnoreDiagnosticAnalysisOptionFileTest extends FixProcessorTest {
2121
@override
22-
FixKind get kind => DartFixKind.IGNORE_ERROR_ANALYSIS_FILE;
22+
FixKind get kind => ignoreErrorAnalysisFileKind;
2323

2424
@override
2525
void setUp() {
@@ -187,7 +187,7 @@ void f() {
187187
@reflectiveTest
188188
class IgnoreDiagnosticFileTest extends FixProcessorTest {
189189
@override
190-
FixKind get kind => DartFixKind.IGNORE_ERROR_FILE;
190+
FixKind get kind => ignoreErrorFileKind;
191191

192192
Future<void> test_cannotIgnore_other() async {
193193
createAnalysisOptionsFile(
@@ -304,7 +304,7 @@ void f() {
304304
@reflectiveTest
305305
class IgnoreDiagnosticLineTest extends FixProcessorTest {
306306
@override
307-
FixKind get kind => DartFixKind.IGNORE_ERROR_LINE;
307+
FixKind get kind => ignoreErrorLineKind;
308308

309309
Future<void> test_cannotIgnore_other() async {
310310
createAnalysisOptionsFile(

pkg/analysis_server/lib/src/services/correction/dart/ignore_diagnostic.dart renamed to pkg/analysis_server_plugin/lib/src/correction/ignore_diagnostic.dart

Lines changed: 27 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
// Copyright (c) 2021, the Dart project authors. Please see the AUTHORS file
1+
// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
22
// for details. All rights reserved. Use of this source code is governed by a
33
// BSD-style license that can be found in the LICENSE file.
44

5-
import 'package:analysis_server/src/services/correction/fix.dart';
65
import 'package:analysis_server_plugin/edit/dart/correction_producer.dart';
6+
import 'package:analysis_server_plugin/edit/dart/dart_fix_kind_priority.dart';
77
import 'package:analyzer/error/error.dart';
88
import 'package:analyzer/file_system/file_system.dart';
99
import 'package:analyzer/src/dart/analysis/analysis_options.dart';
@@ -16,17 +16,32 @@ import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
1616
import 'package:yaml/yaml.dart';
1717
import 'package:yaml_edit/yaml_edit.dart' show YamlEditor;
1818

19+
const ignoreErrorAnalysisFileKind = FixKind(
20+
'dart.fix.ignore.analysis',
21+
DartFixKindPriority.ignore - 2,
22+
"Ignore '{0}' in `analysis_options.yaml`",
23+
);
24+
const ignoreErrorFileKind = FixKind(
25+
'dart.fix.ignore.file',
26+
DartFixKindPriority.ignore - 1,
27+
"Ignore '{0}' for the whole file",
28+
);
29+
const ignoreErrorLineKind = FixKind(
30+
'dart.fix.ignore.line',
31+
DartFixKindPriority.ignore,
32+
"Ignore '{0}' for this line",
33+
);
34+
1935
class IgnoreDiagnosticInAnalysisOptionsFile extends _BaseIgnoreDiagnostic {
2036
IgnoreDiagnosticInAnalysisOptionsFile({required super.context});
2137

2238
@override
2339
CorrectionApplicability get applicability =>
24-
// TODO(applicability): comment on why.
25-
CorrectionApplicability
26-
.singleLocation;
40+
// TODO(applicability): comment on why.
41+
CorrectionApplicability.singleLocation;
2742

2843
@override
29-
FixKind get fixKind => DartFixKind.IGNORE_ERROR_ANALYSIS_FILE;
44+
FixKind get fixKind => ignoreErrorAnalysisFileKind;
3045

3146
@override
3247
Future<void> compute(ChangeBuilder builder) async {
@@ -112,7 +127,7 @@ class IgnoreDiagnosticInFile extends _DartIgnoreDiagnostic {
112127
String get commentPrefix => 'ignore_for_file';
113128

114129
@override
115-
FixKind get fixKind => DartFixKind.IGNORE_ERROR_FILE;
130+
FixKind get fixKind => ignoreErrorFileKind;
116131

117132
@override
118133
Future<void> compute(ChangeBuilder builder) async {
@@ -178,7 +193,7 @@ class IgnoreDiagnosticOnLine extends _DartIgnoreDiagnostic {
178193
String get commentPrefix => 'ignore';
179194

180195
@override
181-
FixKind get fixKind => DartFixKind.IGNORE_ERROR_LINE;
196+
FixKind get fixKind => ignoreErrorLineKind;
182197

183198
@override
184199
Future<void> compute(ChangeBuilder builder) async {
@@ -216,9 +231,8 @@ abstract class _BaseIgnoreDiagnostic extends ResolvedCorrectionProducer {
216231

217232
@override
218233
CorrectionApplicability get applicability =>
219-
// TODO(applicability): comment on why.
220-
CorrectionApplicability
221-
.singleLocation;
234+
// TODO(applicability): comment on why.
235+
CorrectionApplicability.singleLocation;
222236

223237
AnalysisError get error => diagnostic as AnalysisError;
224238

@@ -231,7 +245,8 @@ abstract class _BaseIgnoreDiagnostic extends ResolvedCorrectionProducer {
231245
/// - `error.code` is present in the `cannot-ignore` list.
232246
/// - `error.code` is already ignored in the `errors` list.
233247
bool get _isCodeUnignorable {
234-
var cannotIgnore = (analysisOptions as AnalysisOptionsImpl).unignorableNames
248+
var cannotIgnore = (analysisOptions as AnalysisOptionsImpl)
249+
.unignorableNames
235250
.contains(error.errorCode.name);
236251

237252
if (cannotIgnore) {

pkg/analysis_server_plugin/lib/src/plugin_server.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@ class PluginServer {
8585
for (var plugin in plugins) {
8686
plugin.register(_registry);
8787
}
88+
_registry.registerIgnoreProducerGenerators();
8889
}
8990

9091
/// Handles an 'analysis.setPriorityFiles' request.

pkg/analysis_server_plugin/lib/src/registry.dart

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
import 'package:analysis_server_plugin/registry.dart';
66
import 'package:analysis_server_plugin/src/correction/fix_generators.dart';
7+
import 'package:analysis_server_plugin/src/correction/ignore_diagnostic.dart';
78
import 'package:analyzer/error/error.dart';
89
import 'package:analyzer/src/lint/linter.dart';
910
import 'package:analyzer/src/lint/registry.dart';
@@ -17,6 +18,15 @@ final class PluginRegistryImpl implements PluginRegistry {
1718
registeredFixGenerators.registerFixForLint(code, generator);
1819
}
1920

21+
/// Registers the "ignore diagnostic" producer generators.
22+
void registerIgnoreProducerGenerators() {
23+
registeredFixGenerators.ignoreProducerGenerators.addAll([
24+
IgnoreDiagnosticOnLine.new,
25+
IgnoreDiagnosticInFile.new,
26+
IgnoreDiagnosticInAnalysisOptionsFile.new,
27+
]);
28+
}
29+
2030
@override
2131
void registerLintRule(AnalysisRule rule) {
2232
Registry.ruleRegistry.registerLintRule(rule);

pkg/analysis_server_plugin/pubspec.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ dependencies:
1010
analyzer: ^7.3.0
1111
analyzer_plugin: ^0.13.0
1212
meta: ^1.16.0
13+
yaml: ^3.1.0
14+
yaml_edit: ^2.2.0
1315

1416
# Use 'any' constraints here; we get our versions from the DEPS file.
1517
dev_dependencies:

pkg/analysis_server_plugin/test/src/plugin_server_test.dart

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -94,12 +94,9 @@ bool b = false;
9494

9595
var result = await pluginServer.handleEditGetFixes(
9696
protocol.EditGetFixesParams(filePath, 'bool b = '.length));
97-
var fixes = result.fixes;
98-
// We expect 1 fix because neither `IgnoreDiagnosticOnLine` nor
99-
// `IgnoreDiagnosticInFile` are registered by the plugin.
100-
// TODO(srawlins): Investigate whether they should be.
101-
expect(fixes, hasLength(1));
102-
expect(fixes[0].fixes, hasLength(1));
97+
var fixes = result.fixes.single;
98+
// The WrapInQuotes fix plus three "ignore diagnostic" fixes.
99+
expect(fixes.fixes, hasLength(4));
103100
}
104101

105102
Future<void> test_lintDiagnosticsAreDisabledByDefault() async {

0 commit comments

Comments
 (0)