diff options
author | Laurent Le Brun <laurentlb@google.com> | 2015-03-23 16:48:01 +0000 |
---|---|---|
committer | Han-Wen Nienhuys <hanwen@google.com> | 2015-03-24 16:41:37 +0000 |
commit | 0ddcba2d0148e662cca8487d91d8ae797a9a89e6 (patch) | |
tree | 74e365e899e8b1a1876d62580e99ef3f7f7a4869 /src/main/java/com/google/devtools/build/lib/syntax/Parser.java | |
parent | 4ccfb20f52d2d178d002bc4a71777e9e698a86dd (diff) |
Parser: Useful error messages when a Python keyword is used.
--
MOS_MIGRATED_REVID=89307831
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/syntax/Parser.java')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/syntax/Parser.java | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/Parser.java b/src/main/java/com/google/devtools/build/lib/syntax/Parser.java index 3ce949dac6..297aa13922 100644 --- a/src/main/java/com/google/devtools/build/lib/syntax/Parser.java +++ b/src/main/java/com/google/devtools/build/lib/syntax/Parser.java @@ -299,6 +299,31 @@ class Parser { return previous; } + // Keywords that exist in Python and that we don't parse. + private static final EnumSet<TokenKind> FORBIDDEN_KEYWORDS = + EnumSet.of(TokenKind.AS, TokenKind.ASSERT, TokenKind.BREAK, TokenKind.CONTINUE, + TokenKind.DEL, TokenKind.EXCEPT, TokenKind.FINALLY, TokenKind.FROM, TokenKind.GLOBAL, + TokenKind.IMPORT, TokenKind.IS, TokenKind.LAMBDA, TokenKind.NONLOCAL, TokenKind.RAISE, + TokenKind.TRY, TokenKind.WITH, TokenKind.WHILE, TokenKind.YIELD); + + private void checkForbiddenKeywords(Token token) { + if (parsePython || !FORBIDDEN_KEYWORDS.contains(token.kind)) { + return; + } + String error; + switch (token.kind) { + case ASSERT: error = "'assert' not supported, use 'fail' instead"; break; + case TRY: error = "'try' not supported, all exceptions are fatal"; break; + case IMPORT: error = "'import' not supported, use 'load' instead"; break; + case IS: error = "'is' not supported, use '==' instead"; break; + case LAMBDA: error = "'lambda' not supported, declare a function instead"; break; + case RAISE: error = "'raise' not supported, use 'fail' instead"; break; + case WHILE: error = "'while' not supported, use 'for' instead"; break; + default: error = "keyword '" + token.kind.getPrettyName() + "' not supported"; break; + } + reportError(lexer.createLocation(token.left, token.right), error); + } + private void nextToken() { if (pushedToken != null) { token = pushedToken; @@ -313,6 +338,7 @@ class Parser { } } } + checkForbiddenKeywords(token); if (DEBUGGING) { System.err.print(token); } |