Skip to content

Commit b50a430

Browse files
stereotype441Commit Queue
authored andcommitted
[messages] Change diagnostic code maps to lists.
Changes the variables `analyzerMessages`, `feAnalyzerSharedMessages`, `frontEndMessages`, and `lintMessages` from maps (keyed by analyzer code or front end code) to lists. The map functionality is no longer needed now that analyzer and front end codes are stored in the `Message` objects, and maps are available in `diagnosticTables` for looking up messages by name when needed. Change-Id: I6a6a6964138f9bd17d3595b3ed8aaf4aadd9ecfd Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/457540 Reviewed-by: Samuel Rawlins <[email protected]> Reviewed-by: Johnni Winther <[email protected]> Reviewed-by: Konstantin Shcheglov <[email protected]> Commit-Queue: Paul Berry <[email protected]>
1 parent 1351b42 commit b50a430

File tree

3 files changed

+32
-29
lines changed

3 files changed

+32
-29
lines changed

pkg/analyzer_utilities/lib/analyzer_messages.dart

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -174,8 +174,9 @@ const transformSetErrorCodeFile = GeneratedDiagnosticFile(
174174
);
175175

176176
/// Decoded messages from the analyzer's `messages.yaml` file.
177-
final Map<AnalyzerCode, AnalyzerMessage> analyzerMessages =
178-
decodeAnalyzerMessagesYaml(analyzerPkgPath);
177+
final List<AnalyzerMessage> analyzerMessages = decodeAnalyzerMessagesYaml(
178+
analyzerPkgPath,
179+
);
179180

