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

Side by Side Diff: pkg/front_end/error_recovery.yaml

Issue 2998743002: Add error_recovery.yaml: a place to add scenarios we explicitly want to model in (Closed)
Patch Set: cl comments Created 3 years, 4 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 | « no previous file | 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
(Empty)
1 # Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file
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.
4
5 # Each entry in this file corresponds to an error recovery scenario. For each
6 # scenario we specify:
7 #
8 # 1. An explanation of the problem (description).
9 # 2. Important recovery notes (recovery): a list of text notes explaining of
10 # how the code is interpreted by the front-end and its clients.
11 # 3. An optional set of questions if we don't have the answer at this
12 # moment (questions).
13 # 4. An example code that illustrates the problem (example).
14 #
15 # At this time this is just a documentation file, the goal however is to turn it
16 # also into a test suite so every example can be tested automatically.
17 #
18 # To do so we can start annotating the examples to indicate relevant error
19 # locations with comments of the form `/*@error=name*/`, where `name` is a
20 # message name from `messages.yaml` that corresponds to the error (if known). If
21 # the compiler doesn't yet have a specific error message for the error, use
22 # `/*@error=?*/`. This comment should go immediately before the token where the
23 # error is reported. If we know at this time that the error has a region,
24 # include an /*@errorEnd*/ at the point where the region ends.
25
26 NameConflictDuplicateField:
27 description: "A field was declared twice."
28 recovery:
29 - "both fields can be seen in the generated kernel output."
30 - "code completion works on the types and inside initializers of either fiel d."
31 - "any errors from the usage of the field should be lower priority than this error."
32 - "accesses to the field get resolved to the first declaration (in text orde r)."
33 example: >-
34 List bar = [1, 2];
35 StringBuffer foo = new StringBuffer();
36 class A {
37 int /*@error=DuplicatedName*/ field /*@errorEnd*/ = bar.length;
38 String /*@error=DuplicatedName*/ field /*@errorEnd*/ = '$foo';
39 }
40
41 NameConflictDuplicateMethod:
42 description: "A method was declared twice."
43 recovery:
44 - "both methods can be seen in the generated kernel output."
45 - "code completion works within both methods."
46 - "other code that accesses the method will be resolved to the first declara tion."
47 example: >-
48 List bar = [1, 2];
49 class A {
50 int /*@error=DuplicatedName*/ m /*@errorEnd*/() => bar.length;
51 int /*@error=DuplicatedName*/ m /*@errorEnd*/(StringBuffer foo) => '$foo';
52 }
53
54 NameConflictInconsitentMemberKind:
55 description: "A method and a field have the same name."
56 recovery:
57 - "both can be seen in the generated output."
58 - "first declaration wins."
59 example: >-
60 List bar = [1, 2];
61 class A {
62 int /*@error=DuplicatedName*/ m /*@errorEnd*/ = bar.length;
63 int /*@error=DuplicatedName*/ m /*@errorEnd*/(StringBuffer foo) => '$foo';
64 }
65
66 ImportIsOutOfOrder:
67 description: "An import was written below a definition."
68 recovery:
69 - "treat it as if the import was on top."
70 - "no cascading errors are presented as if the import was missing."
71 example: >-
72 class A extends B {}
73 /*@error=?*/
74 import 'b.dart'; // b.dart defines B
75 /*@errorEnd*/
76
77 CallAMissingConstructor:
78 description: "A named constructor has a typo in the name."
79 recovery:
80 - "keep the expression where it occurs."
81 - "treat the type of the expression as if a valid constructor was used."
82 example: >-
83 class C {
84 bar() => null;
85 }
86 main() {
87 var x = new C./*error=MethodNotFound*/foo();
88 x.bar(); // no errors here, `x` has inferred type `C`.
89 }
90
91 TreatAbstractFunctionsAsEmpty:
92 description: "A function in a non-abstract class is missing a body."
93 recovery: "Treat it as if it was empty."
94 example: >-
95 class A {
96 foo() /*@error=ExpectedBody*/;
97 }
98
99 IgnoreEmptyOptionalArgs:
100 description: "A function declares optional argument, but the list is empty."
101 recovery: "Treat it as if it wasn't there."
102 example: >-
103 m(a, b, []){}
104
105 IgnoreEmptyOptionalArgs:
106 description: "A function declares both positional and named arguments."
107 questions: "Treat it as if only named arguments are there?"
108 example: >-
109 m(a, b, [c], {d}){}
110
111 # TODO(sigmund): add details to the list below
112
113 NameConflictDuplicateTopLevelField:
114 description: "A top-level field was declared twice."
115
116 NameConflictDuplicateTopLevelMethod:
117 description: "A top-level method was declared twice."
118
119 NameConflictDuplicateTopLevelDeclaration:
120 description: "Two top-level declarations use the same name."
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698