| Index: pkg/front_end/messages.yaml
|
| diff --git a/pkg/front_end/messages.yaml b/pkg/front_end/messages.yaml
|
| index 19a25da37845936bc4769b0603935d514248a77a..fa905fbc06832485712d82057f39fec4f1689075 100644
|
| --- a/pkg/front_end/messages.yaml
|
| +++ b/pkg/front_end/messages.yaml
|
| @@ -12,6 +12,9 @@
|
| # 3. Examples that produce the message (one of expression, statement,
|
| # declaration, member, script, or bytes).
|
| #
|
| +# In addition, an entry can contain an analyzer error code (analyzerCode) and a
|
| +# dart2js error code (dart2jsCode).
|
| +#
|
| # ## Parameter Substitution in Template and Tip
|
| #
|
| # The fields `template` and `tip` are subject to parameter substitution. When
|
| @@ -31,24 +34,31 @@
|
|
|
| AsciiControlCharacter:
|
| template: "The control character #unicode can only be used in strings and comments."
|
| + dart2jsCode: BAD_INPUT_CHARACTER
|
| expresssion: "\x1b 1"
|
|
|
| NonAsciiIdentifier:
|
| template: "The non-ASCII character '#character' (#unicode) can't be used in identifiers, only in strings and comments."
|
| tip: "Try using an US-ASCII letter, a digit, '_' (an underscore), or '$' (a dollar sign)."
|
| + analyzerCode: ILLEGAL_CHARACTER
|
| + dart2jsCode: BAD_INPUT_CHARACTER
|
| expresssion: "å"
|
|
|
| NonAsciiWhitespace:
|
| template: "The non-ASCII space character #unicode can only be used in strings and comments."
|
| + analyzerCode: ILLEGAL_CHARACTER
|
| + dart2jsCode: BAD_INPUT_CHARACTER
|
| expresssion: "\u2028 1"
|
|
|
| Encoding:
|
| template: "Unable to decode bytes as UTF-8."
|
| + dart2jsCode: FASTA_FATAL
|
| bytes: [255]
|
|
|
| EmptyNamedParameterList:
|
| template: "Named parameter lists cannot be empty."
|
| tip: "Try adding a named parameter to the list."
|
| + dart2jsCode: EMPTY_NAMED_PARAMETER_LIST
|
| script: >
|
| foo({}) {}
|
|
|
| @@ -59,6 +69,7 @@ EmptyNamedParameterList:
|
| EmptyOptionalParameterList:
|
| template: "Optional parameter lists cannot be empty."
|
| tip: "Try adding an optional parameter to the list."
|
| + dart2jsCode: EMPTY_OPTIONAL_PARAMETER_LIST
|
| script: >
|
| foo([]) {}
|
|
|
| @@ -66,41 +77,54 @@ EmptyOptionalParameterList:
|
| foo();
|
| }
|
|
|
| -ExpectedBlockToSkip: ExpectedBody
|
| +ExpectedBlockToSkip:
|
| + template: "Expected a function body or '=>'."
|
| + # TODO(ahe): In some scenarios, we can suggest removing the 'static' keyword.
|
| + tip: "Try adding {}."
|
| + dart2jsCode: NATIVE_OR_BODY_EXPECTED
|
| + script: "main();"
|
|
|
| ExpectedBody:
|
| template: "Expected a function body or '=>'."
|
| # TODO(ahe): In some scenarios, we can suggest removing the 'static' keyword.
|
| tip: "Try adding {}."
|
| + dart2jsCode: BODY_EXPECTED
|
| script: "main();"
|
|
|
| ExpectedButGot:
|
| - template: "Expected '#lexeme' before this."
|
| + template: "Expected '#string' before this."
|
| # Consider the second example below: the parser expects a ')' before 'y', but
|
| # a ',' would also have worked. We don't have enough information to give a
|
| # good suggestion.
|
| tip: DONT_KNOW_HOW_TO_FIX,
|
| + dart2jsCode: MISSING_TOKEN_BEFORE_THIS
|
| script:
|
| - "main() => true ? 1;"
|
| - "main() => foo(x: 1 y: 2);"
|
|
|
| ExpectedClassBody:
|
| template: "Expected a class body, but got '#lexeme'."
|
| + dart2jsCode: FASTA_FATAL
|
|
|
| ExpectedClassBodyToSkip: ExpectedClassBody
|
|
|
| ExpectedDeclaration:
|
| template: "Expected a declaration, but got '#lexeme'."
|
| + dart2jsCode: FASTA_FATAL
|
|
|
| ExpectedExpression:
|
| template: "Expected an expression, but got '#lexeme'."
|
| + dart2jsCode: FASTA_FATAL
|
|
|
| ExpectedFunctionBody:
|
| template: "Expected a function body, but got '#lexeme'."
|
| + dart2jsCode: NATIVE_OR_FATAL
|
|
|
| ExpectedHexDigit:
|
| template: "A hex digit (0-9 or A-F) must follow '0x'."
|
| # No tip, seems obvious from the error message.
|
| + analyzerCode: MISSING_HEX_DIGIT
|
| + dart2jsCode: HEX_DIGIT_EXPECTED
|
| script: >
|
| main() {
|
| var i = 0x;
|
| @@ -109,20 +133,25 @@ ExpectedHexDigit:
|
| ExpectedIdentifier:
|
| template: "'#lexeme' is a reserved word and can't be used here."
|
| tip: "Try using a different name."
|
| + dart2jsCode: EXPECTED_IDENTIFIER
|
| script: "do() {} main() {}"
|
|
|
| ExpectedOpenParens:
|
| template: "Expected '('."
|
| + dart2jsCode: GENERIC
|
|
|
| ExpectedString:
|
| template: "Expected a String, but got '#lexeme'."
|
| + dart2jsCode: FASTA_FATAL
|
|
|
| ExpectedType:
|
| template: "Expected a type, but got '#lexeme'."
|
| + dart2jsCode: FASTA_FATAL
|
|
|
| ExtraneousModifier:
|
| template: "Can't have modifier '#lexeme' here."
|
| tip: "Try removing '#lexeme'."
|
| + dart2jsCode: EXTRANEOUS_MODIFIER
|
| script:
|
| - "var String foo; main(){}"
|
| - "var set foo; main(){}"
|
| @@ -144,6 +173,7 @@ ExtraneousModifier:
|
| ExtraneousModifierReplace:
|
| template: "Can't have modifier '#lexeme' here."
|
| tip: "Try replacing modifier '#lexeme' with 'var', 'final', or a type."
|
| + dart2jsCode: EXTRANEOUS_MODIFIER_REPLACE
|
| script:
|
| - "set foo; main(){}"
|
| - "abstract foo; main(){}"
|
| @@ -153,6 +183,7 @@ ExtraneousModifierReplace:
|
| InvalidAwaitFor:
|
| template: "'await' is only supported in methods with an 'async' or 'async*' body modifier."
|
| tip: "Try adding 'async' or 'async*' to the method body or removing the 'await' keyword."
|
| + dart2jsCode: INVALID_AWAIT_FOR
|
| script: >
|
| main(o) sync* {
|
| await for (var e in o) {}
|
| @@ -161,11 +192,13 @@ InvalidAwaitFor:
|
| InvalidSyncModifier:
|
| template: "Invalid modifier 'sync'."
|
| tip: "Try replacing 'sync' with 'sync*'."
|
| + dart2jsCode: INVALID_SYNC_MODIFIER
|
| script: "main() sync {}"
|
|
|
| InvalidVoid:
|
| template: "Type 'void' can't be used here because it isn't a return type."
|
| tip: "Try removing 'void' keyword or replace it with 'var', 'final', or a type."
|
| + dart2jsCode: VOID_NOT_ALLOWED
|
| script:
|
| - "void x; main() {}"
|
| - "foo(void x) {} main() { foo(null); }"
|
| @@ -173,6 +206,8 @@ InvalidVoid:
|
| MissingExponent:
|
| template: "Numbers in exponential notation should always contain an exponent (an integer number with an optional sign)."
|
| tip: "Make sure there is an exponent, and remove any whitespace before it."
|
| + analyzerCode: MISSING_DIGIT
|
| + dart2jsCode: EXPONENT_MISSING
|
| script: >
|
| main() {
|
| var i = 1e;
|
| @@ -181,6 +216,7 @@ MissingExponent:
|
| PositionalParameterWithEquals:
|
| template: "Positional optional parameters can't use ':' to specify a default value."
|
| tip: "Try replacing ':' with '='."
|
| + dart2jsCode: POSITIONAL_PARAMETER_WITH_EQUALS
|
| script: >
|
| main() {
|
| foo([a: 1]) => print(a);
|
| @@ -190,6 +226,7 @@ PositionalParameterWithEquals:
|
| RequiredParameterWithDefault:
|
| template: "Non-optional parameters can't have a default value."
|
| tip: "Try removing the default value or making the parameter optional."
|
| + dart2jsCode: REQUIRED_PARAMETER_WITH_DEFAULT
|
| script:
|
| - >
|
| main() {
|
| @@ -204,10 +241,12 @@ RequiredParameterWithDefault:
|
|
|
| StackOverflow:
|
| template: "Stack overflow."
|
| + dart2jsCode: GENERIC
|
|
|
| UnexpectedDollarInString:
|
| template: "A '$' has special meaning inside a string, and must be followed by an identifier or an expression in curly braces ({})."
|
| tip: "Try adding a backslash (\\) to escape the '$'."
|
| + dart2jsCode: MALFORMED_STRING_LITERAL
|
| script:
|
| - >
|
| main() {
|
| @@ -228,9 +267,11 @@ UnexpectedDollarInString:
|
|
|
| UnexpectedToken:
|
| template: "Unexpected token '#lexeme'."
|
| + dart2jsCode: FASTA_FATAL
|
|
|
| UnmatchedToken:
|
| template: "Can't find '#string' to match '#lexeme'."
|
| + dart2jsCode: UNMATCHED_TOKEN
|
| script:
|
| - "main("
|
| - "main(){"
|
| @@ -239,10 +280,13 @@ UnmatchedToken:
|
| UnsupportedPrefixPlus:
|
| template: "'+' is not a prefix operator. "
|
| tip: "Try removing '+'."
|
| + dart2jsCode: UNSUPPORTED_PREFIX_PLUS
|
| script: "main() => +2; // No longer a valid way to write '2'"
|
|
|
| UnterminatedComment:
|
| template: "Comment starting with '/*' must end with '*/'."
|
| + analyzerCode: UNTERMINATED_MULTI_LINE_COMMENT
|
| + dart2jsCode: UNTERMINATED_COMMENT
|
| script:
|
| main() {
|
| }
|
| @@ -250,6 +294,8 @@ UnterminatedComment:
|
|
|
| UnterminatedString:
|
| template: "String must end with #string."
|
| + analyzerCode: UNTERMINATED_STRING_LITERAL
|
| + dart2jsCode: UNTERMINATED_STRING
|
| script:
|
| - >
|
| main() {
|
| @@ -283,52 +329,69 @@ UnterminatedString:
|
| UnterminatedToken:
|
| # This is a fall-back message that shouldn't happen.
|
| template: "Incomplete token."
|
| + dart2jsCode: UNTERMINATED_TOKEN
|
|
|
| Unspecified:
|
| template: "#string"
|
| + dart2jsCode: GENERIC
|
|
|
| AbstractNotSync:
|
| template: "Abstract methods can't use 'async', 'async*', or 'sync*'."
|
| + dart2jsCode: FASTA_IGNORED
|
|
|
| AsyncAsIdentifier:
|
| + analyzerCode: ASYNC_KEYWORD_USED_AS_IDENTIFIER
|
| template: "'async' can't be used as an identifier in 'async', 'async*', or 'sync*' methods."
|
| + dart2jsCode: GENERIC
|
|
|
| AwaitAsIdentifier:
|
| template: "'await' can't be used as an identifier in 'async', 'async*', or 'sync*' methods."
|
| + dart2jsCode: FASTA_IGNORED
|
|
|
| AwaitNotAsync:
|
| template: "'await' can only be used in 'async' or 'async*' methods."
|
| + dart2jsCode: FASTA_IGNORED
|
|
|
| BuiltInIdentifierAsType:
|
| template: "Can't use '#lexeme' as a type."
|
| + dart2jsCode: GENERIC
|
|
|
| BuiltInIdentifierInDeclaration:
|
| template: "Can't use '#lexeme' as a name here."
|
| + dart2jsCode: GENERIC
|
|
|
| AwaitForNotAsync:
|
| template: "Asynchronous for-loop can only be used in 'async' or 'async*' methods."
|
| + dart2jsCode: FASTA_IGNORED
|
|
|
| FactoryNotSync:
|
| template: "Factories can't use 'async', 'async*', or 'sync*'."
|
| + dart2jsCode: FASTA_IGNORED
|
|
|
| GeneratorReturnsValue:
|
| template: "'sync*' and 'async*' can't return a value."
|
| + dart2jsCode: FASTA_IGNORED
|
|
|
| InvalidInlineFunctionType:
|
| template: "Invalid inline function type."
|
| tip: "Try changing the inline function type (as in 'int f()') to a prefixed function type using the `Function` keyword (as in 'int Function() f')."
|
| + dart2jsCode: INVALID_INLINE_FUNCTION_TYPE
|
| declaration: "typedef F = Function(int f(String x)); main() { F f; }"
|
|
|
| SetterNotSync:
|
| template: "Setters can't use 'async', 'async*', or 'sync*'."
|
| + dart2jsCode: FASTA_IGNORED
|
|
|
| YieldAsIdentifier:
|
| template: "'yield' can't be used as an identifier in 'async', 'async*', or 'sync*' methods."
|
| + dart2jsCode: FASTA_IGNORED
|
|
|
| YieldNotGenerator:
|
| template: "'yield' can only be used in 'sync*' or 'async*' methods."
|
| + dart2jsCode: FASTA_IGNORED
|
|
|
| OnlyTry:
|
| template: "Try block should be followed by 'on', 'catch', or 'finally' block."
|
| tip: "Did you forget to add a 'finally' block?"
|
| statement: "try {}"
|
| + dart2jsCode: FASTA_IGNORED
|
|
|