180181
/// The path to the `analyzer` package.
181182
final String analyzerPkgPath = normalize(
@@ -186,20 +187,20 @@ final String analyzerPkgPath = normalize(
186187
final String linterPkgPath = normalize(join(pkg_root.packageRoot, 'linter'));
187188

188189
/// Decoded messages from the linter's `messages.yaml` file.
189-
final Map<AnalyzerCode, AnalyzerMessage> lintMessages =
190-
decodeAnalyzerMessagesYaml(linterPkgPath);
190+
final List<AnalyzerMessage> lintMessages = decodeAnalyzerMessagesYaml(
191+
linterPkgPath,
192+
);
191193

192-
/// Decodes a YAML object (obtained from a `messages.yaml` file) into a map.
193-
Map<AnalyzerCode, AnalyzerMessage> decodeAnalyzerMessagesYaml(
194-
String packagePath,
195-
) {
194+
/// Decodes a YAML object (in analyzer style `messages.yaml` format) into a list
195+
/// of [AnalyzerMessage]s.
196+
List<AnalyzerMessage> decodeAnalyzerMessagesYaml(String packagePath) {
196197
var path = join(packagePath, 'messages.yaml');
197198
var yaml = loadYamlNode(
198199
File(path).readAsStringSync(),
199200
sourceUrl: Uri.file(path),
200201
);
201202

202-
var result = <AnalyzerCode, AnalyzerMessage>{};
203+
var result = <AnalyzerMessage>[];
203204
if (yaml is! YamlMap) {
204205
throw LocatedError('root node is not a map', node: yaml);
205206
}
@@ -241,12 +242,13 @@ Map<AnalyzerCode, AnalyzerMessage> decodeAnalyzerMessagesYaml(
241242
diagnosticClass: DiagnosticClassInfo.byName(className),
242243
snakeCaseName: diagnosticName,
243244
);
244-
return result[analyzerCode] = AnalyzerMessage.fromYaml(
245+
return AnalyzerMessage.fromYaml(
245246
diagnosticValue,
246247
keyNode: keyNode,
247248
analyzerCode: analyzerCode,
248249
);
249250
});
251+
result.add(message);
250252
if (message.hasPublishedDocs == null) {
251253
throw LocatedError('Missing hasPublishedDocs', node: diagnosticValue);
252254
}

pkg/analyzer_utilities/lib/messages.dart

Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -31,27 +31,26 @@ const Map<String, String> severityEnumNames = <String, String>{
3131
/// For details see the documentation for fields in the [DiagnosticTables]
3232
/// class.
3333
final DiagnosticTables diagnosticTables = DiagnosticTables._([
34-
...frontEndMessages.values,
35-
...feAnalyzerSharedMessages.values,
36-
...analyzerMessages.values,
37-
...lintMessages.values,
34+
...frontEndMessages,
35+
...feAnalyzerSharedMessages,
36+
...analyzerMessages,
37+
...lintMessages,
3838
]);
3939

4040
/// Decoded messages from the `_fe_analyzer_shared` package's `messages.yaml`
4141
/// file.
42-
final Map<String, SharedMessage> feAnalyzerSharedMessages =
43-
_loadCfeStyleMessages(
44-
feAnalyzerSharedPkgPath,
45-
decodeMessage: SharedMessage.fromYaml,
46-
);
42+
final List<SharedMessage> feAnalyzerSharedMessages = _loadCfeStyleMessages(
43+
feAnalyzerSharedPkgPath,
44+
decodeMessage: SharedMessage.fromYaml,
45+
);
4746

4847
/// The path to the `fe_analyzer_shared` package.
4948
final String feAnalyzerSharedPkgPath = normalize(
5049
join(pkg_root.packageRoot, '_fe_analyzer_shared'),
5150
);
5251

5352
/// Decoded messages from the front end's `messages.yaml` file.
54-
final Map<String, FrontEndMessage> frontEndMessages = _loadCfeStyleMessages(
53+
final List<FrontEndMessage> frontEndMessages = _loadCfeStyleMessages(
5554
frontEndPkgPath,
5655
decodeMessage: FrontEndMessage.fromYaml,
5756
);
@@ -86,14 +85,14 @@ String convertTemplate(List<TemplatePart> template) {
8685
.join();
8786
}
8887

89-
/// Decodes a YAML object (in CFE style `messages.yaml` format) into a map from
90-
/// diagnostic name to [Message].
91-
Map<String, T> decodeCfeStyleMessagesYaml<T extends CfeStyleMessage>(
88+
/// Decodes a YAML object (in CFE style `messages.yaml` format) into a list of
89+
/// [CfeStyleMessage]s.
90+
List<T> decodeCfeStyleMessagesYaml<T extends CfeStyleMessage>(
9291
YamlNode yaml, {
9392
required T Function(YamlMap, {required YamlScalar keyNode}) decodeMessage,
9493
required String path,
9594
}) {
96-
var result = <String, T>{};
95+
var result = <T>[];
9796
if (yaml is! YamlMap) {
9897
throw LocatedError('root node is not a map', node: yaml);
9998
}
@@ -113,16 +112,18 @@ Map<String, T> decodeCfeStyleMessagesYaml<T extends CfeStyleMessage>(
113112
node: diagnosticValue,
114113
);
115114
}
116-
result[diagnosticName] = LocatedError.wrap(
117-
node: diagnosticValue,
118-
() => decodeMessage(diagnosticValue, keyNode: keyNode),
115+
result.add(
116+
LocatedError.wrap(
117+
node: diagnosticValue,
118+
() => decodeMessage(diagnosticValue, keyNode: keyNode),
119+
),
119120
);
120121
}
121122
return result;
122123
}
123124

124125
/// Loads messages in CFE style `messages.yaml` format.
125-
Map<String, T> _loadCfeStyleMessages<T extends CfeStyleMessage>(
126+
List<T> _loadCfeStyleMessages<T extends CfeStyleMessage>(
126127
String packagePath, {
127128
required T Function(YamlMap, {required YamlScalar keyNode}) decodeMessage,
128129
}) {

pkg/linter/tool/generate_lints.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ part of 'lint_codes.dart';
4747
class LinterLintCode extends LintCodeWithExpectedTypes {
4848
''');
4949
var memberAccumulator = MemberAccumulator();
50-
for (var message in lintMessages.values) {
50+
for (var message in lintMessages) {
5151
var analyzerCode = message.analyzerCode;
5252
var lintName = message.sharedName ?? analyzerCode.snakeCaseName;
5353
if (messagesRuleInfo[lintName]!.removed) continue;

0 commit comments

Comments
 (0)