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

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

Issue 1763373002: Support multiple categories per message. (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Created 4 years, 9 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
« no previous file with comments | « pkg/dart_messages/lib/generated/shared_messages.json ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
70 70
71 static final analysisOptionsWarning = new Category("AnalysisOptionsWarning"); 71 static final analysisOptionsWarning = new Category("AnalysisOptionsWarning");
72 72
73 static final checkedModeCompileTimeError = 73 static final checkedModeCompileTimeError =
74 new Category("CheckedModeCompileTimeError"); 74 new Category("CheckedModeCompileTimeError");
75 75
76 static final parserError = new Category("ParserError"); 76 static final parserError = new Category("ParserError");
77 77
78 static final compileTimeError = new Category("CompileTimeError"); 78 static final compileTimeError = new Category("CompileTimeError");
79 79
80 static final staticTypeWarning = new Category("StaticTypeWarning");
81
82 static final staticWarning = new Category("StaticWarning");
83
84 static final hint = new Category("Hint");
85
80 final String name; 86 final String name;
81 87
82 Category(this.name); 88 Category(this.name);
83 } 89 }
84 90
85 enum Platform { dart2js, analyzer, } 91 enum Platform { dart2js, analyzer, }
86 const dart2js = Platform.dart2js; 92 const dart2js = Platform.dart2js;
87 const analyzer = Platform.analyzer; 93 const analyzer = Platform.analyzer;
88 94
89 class Message { 95 class Message {
(...skipping 15 matching lines...) Expand all
105 /// For example, "Const is not allowed on getters" may be a specialization of 111 /// For example, "Const is not allowed on getters" may be a specialization of
106 /// "The 'const' keyword is not allowed here". 112 /// "The 'const' keyword is not allowed here".
107 /// 113 ///
108 /// Examples of the specialized message, should trigger for the more generic 114 /// Examples of the specialized message, should trigger for the more generic
109 /// message, when the platform doesn't support the more specialized message. 115 /// message, when the platform doesn't support the more specialized message.
110 /// 116 ///
111 /// Specializations must have the same error-id (but not sub-id) as the more 117 /// Specializations must have the same error-id (but not sub-id) as the more
112 /// generic message. 118 /// generic message.
113 final String specializationOf; 119 final String specializationOf;
114 120
115 final Category category; 121 /// The categories of this message.
122 ///
123 /// The same message can be used in multiple categories, for example, as
124 /// hint and warning.
125 final List<Category> categories;
126
116 final String template; 127 final String template;
117 // The analyzer fills holes positionally (and not named). The following field 128 // The analyzer fills holes positionally (and not named). The following field
118 // overrides the order of the holes. 129 // overrides the order of the holes.
119 // For example the template "The argument #field in #cls is bad", could have 130 // For example the template "The argument #field in #cls is bad", could have
120 // the order `["cls", "field"]', which means that the analyzer would first 131 // the order `["cls", "field"]', which means that the analyzer would first
121 // provide the class `cls` and then only `field`. 132 // provide the class `cls` and then only `field`.
122 // This list is generally `null`, but when it is provided it must contain all 133 // This list is generally `null`, but when it is provided it must contain all
123 // holes. 134 // holes.
124 final List<String> templateHoleOrder; 135 final List<String> templateHoleOrder;
125 final String howToFix; 136 final String howToFix;
126 final List<String> options; 137 final List<String> options;
127 final List examples; 138 final List examples;
128 final List<Platform> usedBy; 139 final List<Platform> usedBy;
129 140
130 Message( 141 Message(
131 {this.id, 142 {this.id,
132 this.subId: 0, 143 this.subId: 0,
133 this.specializationOf: null, 144 this.specializationOf: null,
134 this.category, 145 this.categories,
135 this.template, 146 this.template,
136 this.templateHoleOrder, 147 this.templateHoleOrder,
137 this.howToFix, 148 this.howToFix,
138 this.options, 149 this.options,
139 this.usedBy: const [], 150 this.usedBy: const [],
140 this.examples}); 151 this.examples});
141 } 152 }
142 153
143 String get messagesAsJson { 154 String get messagesAsJson {
144 var jsonified = {}; 155 var jsonified = {};
145 MESSAGES.forEach((String name, Message message) { 156 MESSAGES.forEach((String name, Message message) {
146 jsonified[name] = { 157 jsonified[name] = {
147 'id': message.id, 158 'id': message.id,
148 'subId': message.subId, 159 'subId': message.subId,
149 'category': message.category.name, 160 'categories':
161 message.categories.map((category) => category.name).toList(),
150 'template': message.template, 162 'template': message.template,
151 'templateHoleOrder': message.templateHoleOrder, 163 'templateHoleOrder': message.templateHoleOrder,
152 'howToFix': message.howToFix, 164 'howToFix': message.howToFix,
153 'options': message.options, 165 'options': message.options,
154 'usedBy': message.usedBy.map((platform) => platform.toString()).toList(), 166 'usedBy': message.usedBy.map((platform) => platform.toString()).toList(),
155 'examples': message.examples, 167 'examples': message.examples,
156 }; 168 };
157 }); 169 });
158 return new JsonEncoder.withIndent(' ').convert(jsonified); 170 return new JsonEncoder.withIndent(' ').convert(jsonified);
159 } 171 }
160 172
161 final Map<String, Message> MESSAGES = { 173 final Map<String, Message> MESSAGES = {
162 'exampleMessage': new Message( 174 'exampleMessage': new Message(
163 id: 'use an Id generated by bin/message_id.dart', 175 id: 'use an Id generated by bin/message_id.dart',
164 category: Category.analysisOptionsError, 176 categories: [Category.analysisOptionsError],
165 template: "#use #named #arguments", 177 template: "#use #named #arguments",
166 templateHoleOrder: ["arguments", "named", "use"], 178 templateHoleOrder: ["arguments", "named", "use"],
167 howToFix: "an explanation on how to fix things", 179 howToFix: "an explanation on how to fix things",
168 examples: [ 180 examples: [
169 r''' 181 r'''
170 Some multiline example; 182 Some multiline example;
171 That generates the bug.''', 183 That generates the bug.''',
172 { 184 {
173 'fileA.dart': ''' 185 'fileA.dart': '''
174 or a map from file to content. 186 or a map from file to content.
175 again multiline''', 187 again multiline''',
176 'fileB.dart': ''' 188 'fileB.dart': '''
177 with possibly multiple files. 189 with possibly multiple files.
178 muliline too''' 190 muliline too'''
179 } 191 }
180 ]), 192 ]),
181 193
182 // Const constructors (factory or not) may not have a body. 194 // Const constructors (factory or not) may not have a body.
183 'CONST_CONSTRUCTOR_OR_FACTORY_WITH_BODY': new Message( 195 'CONST_CONSTRUCTOR_OR_FACTORY_WITH_BODY': new Message(
184 id: 'LGJGHW', 196 id: 'LGJGHW',
185 subId: 0, 197 subId: 0,
186 category: Category.parserError, 198 categories: [Category.parserError],
187 template: "Const constructor or factory can't have a body.", 199 template: "Const constructor or factory can't have a body.",
188 howToFix: "Remove the 'const' keyword or the body.", 200 howToFix: "Remove the 'const' keyword or the body.",
189 usedBy: [ 201 usedBy: [dart2js],
190 dart2js
191 ],
192 examples: const [ 202 examples: const [
193 r""" 203 r"""
194 class C { 204 class C {
195 const C() {} 205 const C() {}
196 } 206 }
197 207
198 main() => new C();""", 208 main() => new C();""",
199 r""" 209 r"""
200 class C { 210 class C {
201 const factory C() {} 211 const factory C() {}
202 } 212 }
203 213
204 main() => new C();""" 214 main() => new C();"""
205 ]), 215 ]),
206 // Const constructors may not have a body. 216 // Const constructors may not have a body.
207 'CONST_CONSTRUCTOR_WITH_BODY': new Message( 217 'CONST_CONSTRUCTOR_WITH_BODY': new Message(
208 id: 'LGJGHW', 218 id: 'LGJGHW',
209 subId: 1, 219 subId: 1,
210 specializationOf: "CONST_CONSTRUCTOR_OR_FACTORY_WITH_BODY", 220 specializationOf: "CONST_CONSTRUCTOR_OR_FACTORY_WITH_BODY",
211 category: Category.parserError, 221 categories: [Category.parserError],
212 template: "Const constructor can't have a body.", 222 template: "Const constructor can't have a body.",
213 howToFix: "Try removing the 'const' keyword or the body.", 223 howToFix: "Try removing the 'const' keyword or the body.",
214 usedBy: [ 224 usedBy: [analyzer],
215 analyzer
216 ],
217 examples: const [ 225 examples: const [
218 r""" 226 r"""
219 class C { 227 class C {
220 const C() {} 228 const C() {}
221 } 229 }
222 230
223 main() => new C();""" 231 main() => new C();"""
224 ]), 232 ]),
225 // Const constructor factories may only redirect (and must not have a body). 233 // Const constructor factories may only redirect (and must not have a body).
226 'CONST_FACTORY': new Message( 234 'CONST_FACTORY': new Message(
227 id: 'LGJGHW', 235 id: 'LGJGHW',
228 subId: 2, 236 subId: 2,
229 specializationOf: "CONST_CONSTRUCTOR_OR_FACTORY_WITH_BODY", 237 specializationOf: "CONST_CONSTRUCTOR_OR_FACTORY_WITH_BODY",
230 category: Category.parserError, 238 categories: [Category.parserError],
231 template: "Only redirecting factory constructors can be declared to " 239 template: "Only redirecting factory constructors can be declared to "
232 "be 'const'.", 240 "be 'const'.",
233 howToFix: "Try removing the 'const' keyword or replacing the body with " 241 howToFix: "Try removing the 'const' keyword or replacing the body with "
234 "'=' followed by a valid target.", 242 "'=' followed by a valid target.",
235 usedBy: [ 243 usedBy: [analyzer],
236 analyzer
237 ],
238 examples: const [ 244 examples: const [
239 r""" 245 r"""
240 class C { 246 class C {
241 const factory C() {} 247 const factory C() {}
242 } 248 }
243 249
244 main() => new C();""" 250 main() => new C();"""
245 ]), 251 ]),
246 252
247 'EXTRANEOUS_MODIFIER': new Message( 253 'EXTRANEOUS_MODIFIER': new Message(
248 id: 'GRKIQE', 254 id: 'GRKIQE',
249 subId: 0, 255 subId: 0,
250 category: Category.parserError, 256 categories: [Category.parserError],
251 template: "Can't have modifier '#{modifier}' here.", 257 template: "Can't have modifier '#{modifier}' here.",
252 howToFix: "Try removing '#{modifier}'.", 258 howToFix: "Try removing '#{modifier}'.",
253 usedBy: [ 259 usedBy: [dart2js],
254 dart2js
255 ],
256 examples: const [ 260 examples: const [
257 "var String foo; main(){}", 261 "var String foo; main(){}",
258 // "var get foo; main(){}", 262 // "var get foo; main(){}",
259 "var set foo; main(){}", 263 "var set foo; main(){}",
260 "var final foo; main(){}", 264 "var final foo; main(){}",
261 "var var foo; main(){}", 265 "var var foo; main(){}",
262 "var const foo; main(){}", 266 "var const foo; main(){}",
263 "var abstract foo; main(){}", 267 "var abstract foo; main(){}",
264 "var static foo; main(){}", 268 "var static foo; main(){}",
265 "var external foo; main(){}", 269 "var external foo; main(){}",
266 "get var foo; main(){}", 270 "get var foo; main(){}",
267 "set var foo; main(){}", 271 "set var foo; main(){}",
268 "final var foo; main(){}", 272 "final var foo; main(){}",
269 "var var foo; main(){}", 273 "var var foo; main(){}",
270 "const var foo; main(){}", 274 "const var foo; main(){}",
271 "abstract var foo; main(){}", 275 "abstract var foo; main(){}",
272 "static var foo; main(){}", 276 "static var foo; main(){}",
273 "external var foo; main(){}" 277 "external var foo; main(){}"
274 ]), 278 ]),
275 279
276 'EXTRANEOUS_MODIFIER_REPLACE': new Message( 280 'EXTRANEOUS_MODIFIER_REPLACE': new Message(
277 id: 'GRKIQE', 281 id: 'GRKIQE',
278 subId: 1, 282 subId: 1,
279 category: Category.parserError, 283 categories: [Category.parserError],
280 template: "Can't have modifier '#{modifier}' here.", 284 template: "Can't have modifier '#{modifier}' here.",
281 howToFix: "Try replacing modifier '#{modifier}' with 'var', 'final', " 285 howToFix: "Try replacing modifier '#{modifier}' with 'var', 'final', "
282 "or a type.", 286 "or a type.",
283 usedBy: [ 287 usedBy: [dart2js],
284 dart2js
285 ],
286 examples: const [ 288 examples: const [
287 // "get foo; main(){}", 289 // "get foo; main(){}",
288 "set foo; main(){}", 290 "set foo; main(){}",
289 "abstract foo; main(){}", 291 "abstract foo; main(){}",
290 "static foo; main(){}", 292 "static foo; main(){}",
291 "external foo; main(){}" 293 "external foo; main(){}"
292 ]), 294 ]),
293 295
294 'CONST_CLASS': new Message( 296 'CONST_CLASS': new Message(
295 id: 'GRKIQE', 297 id: 'GRKIQE',
296 subId: 2, 298 subId: 2,
297 // The specialization could also be 'EXTRANEOUS_MODIFIER_REPLACE', but the 299 // The specialization could also be 'EXTRANEOUS_MODIFIER_REPLACE', but the
298 // example below triggers 'EXTRANEOUS_MODIFIER'. 300 // example below triggers 'EXTRANEOUS_MODIFIER'.
299 specializationOf: 'EXTRANEOUS_MODIFIER', 301 specializationOf: 'EXTRANEOUS_MODIFIER',
300 category: Category.parserError, 302 categories: [Category.parserError],
301 template: "Classes can't be declared to be 'const'", 303 template: "Classes can't be declared to be 'const'",
302 howToFix: "Try removing the 'const' keyword or moving to the class'" 304 howToFix: "Try removing the 'const' keyword or moving to the class'"
303 " constructor(s).", 305 " constructor(s).",
304 usedBy: [ 306 usedBy: [analyzer],
305 analyzer
306 ],
307 examples: const [ 307 examples: const [
308 r""" 308 r"""
309 const class C {} 309 const class C {}
310 310
311 main() => new C(); 311 main() => new C();
312 """ 312 """
313 ]), 313 ]),
314 314
315 'CONST_METHOD': new Message( 315 'CONST_METHOD': new Message(
316 id: 'GRKIQE', 316 id: 'GRKIQE',
317 subId: 3, 317 subId: 3,
318 // The specialization could also be 'EXTRANEOUS_MODIFIER_REPLACE', but the 318 // The specialization could also be 'EXTRANEOUS_MODIFIER_REPLACE', but the
319 // example below triggers 'EXTRANEOUS_MODIFIER'. 319 // example below triggers 'EXTRANEOUS_MODIFIER'.
320 specializationOf: 'EXTRANEOUS_MODIFIER', 320 specializationOf: 'EXTRANEOUS_MODIFIER',
321 category: Category.parserError, 321 categories: [Category.parserError],
322 template: "Getters, setters and methods can't be declared to be 'const'", 322 template: "Getters, setters and methods can't be declared to be 'const'",
323 howToFix: "Try removing the 'const' keyword.", 323 howToFix: "Try removing the 'const' keyword.",
324 usedBy: [ 324 usedBy: [analyzer],
325 analyzer
326 ],
327 examples: const [ 325 examples: const [
328 "const int foo() => 499; main() {}", 326 "const int foo() => 499; main() {}",
329 "const int get foo => 499; main() {}", 327 "const int get foo => 499; main() {}",
330 "const set foo(v) => 499; main() {}", 328 "const set foo(v) => 499; main() {}",
331 "class A { const int foo() => 499; } main() { new A(); }", 329 "class A { const int foo() => 499; } main() { new A(); }",
332 "class A { const int get foo => 499; } main() { new A(); }", 330 "class A { const int get foo => 499; } main() { new A(); }",
333 "class A { const set foo(v) => 499; } main() { new A(); }", 331 "class A { const set foo(v) => 499; } main() { new A(); }",
334 ]), 332 ]),
335 333
336 'CONST_ENUM': new Message( 334 'CONST_ENUM': new Message(
337 id: 'GRKIQE', 335 id: 'GRKIQE',
338 subId: 4, 336 subId: 4,
339 // The specialization could also be 'EXTRANEOUS_MODIFIER_REPLACE', but the 337 // The specialization could also be 'EXTRANEOUS_MODIFIER_REPLACE', but the
340 // example below triggers 'EXTRANEOUS_MODIFIER'. 338 // example below triggers 'EXTRANEOUS_MODIFIER'.
341 specializationOf: 'EXTRANEOUS_MODIFIER', 339 specializationOf: 'EXTRANEOUS_MODIFIER',
342 category: Category.parserError, 340 categories: [Category.parserError],
343 template: "Enums can't be declared to be 'const'", 341 template: "Enums can't be declared to be 'const'",
344 howToFix: "Try removing the 'const' keyword.", 342 howToFix: "Try removing the 'const' keyword.",
345 usedBy: [analyzer], 343 usedBy: [analyzer],
346 examples: const ["const enum Foo { x } main() {}",]), 344 examples: const ["const enum Foo { x } main() {}",]),
347 345
348 'CONST_TYPEDEF': new Message( 346 'CONST_TYPEDEF': new Message(
349 id: 'GRKIQE', 347 id: 'GRKIQE',
350 subId: 5, 348 subId: 5,
351 // The specialization could also be 'EXTRANEOUS_MODIFIER_REPLACE', but the 349 // The specialization could also be 'EXTRANEOUS_MODIFIER_REPLACE', but the
352 // example below triggers 'EXTRANEOUS_MODIFIER'. 350 // example below triggers 'EXTRANEOUS_MODIFIER'.
353 specializationOf: 'EXTRANEOUS_MODIFIER', 351 specializationOf: 'EXTRANEOUS_MODIFIER',
354 category: Category.parserError, 352 categories: [Category.parserError],
355 template: "Type aliases can't be declared to be 'const'", 353 template: "Type aliases can't be declared to be 'const'",
356 howToFix: "Try removing the 'const' keyword.", 354 howToFix: "Try removing the 'const' keyword.",
357 usedBy: [analyzer], 355 usedBy: [analyzer],
358 examples: const ["const typedef void Foo(); main() {}",]), 356 examples: const ["const typedef void Foo(); main() {}",]),
359 357
360 'CONST_AND_FINAL': new Message( 358 'CONST_AND_FINAL': new Message(
361 id: 'GRKIQE', 359 id: 'GRKIQE',
362 subId: 6, 360 subId: 6,
363 // The specialization could also be 'EXTRANEOUS_MODIFIER_REPLACE', but the 361 // The specialization could also be 'EXTRANEOUS_MODIFIER_REPLACE', but the
364 // example below triggers 'EXTRANEOUS_MODIFIER'. 362 // example below triggers 'EXTRANEOUS_MODIFIER'.
365 specializationOf: 'EXTRANEOUS_MODIFIER', 363 specializationOf: 'EXTRANEOUS_MODIFIER',
366 category: Category.parserError, 364 categories: [Category.parserError],
367 template: "Members can't be declared to be both 'const' and 'final'", 365 template: "Members can't be declared to be both 'const' and 'final'",
368 howToFix: "Try removing either the 'const' or 'final' keyword.", 366 howToFix: "Try removing either the 'const' or 'final' keyword.",
369 usedBy: [ 367 usedBy: [analyzer],
370 analyzer
371 ],
372 examples: const [ 368 examples: const [
373 "final const int x = 499; main() {}", 369 "final const int x = 499; main() {}",
374 "const final int x = 499; main() {}", 370 "const final int x = 499; main() {}",
375 "class A { static final const int x = 499; } main() {}", 371 "class A { static final const int x = 499; } main() {}",
376 "class A { static const final int x = 499; } main() {}", 372 "class A { static const final int x = 499; } main() {}",
377 ]), 373 ]),
378 374
379 'CONST_AND_VAR': new Message( 375 'CONST_AND_VAR': new Message(
380 id: 'GRKIQE', 376 id: 'GRKIQE',
381 subId: 7, 377 subId: 7,
382 // The specialization could also be 'EXTRANEOUS_MODIFIER_REPLACE', but the 378 // The specialization could also be 'EXTRANEOUS_MODIFIER_REPLACE', but the
383 // example below triggers 'EXTRANEOUS_MODIFIER'. 379 // example below triggers 'EXTRANEOUS_MODIFIER'.
384 specializationOf: 'EXTRANEOUS_MODIFIER', 380 specializationOf: 'EXTRANEOUS_MODIFIER',
385 category: Category.parserError, 381 categories: [Category.parserError],
386 template: "Members can't be declared to be both 'const' and 'var'", 382 template: "Members can't be declared to be both 'const' and 'var'",
387 howToFix: "Try removing either the 'const' or 'var' keyword.", 383 howToFix: "Try removing either the 'const' or 'var' keyword.",
388 usedBy: [ 384 usedBy: [analyzer],
389 analyzer
390 ],
391 examples: const [ 385 examples: const [
392 "var const x = 499; main() {}", 386 "var const x = 499; main() {}",
393 "const var x = 499; main() {}", 387 "const var x = 499; main() {}",
394 "class A { var const x = 499; } main() {}", 388 "class A { var const x = 499; } main() {}",
395 "class A { const var x = 499; } main() {}", 389 "class A { const var x = 499; } main() {}",
396 ]), 390 ]),
397 391
398 'CLASS_IN_CLASS': new Message( 392 'CLASS_IN_CLASS': new Message(
399 // Dart2js currently reports this as an EXTRANEOUS_MODIFIER error. 393 // Dart2js currently reports this as an EXTRANEOUS_MODIFIER error.
400 // TODO(floitsch): make dart2js use this error instead. 394 // TODO(floitsch): make dart2js use this error instead.
401 id: 'DOTHQH', 395 id: 'DOTHQH',
402 category: Category.parserError, 396 categories: [Category.parserError],
403 template: "Classes can't be declared inside other classes.", 397 template: "Classes can't be declared inside other classes.",
404 howToFix: "Try moving the class to the top-level.", 398 howToFix: "Try moving the class to the top-level.",
405 usedBy: [analyzer], 399 usedBy: [analyzer],
406 examples: const ["class A { class B {} } main() { new A(); }",]), 400 examples: const ["class A { class B {} } main() { new A(); }",]),
407 401
408 'CONSTRUCTOR_WITH_RETURN_TYPE': new Message( 402 'CONSTRUCTOR_WITH_RETURN_TYPE': new Message(
409 id: 'VOJBWY', 403 id: 'VOJBWY',
410 category: Category.parserError, 404 categories: [Category.parserError],
411 template: "Constructors can't have a return type", 405 template: "Constructors can't have a return type",
412 howToFix: "Try removing the return type.", 406 howToFix: "Try removing the return type.",
413 usedBy: [analyzer, dart2js], 407 usedBy: [analyzer, dart2js],
414 examples: const ["class A { int A() {} } main() { new A(); }",]), 408 examples: const ["class A { int A() {} } main() { new A(); }",]),
415 409
416 'MISSING_EXPRESSION_IN_THROW': new Message( 410 'MISSING_EXPRESSION_IN_THROW': new Message(
417 id: 'FTGGMJ', 411 id: 'FTGGMJ',
418 subId: 0, 412 subId: 0,
419 category: Category.parserError, 413 categories: [Category.parserError],
420 template: "Missing expression after 'throw'.", 414 template: "Missing expression after 'throw'.",
421 howToFix: "Did you mean 'rethrow'?", 415 howToFix: "Did you mean 'rethrow'?",
422 usedBy: [ 416 usedBy: [analyzer, dart2js],
423 analyzer,
424 dart2js
425 ],
426 examples: const [ 417 examples: const [
427 'main() { throw; }', 418 'main() { throw; }',
428 'main() { try { throw 0; } catch(e) { throw; } }' 419 'main() { try { throw 0; } catch(e) { throw; } }'
429 ]), 420 ]),
430 421
431 /** 422 /**
432 * 12.8.1 Rethrow: It is a compile-time error if an expression of the form 423 * 12.8.1 Rethrow: It is a compile-time error if an expression of the form
433 * <i>rethrow;</i> is not enclosed within a on-catch clause. 424 * <i>rethrow;</i> is not enclosed within a on-catch clause.
434 */ 425 */
435 'RETHROW_OUTSIDE_CATCH': new Message( 426 'RETHROW_OUTSIDE_CATCH': new Message(
436 id: 'MWETLC', 427 id: 'MWETLC',
437 category: Category.compileTimeError, 428 categories: [Category.compileTimeError],
438 template: 'Rethrow must be inside of catch clause', 429 template: 'Rethrow must be inside of catch clause',
439 howToFix: "Try moving the expression into a catch clause, or " 430 howToFix: "Try moving the expression into a catch clause, or "
440 "using a 'throw' expression.", 431 "using a 'throw' expression.",
441 usedBy: [analyzer, dart2js], 432 usedBy: [analyzer, dart2js],
442 examples: const ["main() { rethrow; }"]), 433 examples: const ["main() { rethrow; }"]),
443 434
444 /** 435 /**
445 * 13.12 Return: It is a compile-time error if a return statement of the form 436 * 13.12 Return: It is a compile-time error if a return statement of the form
446 * <i>return e;</i> appears in a generative constructor. 437 * <i>return e;</i> appears in a generative constructor.
447 */ 438 */
448 'RETURN_IN_GENERATIVE_CONSTRUCTOR': new Message( 439 'RETURN_IN_GENERATIVE_CONSTRUCTOR': new Message(
449 id: 'UOTDQH', 440 id: 'UOTDQH',
450 category: Category.compileTimeError, 441 categories: [Category.compileTimeError],
451 template: "Constructors can't return values.", 442 template: "Constructors can't return values.",
452 howToFix: 443 howToFix:
453 "Try removing the return statement or using a factory constructor.", 444 "Try removing the return statement or using a factory constructor.",
454 usedBy: [ 445 usedBy: [analyzer, dart2js],
455 analyzer,
456 dart2js
457 ],
458 examples: const [ 446 examples: const [
459 """ 447 """
460 class C { 448 class C {
461 C() { 449 C() {
462 return 1; 450 return 1;
463 } 451 }
464 } 452 }
465 453
466 main() => new C();""" 454 main() => new C();"""
467 ]), 455 ]),
468 456
469 /** 457 /**
470 * 13.12 Return: It is a compile-time error if a return statement of the form 458 * 13.12 Return: It is a compile-time error if a return statement of the form
471 * <i>return e;</i> appears in a generator function. 459 * <i>return e;</i> appears in a generator function.
472 */ 460 */
473 'RETURN_IN_GENERATOR': new Message( 461 'RETURN_IN_GENERATOR': new Message(
474 id: 'JRUTUQ', 462 id: 'JRUTUQ',
475 subId: 0, 463 subId: 0,
476 category: Category.compileTimeError, 464 categories: [Category.compileTimeError],
477 template: "Can't return a value from a generator function " 465 template: "Can't return a value from a generator function "
478 "(using the '#{modifier}' modifier).", 466 "(using the '#{modifier}' modifier).",
479 howToFix: "Try removing the value, replacing 'return' with 'yield' or" 467 howToFix: "Try removing the value, replacing 'return' with 'yield' or"
480 " changing the method body modifier", 468 " changing the method body modifier",
481 usedBy: [ 469 usedBy: [analyzer, dart2js],
482 analyzer,
483 dart2js
484 ],
485 examples: const [ 470 examples: const [
486 """ 471 """
487 foo() async* { return 0; } 472 foo() async* { return 0; }
488 main() => foo(); 473 main() => foo();
489 """, 474 """,
490 """ 475 """
491 foo() sync* { return 0; } 476 foo() sync* { return 0; }
492 main() => foo(); 477 main() => foo();
493 """ 478 """
494 ]), 479 ]),
480
481 'NOT_ASSIGNABLE': new Message(
482 id: 'FYQYXB',
483 subId: 0,
484 categories: [Category.staticTypeWarning],
485 template: "'#{fromType}' is not assignable to '#{toType}'.",
486 usedBy: [dart2js]),
487
488 'FORIN_NOT_ASSIGNABLE': new Message(
489 id: 'FYQYXB',
490 subId: 1,
491 categories: [Category.hint],
492 template: "The element type '#{currentType}' of '#{expressionType}' "
493 "is not assignable to '#{elementType}'.",
494 usedBy: [dart2js],
495 examples: const [
496 """
497 main() {
498 List<int> list = <int>[1, 2];
499 for (String x in list) x;
500 }
501 """
502 ]),
503
504 /**
505 * 13.11 Return: It is a static type warning if the type of <i>e</i> may not
506 * be assigned to the declared return type of the immediately enclosing
507 * function.
508 */
509 'RETURN_OF_INVALID_TYPE': new Message(
510 id: 'FYQYXB',
511 subId: 2,
512 specializationOf: 'NOT_ASSIGNABLE',
513 categories: [Category.staticTypeWarning],
514 template: "The return type '#{fromType}' is not a '#{toType}', as "
515 "defined by the method '#{method}'.",
516 usedBy: [analyzer],
517 examples: const ["int foo() => 'foo'; main() { foo(); }"]),
518
519 /**
520 * 12.11.1 New: It is a static warning if the static type of <i>a<sub>i</sub>,
521 * 1 &lt;= i &lt;= n+ k</i> may not be assigned to the type of the
522 * corresponding formal parameter of the constructor <i>T.id</i> (respectively
523 * <i>T</i>).
524 *
525 * 12.11.2 Const: It is a static warning if the static type of
526 * <i>a<sub>i</sub>, 1 &lt;= i &lt;= n+ k</i> may not be assigned to the type
527 * of the corresponding formal parameter of the constructor <i>T.id</i>
528 * (respectively <i>T</i>).
529 *
530 * 12.14.2 Binding Actuals to Formals: Let <i>T<sub>i</sub></i> be the static
531 * type of <i>a<sub>i</sub></i>, let <i>S<sub>i</sub></i> be the type of
532 * <i>p<sub>i</sub>, 1 &lt;= i &lt;= n+k</i> and let <i>S<sub>q</sub></i> be
533 * the type of the named parameter <i>q</i> of <i>f</i>. It is a static
534 * warning if <i>T<sub>j</sub></i> may not be assigned to <i>S<sub>j</sub>, 1
535 * &lt;= j &lt;= m</i>.
536 *
537 * 12.14.2 Binding Actuals to Formals: Furthermore, each <i>q<sub>i</sub>, 1
538 * &lt;= i &lt;= l</i>, must have a corresponding named parameter in the set
539 * <i>{p<sub>n+1</sub>, &hellip; p<sub>n+k</sub>}</i> or a static warning
540 * occurs. It is a static warning if <i>T<sub>m+j</sub></i> may not be
541 * assigned to <i>S<sub>r</sub></i>, where <i>r = q<sub>j</sub>, 1 &lt;= j
542 * &lt;= l</i>.
543 */
544 'ARGUMENT_TYPE_NOT_ASSIGNABLE': new Message(
545 id: 'FYQYXB',
546 subId: 3,
547 specializationOf: 'NOT_ASSIGNABLE',
548 categories: [Category.hint, Category.staticWarning],
549 template: "The argument type '#{fromType}' cannot be assigned to the "
550 "parameter type '#{toType}'.",
551 usedBy: [analyzer],
552 // TODO(floitsch): support hint warnings and ways to specify which
553 // category an example should trigger for.
554 examples: const ["foo(int x) => x; main() { foo('bar'); }"]),
495 }; 555 };
OLDNEW
« no previous file with comments | « pkg/dart_messages/lib/generated/shared_messages.json ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698