Skip to content

Commit 6f6f221

Browse files
srawlinsCommit Queue
authored andcommitted
analyzer: Return generated Diagnostic objects from AbstractAnalysisRule reporting methods
Fixes #61759 This work supports holding onto a Diagnostic which is being reported for other later uses. The two use cases in DAS are storing complex data which can be used by fixes. The data in these two cases is stored in an Expando keyed to the Diagnostic object. Plugin authors have requested the same ability. Change-Id: I95784e1b170d5ef0dee534df6adaf1dbdfd94fa6 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/456762 Reviewed-by: Paul Berry <[email protected]> Commit-Queue: Samuel Rawlins <[email protected]>
1 parent ac25e95 commit 6f6f221

File tree

2 files changed

+30
-26
lines changed

2 files changed

+30
-26
lines changed

pkg/analyzer/api.txt

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,16 +13,16 @@ package:analyzer/analysis_rule/analysis_rule.dart:
1313
new (constructor: AnalysisRule Function({required String description, required String name, RuleState state}))
1414
diagnosticCode (getter: DiagnosticCode)
1515
diagnosticCodes (getter: List<DiagnosticCode>)
16-
reportAtNode (method: void Function(AstNode?, {List<Object> arguments, List<DiagnosticMessage>? contextMessages}))
17-
reportAtOffset (method: void Function(int, int, {List<Object> arguments, List<DiagnosticMessage>? contextMessages}))
18-
reportAtPubNode (method: void Function(PubspecNode, {List<Object> arguments, List<DiagnosticMessage> contextMessages}))
19-
reportAtToken (method: void Function(Token, {List<Object> arguments, List<DiagnosticMessage>? contextMessages}))
16+
reportAtNode (method: Diagnostic? Function(AstNode?, {List<Object> arguments, List<DiagnosticMessage>? contextMessages}))
17+
reportAtOffset (method: Diagnostic Function(int, int, {List<Object> arguments, List<DiagnosticMessage>? contextMessages}))
18+
reportAtPubNode (method: Diagnostic Function(PubspecNode, {List<Object> arguments, List<DiagnosticMessage> contextMessages}))
19+
reportAtToken (method: Diagnostic? Function(Token, {List<Object> arguments, List<DiagnosticMessage>? contextMessages}))
2020
MultiAnalysisRule (class extends AbstractAnalysisRule):
2121
new (constructor: MultiAnalysisRule Function({required String description, required String name, RuleState state}))
22-
reportAtNode (method: void Function(AstNode?, {List<Object> arguments, List<DiagnosticMessage>? contextMessages, required DiagnosticCode diagnosticCode}))
23-
reportAtOffset (method: void Function(int, int, {List<Object> arguments, List<DiagnosticMessage>? contextMessages, required DiagnosticCode diagnosticCode}))
24-
reportAtPubNode (method: void Function(PubspecNode, {List<Object> arguments, List<DiagnosticMessage> contextMessages, required DiagnosticCode diagnosticCode}))
25-
reportAtToken (method: void Function(Token, {List<Object> arguments, List<DiagnosticMessage>? contextMessages, required DiagnosticCode diagnosticCode}))
22+
reportAtNode (method: Diagnostic? Function(AstNode?, {List<Object> arguments, List<DiagnosticMessage>? contextMessages, required DiagnosticCode diagnosticCode}))
23+
reportAtOffset (method: Diagnostic Function(int, int, {List<Object> arguments, List<DiagnosticMessage>? contextMessages, required DiagnosticCode diagnosticCode}))
24+
reportAtPubNode (method: Diagnostic Function(PubspecNode, {List<Object> arguments, List<DiagnosticMessage> contextMessages, required DiagnosticCode diagnosticCode}))
25+
reportAtToken (method: Diagnostic? Function(Token, {List<Object> arguments, List<DiagnosticMessage>? contextMessages, required DiagnosticCode diagnosticCode}))
2626
package:analyzer/analysis_rule/pubspec.dart:
2727
PubspecDependency (class extends Object):
2828
new (constructor: PubspecDependency Function())

pkg/analyzer/lib/analysis_rule/analysis_rule.dart

Lines changed: 22 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -76,30 +76,31 @@ sealed class AbstractAnalysisRule {
7676
RuleContext context,
7777
) {}
7878

