diff options
author | 2015-10-16 09:43:48 +0000 | |
---|---|---|
committer | 2015-10-16 12:42:50 +0000 | |
commit | 1f004e55a03edb3ac69a70a5956915561cb6f9e4 (patch) | |
tree | 7a46ab89d2d4c2c53b675de6d8b4025eb89193f9 /src/main/java/com/google/devtools | |
parent | dcd9a53e2699ffa3fbcd736b4df55c347ddf05bd (diff) |
Fixed wrong error message when using class definitions in Skylark / BUILD files.
--
MOS_MIGRATED_REVID=105585492
Diffstat (limited to 'src/main/java/com/google/devtools')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/syntax/Parser.java | 19 |
1 files changed, 14 insertions, 5 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 af53ef12fb..36c6b953ed 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 @@ -129,6 +129,14 @@ public class Parser { TokenKind.RPAREN, TokenKind.SLASH); + /** + * Keywords that are forbidden in both Skylark and BUILD parsing modes. + * + * <p>(Mapping: token -> human-readable string description) + */ + private static final ImmutableMap<TokenKind, String> ILLEGAL_BLOCK_KEYWORDS = + ImmutableMap.of(TokenKind.CLASS, "Class definition", TokenKind.TRY, "Try statement"); + private Token token; // current lookahead token private Token pushedToken = null; // used to implement LL(2) @@ -1433,18 +1441,19 @@ public class Parser { return setLocation(new ReturnStatement(expression), start, expression); } - // block ::= ('if' | 'for' | 'class') expr ':' suite + // block ::= ('if' | 'for' | 'class' | 'try' | 'def') expr ':' suite private void skipBlock() { int start = token.left; Token blockToken = token; syncTo(EnumSet.of(TokenKind.COLON, TokenKind.EOF)); // skip over expression or name if (parsingMode != PYTHON) { + String msg = + ILLEGAL_BLOCK_KEYWORDS.containsKey(blockToken.kind) + ? String.format("%ss are not supported.", ILLEGAL_BLOCK_KEYWORDS.get(blockToken.kind)) + : "This is not supported in BUILD files. Move the block to a .bzl file and load it"; reportError( lexer.createLocation(start, token.right), - "syntax error at '" - + blockToken - + "': This is not supported in BUILD files. " - + "Move the block to a .bzl file and load it"); + String.format("syntax error at '%s': %s", blockToken, msg)); } expect(TokenKind.COLON); skipSuite(); |