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

Unified 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/front_end/error_recovery.yaml
diff --git a/pkg/front_end/error_recovery.yaml b/pkg/front_end/error_recovery.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..241d4db4dca1d659679bfb3baa334fe29d6f678c
--- /dev/null
+++ b/pkg/front_end/error_recovery.yaml
@@ -0,0 +1,120 @@
+# Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file
+# for details. All rights reserved. Use of this source code is governed by a
+# BSD-style license that can be found in the LICENSE file.
+
+# Each entry in this file corresponds to an error recovery scenario. For each
+# scenario we specify:
+#
+# 1. An explanation of the problem (description).
+# 2. Important recovery notes (recovery): a list of text notes explaining of
+# how the code is interpreted by the front-end and its clients.
+# 3. An optional set of questions if we don't have the answer at this
+# moment (questions).
+# 4. An example code that illustrates the problem (example).
+#
+# At this time this is just a documentation file, the goal however is to turn it
+# also into a test suite so every example can be tested automatically.
+#
+# To do so we can start annotating the examples to indicate relevant error
+# locations with comments of the form `/*@error=name*/`, where `name` is a
+# message name from `messages.yaml` that corresponds to the error (if known). If
+# the compiler doesn't yet have a specific error message for the error, use
+# `/*@error=?*/`. This comment should go immediately before the token where the
+# error is reported. If we know at this time that the error has a region,
+# include an /*@errorEnd*/ at the point where the region ends.
+
+NameConflictDuplicateField:
+ description: "A field was declared twice."
+ recovery:
+ - "both fields can be seen in the generated kernel output."
+ - "code completion works on the types and inside initializers of either field."
+ - "any errors from the usage of the field should be lower priority than this error."
+ - "accesses to the field get resolved to the first declaration (in text order)."
+ example: >-
+ List bar = [1, 2];
+ StringBuffer foo = new StringBuffer();
+ class A {
+ int /*@error=DuplicatedName*/ field /*@errorEnd*/ = bar.length;
+ String /*@error=DuplicatedName*/ field /*@errorEnd*/ = '$foo';
+ }
+
+NameConflictDuplicateMethod:
+ description: "A method was declared twice."
+ recovery:
+ - "both methods can be seen in the generated kernel output."
+ - "code completion works within both methods."
+ - "other code that accesses the method will be resolved to the first declaration."
+ example: >-
+ List bar = [1, 2];
+ class A {
+ int /*@error=DuplicatedName*/ m /*@errorEnd*/() => bar.length;
+ int /*@error=DuplicatedName*/ m /*@errorEnd*/(StringBuffer foo) => '$foo';
+ }
+
+NameConflictInconsitentMemberKind:
+ description: "A method and a field have the same name."
+ recovery:
+ - "both can be seen in the generated output."
+ - "first declaration wins."
+ example: >-
+ List bar = [1, 2];
+ class A {
+ int /*@error=DuplicatedName*/ m /*@errorEnd*/ = bar.length;
+ int /*@error=DuplicatedName*/ m /*@errorEnd*/(StringBuffer foo) => '$foo';
+ }
+
+ImportIsOutOfOrder:
+ description: "An import was written below a definition."
+ recovery:
+ - "treat it as if the import was on top."
+ - "no cascading errors are presented as if the import was missing."
+ example: >-
+ class A extends B {}
+ /*@error=?*/
+ import 'b.dart'; // b.dart defines B
+ /*@errorEnd*/
+
+CallAMissingConstructor:
+ description: "A named constructor has a typo in the name."
+ recovery:
+ - "keep the expression where it occurs."
+ - "treat the type of the expression as if a valid constructor was used."
+ example: >-
+ class C {
+ bar() => null;
+ }
+ main() {
+ var x = new C./*error=MethodNotFound*/foo();
+ x.bar(); // no errors here, `x` has inferred type `C`.
+ }
+
+TreatAbstractFunctionsAsEmpty:
+ description: "A function in a non-abstract class is missing a body."
+ recovery: "Treat it as if it was empty."
+ example: >-
+ class A {
+ foo() /*@error=ExpectedBody*/;
+ }
+
+IgnoreEmptyOptionalArgs:
+ description: "A function declares optional argument, but the list is empty."
+ recovery: "Treat it as if it wasn't there."
+ example: >-
+ m(a, b, []){}
+
+IgnoreEmptyOptionalArgs:
+ description: "A function declares both positional and named arguments."
+ questions: "Treat it as if only named arguments are there?"
+ example: >-
+ m(a, b, [c], {d}){}
+
+# TODO(sigmund): add details to the list below
+
+NameConflictDuplicateTopLevelField:
+ description: "A top-level field was declared twice."
+
+NameConflictDuplicateTopLevelMethod:
+ description: "A top-level method was declared twice."
+
+NameConflictDuplicateTopLevelDeclaration:
+ description: "Two top-level declarations use the same name."
« 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