79-
void _reportAtNode(
79+
Diagnostic? _reportAtNode(
8080
AstNode? node, {
8181
List<Object> arguments = const [],
8282
List<DiagnosticMessage>? contextMessages,
8383
required DiagnosticCode diagnosticCode,
8484
}) {
8585
if (node != null && !node.isSynthetic) {
86-
_reporter.atNode(
86+
return _reporter.atNode(
8787
node,
8888
diagnosticCode,
8989
arguments: arguments,
9090
contextMessages: contextMessages,
9191
);
9292
}
93+
return null;
9394
}
9495

95-
void _reportAtOffset(
96+
Diagnostic _reportAtOffset(
9697
int offset,
9798
int length, {
9899
required DiagnosticCode diagnosticCode,
99100
List<Object> arguments = const [],
100101
List<DiagnosticMessage>? contextMessages,
101102
}) {
102-
_reporter.atOffset(
103+
return _reporter.atOffset(
103104
offset: offset,
104105
length: length,
105106
diagnosticCode: diagnosticCode,
@@ -108,7 +109,7 @@ sealed class AbstractAnalysisRule {
108109
);
109110
}
110111

111-
void _reportAtPubNode(
112+
Diagnostic _reportAtPubNode(
112113
PubspecNodeImpl node, {
113114
List<Object> arguments = const [],
114115
List<DiagnosticMessage> contextMessages = const [],
@@ -124,22 +125,24 @@ sealed class AbstractAnalysisRule {
124125
contextMessages: contextMessages,
125126
);
126127
_reporter.reportError(diagnostic);
128+
return diagnostic;
127129
}
128130

129-
void _reportAtToken(
131+
Diagnostic? _reportAtToken(
130132
Token token, {
131133
required DiagnosticCode diagnosticCode,
132134
List<Object> arguments = const [],
133135
List<DiagnosticMessage>? contextMessages,
134136
}) {
135137
if (!token.isSynthetic) {
136-
_reporter.atToken(
138+
return _reporter.atToken(
137139
token,
138140
diagnosticCode,
139141
arguments: arguments,
140142
contextMessages: contextMessages,
141143
);
142144
}
145+
return null;
143146
}
144147
}
145148

@@ -156,7 +159,7 @@ abstract class AnalysisRule extends AbstractAnalysisRule {
156159

157160
/// Reports a diagnostic at [node] with message [arguments] and
158161
/// [contextMessages].
159-
void reportAtNode(
162+
Diagnostic? reportAtNode(
160163
AstNode? node, {
161164
List<Object> arguments = const [],
162165
List<DiagnosticMessage>? contextMessages,
@@ -169,7 +172,7 @@ abstract class AnalysisRule extends AbstractAnalysisRule {
169172

170173
/// Reports a diagnostic at [offset], with [length], with message [arguments]
171174
/// and [contextMessages].
172-
void reportAtOffset(
175+
Diagnostic reportAtOffset(
173176
int offset,
174177
int length, {
175178
List<Object> arguments = const [],
@@ -184,7 +187,7 @@ abstract class AnalysisRule extends AbstractAnalysisRule {
184187

185188
/// Reports a diagnostic at Pubspec [node], with message [arguments] and
186189
/// [contextMessages].
187-
void reportAtPubNode(
190+
Diagnostic reportAtPubNode(
188191
PubspecNode node, {
189192
List<Object> arguments = const [],
190193
List<DiagnosticMessage> contextMessages = const [],
@@ -197,7 +200,7 @@ abstract class AnalysisRule extends AbstractAnalysisRule {
197200

198201
/// Reports a diagnostic at [token], with message [arguments] and
199202
/// [contextMessages].
200-
void reportAtToken(
203+
Diagnostic? reportAtToken(
201204
Token token, {
202205
List<Object> arguments = const [],
203206
List<DiagnosticMessage>? contextMessages,
@@ -220,7 +223,7 @@ abstract class MultiAnalysisRule extends AbstractAnalysisRule {
220223

221224
/// Reports [diagnosticCode] at [node] with message [arguments] and
222225
/// [contextMessages].
223-
void reportAtNode(
226+
Diagnostic? reportAtNode(
224227
AstNode? node, {
225228
List<Object> arguments = const [],
226229
List<DiagnosticMessage>? contextMessages,
@@ -234,7 +237,7 @@ abstract class MultiAnalysisRule extends AbstractAnalysisRule {
234237

235238
/// Reports [diagnosticCode] at [offset], with [length], with message [arguments]
236239
/// and [contextMessages].
237-
void reportAtOffset(
240+
Diagnostic reportAtOffset(
238241
int offset,
239242
int length, {
240243
required DiagnosticCode diagnosticCode,
@@ -250,27 +253,28 @@ abstract class MultiAnalysisRule extends AbstractAnalysisRule {
250253

251254
/// Reports [diagnosticCode] at Pubspec [node], with message [arguments] and
252255
/// [contextMessages].
253-
void reportAtPubNode(
256+
Diagnostic reportAtPubNode(
254257
PubspecNode node, {
255258
required DiagnosticCode diagnosticCode,
256259
List<Object> arguments = const [],
257260
List<DiagnosticMessage> contextMessages = const [],
258261
}) {
259-
// Cache error and location info for creating `AnalysisErrorInfo`s.
260-
var error = Diagnostic.tmp(
262+
// Cache diagnostic and location info for creating `AnalysisErrorInfo`s.
263+
var diagnostic = Diagnostic.tmp(
261264
source: (node as PubspecNodeImpl).source,
262265
offset: node.span.start.offset,
263266
length: node.span.length,
264267
diagnosticCode: diagnosticCode,
265268
arguments: arguments,
266269
contextMessages: contextMessages,
267270
);
268-
_reporter.reportError(error);
271+
_reporter.reportError(diagnostic);
272+
return diagnostic;
269273
}
270274

271275
/// Reports [diagnosticCode] at [token], with message [arguments] and
272276
/// [contextMessages].
273-
void reportAtToken(
277+
Diagnostic? reportAtToken(
274278
Token token, {
275279
required DiagnosticCode diagnosticCode,
276280
List<Object> arguments = const [],

0 commit comments

Comments
 (0)