aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools
diff options
context:
space:
mode:
authorGravatar Florian Weikert <fwe@google.com>2015-10-16 09:43:48 +0000
committerGravatar Laszlo Csomor <laszlocsomor@google.com>2015-10-16 12:42:50 +0000
commit1f004e55a03edb3ac69a70a5956915561cb6f9e4 (patch)
tree7a46ab89d2d4c2c53b675de6d8b4025eb89193f9 /src/main/java/com/google/devtools
parentdcd9a53e2699ffa3fbcd736b4df55c347ddf05bd (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.java19
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();