Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(82)

Side by Side Diff: pkg/dart_messages/lib/shared_messages.dart

Issue 1660703002: Share the first error messages. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Remove bad export. Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 // An update to this file must be followed by regenerating the corresponding 5 // An update to this file must be followed by regenerating the corresponding
6 // json, dart2js and analyzer file. Use `publish.dart` in the bin directory. 6 // json, dart2js and analyzer file. Use `publish.dart` in the bin directory.
7 // 7 //
8 // Every message in this file must have an id. Use `message_id.dart` in the 8 // Every message in this file must have an id. Use `message_id.dart` in the
9 // bin directory to generate a fresh one. 9 // bin directory to generate a fresh one.
10 10
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
63 /// Encodes the category of the message. 63 /// Encodes the category of the message.
64 /// 64 ///
65 /// This is currently only used in the analyzer. 65 /// This is currently only used in the analyzer.
66 // TODO(floitsch): encode severity and type in the category, so we can generate 66 // TODO(floitsch): encode severity and type in the category, so we can generate
67 // the corresponding ErrorCode subclasses. 67 // the corresponding ErrorCode subclasses.
68 class Category { 68 class Category {
69 static final analysisOptionsError = new Category("AnalysisOptionsError"); 69 static final analysisOptionsError = new Category("AnalysisOptionsError");
70 70
71 static final analysisOptionsWarning = new Category("AnalysisOptionsWarning"); 71 static final analysisOptionsWarning = new Category("AnalysisOptionsWarning");
72 72
73 static final checkedModeCompileTimeError = new Category( 73 static final checkedModeCompileTimeError =
74 "CheckedModeCompileTimeError"); 74 new Category("CheckedModeCompileTimeError");
75
76 static final parserError = new Category("ParserError");
75 77
76 final String name; 78 final String name;
77 79
78 Category(this.name); 80 Category(this.name);
79 } 81 }
80 82
83 enum Platform {
84 dart2js, analyzer,
85 }
86 const dart2js = Platform.dart2js;
87 const analyzer = Platform.analyzer;
81 88
82 class Message { 89 class Message {
83 final String id; 90 final String id;
91 final int subId;
84 final Category category; 92 final Category category;
85 final String template; 93 final String template;
86 // The analyzer fills holes positionally (and not named). The following field 94 // The analyzer fills holes positionally (and not named). The following field
87 // overrides the order of the holes. 95 // overrides the order of the holes.
88 // For example the template "The argument #field in #cls is bad", could have 96 // For example the template "The argument #field in #cls is bad", could have
89 // the order `["cls", "field"]', which means that the analyzer would first 97 // the order `["cls", "field"]', which means that the analyzer would first
90 // provide the class `cls` and then only `field`. 98 // provide the class `cls` and then only `field`.
91 // This list is generally `null`, but when it is provided it must contain all 99 // This list is generally `null`, but when it is provided it must contain all
92 // holes. 100 // holes.
93 final List templateHoleOrder; 101 final List<String> templateHoleOrder;
94 final String howToFix; 102 final String howToFix;
95 final List<String> options; 103 final List<String> options;
96 final List examples; 104 final List examples;
105 final List<Platform> usedBy;
97 106
98 Message({this.id, this.category, this.template, this.templateHoleOrder, 107 Message(
99 this.howToFix, this.options, this.examples}); 108 {this.id,
109 this.subId: 0,
110 this.category,
111 this.template,
112 this.templateHoleOrder,
113 this.howToFix,
114 this.options,
115 this.usedBy: const [],
116 this.examples});
100 } 117 }
101 118
102 String get messagesAsJson { 119 String get messagesAsJson {
103 var jsonified = {}; 120 var jsonified = {};
104 MESSAGES.forEach((String name, Message message) { 121 MESSAGES.forEach((String name, Message message) {
105 jsonified[name] = { 122 jsonified[name] = {
106 'id': message.id, 123 'id': message.id,
124 'subId': message.subId,
107 'category': message.category.name, 125 'category': message.category.name,
108 'template': message.template, 126 'template': message.template,
109 'howToFix': message.howToFix 127 'templateHoleOrder': message.templateHoleOrder,
128 'howToFix': message.howToFix,
129 'options': message.options,
130 'usedBy': message.usedBy.map((platform) => platform.toString()).toList(),
131 'examples': message.examples,
110 }; 132 };
111 }); 133 });
112 return JSON.encode(jsonified); 134 return JSON.encode(jsonified);
113 } 135 }
114 136
115 final Map<String, Message> MESSAGES = { 137 final Map<String, Message> MESSAGES = {
116 'exampleMessage': new Message( 138 'exampleMessage': new Message(
117 id: 'use an Id generated by bin/message_id.dart', 139 id: 'use an Id generated by bin/message_id.dart',
118 category: Category.analysisOptionsError, 140 category: Category.analysisOptionsError,
119 template: "#use #named #arguments", 141 template: "#use #named #arguments",
120 templateHoleOrder: ["arguments", "named", "use"], 142 templateHoleOrder: ["arguments", "named", "use"],
121 howToFix: "an explanation on how to fix things", 143 howToFix: "an explanation on how to fix things",
122 examples: [r''' 144 examples: [
145 r'''
123 Some multiline example; 146 Some multiline example;
124 That generates the bug.''', 147 That generates the bug.''',
125 { 148 {
126 'fileA.dart': ''' 149 'fileA.dart': '''
127 or a map from file to content. 150 or a map from file to content.
128 again multiline''', 151 again multiline''',
129 'fileB.dart': ''' 152 'fileB.dart': '''
130 with possibly multiple files. 153 with possibly multiple files.
131 muliline too''' 154 muliline too'''
132 } 155 }
133 ] 156 ]),
134 ), 157
158 // Const constructors (factory or not) may not have a body.
159 'CONST_CONSTRUCTOR_OR_FACTORY_WITH_BODY': new Message(
160 id: 'LGJGHW',
161 subId: 0,
162 category: Category.parserError,
163 template: "Const constructor or factory can't have a body.",
164 howToFix: "Remove the 'const' keyword or the body.",
165 usedBy: [dart2js],
166 examples: const [
167 r"""
168 class C {
169 const C() {}
170 }
171
172 main() => new C();""",
173 r"""
174 class C {
175 const factory C() {}
176 }
177
178 main() => new C();"""
179 ]),
180 // Const constructors may not have a body.
181 'CONST_CONSTRUCTOR_WITH_BODY': new Message(
182 id: 'LGJGHW',
183 subId: 1,
184 category: Category.parserError,
185 template: "Const constructor can't have a body.",
186 howToFix: "Try removing the 'const' keyword or the body.",
187 usedBy: [analyzer],
188 examples: const [
189 r"""
190 class C {
191 const C() {}
192 }
193
194 main() => new C();"""
195 ]),
196 // Const constructor factories may only redirect (and must not have a body).
197 'CONST_FACTORY': new Message(
198 id: 'LGJGHW',
199 subId: 2,
200 category: Category.parserError,
201 template: "Only redirecting factory constructors can be declared to "
202 "be 'const'.",
203 howToFix: "Try removing the 'const' keyword or replacing the body with "
204 "'=' followed by a valid target",
205 usedBy: [analyzer],
206 examples: const [
207 r"""
208 class C {
209 const factory C() {}
210 }
211
212 main() => new C();"""
213 ]),
135 }; 214 };
OLDNEW
« no previous file with comments | « pkg/dart_messages/lib/generated/shared_messages.json ('k') | pkg/dart_messages/test/dart_messages_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698