Index: pkg/dart_messages/lib/shared_messages.dart |
diff --git a/pkg/dart_messages/lib/shared_messages.dart b/pkg/dart_messages/lib/shared_messages.dart |
index bd51f581934a31c2f75267c359de6f5ba33f490e..896f52ad546ca0ba5ac6e68adc638515fe891263 100644 |
--- a/pkg/dart_messages/lib/shared_messages.dart |
+++ b/pkg/dart_messages/lib/shared_messages.dart |
@@ -3,7 +3,7 @@ |
// BSD-style license that can be found in the LICENSE file. |
// An update to this file must be followed by regenerating the corresponding |
-// json file. Use `json_converter.dart` in the bin directory. |
+// json, dart2js and analyzer file. Use `publish.dart` in the bin directory. |
// |
// Every message in this file must have an id. Use `message_id.dart` in the |
// bin directory to generate a fresh one. |
@@ -58,5 +58,78 @@ |
// 1. what is wrong, 2. why is it wrong, 3. how do I fix it. However, we |
// combine the first two in [template] and the last in [howToFix]. |
-final Map<String, Map> MESSAGES = { |
+import 'dart:convert'; |
+ |
+/// Encodes the category of the message. |
+/// |
+/// This is currently only used in the analyzer. |
+// TODO(floitsch): encode severity and type in the category, so we can generate |
+// the corresponding ErrorCode subclasses. |
+class Category { |
+ static final analysisOptionsError = new Category("AnalysisOptionsError"); |
+ |
+ static final analysisOptionsWarning = new Category("AnalysisOptionsWarning"); |
+ |
+ static final checkedModeCompileTimeError = new Category( |
+ "CheckedModeCompileTimeError"); |
+ |
+ final String name; |
+ |
+ Category(this.name); |
+} |
+ |
+ |
+class Message { |
+ final String id; |
+ final Category category; |
+ final String template; |
+ // The analyzer fills holes positionally (and not named). The following field |
+ // overrides the order of the holes. |
+ // For example the template "The argument #field in #cls is bad", could have |
+ // the order `["cls", "field"]', which means that the analyzer would first |
+ // provide the class `cls` and then only `field`. |
+ // This list is generally `null`, but when it is provided it must contain all |
+ // holes. |
+ final List templateHoleOrder; |
+ final String howToFix; |
+ final List<String> options; |
+ final List examples; |
+ |
+ Message({this.id, this.category, this.template, this.templateHoleOrder, |
+ this.howToFix, this.options, this.examples}); |
+} |
+ |
+String get messagesAsJson { |
+ var jsonified = {}; |
+ MESSAGES.forEach((String name, Message message) { |
+ jsonified[name] = { |
+ 'id': message.id, |
+ 'category': message.category.name, |
+ 'template': message.template, |
+ 'howToFix': message.howToFix |
+ }; |
+ }); |
+ return JSON.encode(jsonified); |
+} |
+ |
+final Map<String, Message> MESSAGES = { |
+ 'exampleMessage': new Message( |
+ id: 'use an Id generated by bin/message_id.dart', |
+ category: Category.analysisOptionsError, |
+ template: "#use #named #arguments", |
+ templateHoleOrder: ["arguments", "named", "use"], |
+ howToFix: "an explanation on how to fix things", |
+ examples: [r''' |
+ Some multiline example; |
+ That generates the bug.''', |
+ { |
+ 'fileA.dart': ''' |
+ or a map from file to content. |
+ again multiline''', |
+ 'fileB.dart': ''' |
+ with possibly multiple files. |
+ muliline too''' |
+ } |
+ ] |
+ ), |
}; |