diff options
author | 2017-09-01 17:49:23 +0200 | |
---|---|---|
committer | 2017-09-01 20:08:25 +0200 | |
commit | 17d975ee226c59c164ecdab9c897a35d9604e192 (patch) | |
tree | 16bd9374019b499a441847c8137f7448e94376f2 /src/main/java/com/google/devtools/build | |
parent | 9bd280ba663557a44c0177327cf668ff813a397d (diff) |
Remove the Dialect type from the Parser.
Let's use the same parser. Dialect differences are checked in a separate
validation pass.
RELNOTES: None.
PiperOrigin-RevId: 167280201
Diffstat (limited to 'src/main/java/com/google/devtools/build')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/syntax/BuildFileAST.java | 51 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/syntax/Parser.java | 8 |
2 files changed, 29 insertions, 30 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/BuildFileAST.java b/src/main/java/com/google/devtools/build/lib/syntax/BuildFileAST.java index 2ba51d7234..2f8b36b7eb 100644 --- a/src/main/java/com/google/devtools/build/lib/syntax/BuildFileAST.java +++ b/src/main/java/com/google/devtools/build/lib/syntax/BuildFileAST.java @@ -13,10 +13,6 @@ // limitations under the License. package com.google.devtools.build.lib.syntax; -import static com.google.devtools.build.lib.syntax.Parser.Dialect.BUILD; -import static com.google.devtools.build.lib.syntax.Parser.Dialect.SKYLARK; - -import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Joiner; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableList; @@ -124,8 +120,7 @@ public class BuildFileAST extends ASTNode { * Collects all load statements. Returns a pair with a boolean saying if there were errors and the * imports that could be resolved. */ - @VisibleForTesting - static Pair<Boolean, ImmutableList<SkylarkImport>> fetchLoads( + private static Pair<Boolean, ImmutableList<SkylarkImport>> fetchLoads( List<Statement> statements, EventHandler eventHandler) { ImmutableList.Builder<SkylarkImport> imports = ImmutableList.builder(); boolean error = false; @@ -272,13 +267,15 @@ public class BuildFileAST extends ASTNode { public static BuildFileAST parseBuildFile(ParserInputSource input, List<Statement> preludeStatements, EventHandler eventHandler) { - Parser.ParseResult result = Parser.parseFile(input, eventHandler, BUILD); - return create(preludeStatements, result, /*contentHashCode=*/ null, eventHandler); + Parser.ParseResult result = Parser.parseFile(input, eventHandler); + return create(preludeStatements, result, /*contentHashCode=*/ null, eventHandler) + .validateBuildFile(eventHandler); } public static BuildFileAST parseBuildFile(ParserInputSource input, EventHandler eventHandler) { - Parser.ParseResult result = Parser.parseFile(input, eventHandler, BUILD); - return create(ImmutableList.<Statement>of(), result, /*contentHashCode=*/ null, eventHandler); + Parser.ParseResult result = Parser.parseFile(input, eventHandler); + return create(ImmutableList.<Statement>of(), result, /*contentHashCode=*/ null, eventHandler) + .validateBuildFile(eventHandler); } /** @@ -295,14 +292,14 @@ public class BuildFileAST extends ASTNode { public static BuildFileAST parseSkylarkFile(Path file, long fileSize, EventHandler eventHandler) throws IOException { ParserInputSource input = ParserInputSource.create(file, fileSize); - Parser.ParseResult result = Parser.parseFile(input, eventHandler, SKYLARK); + Parser.ParseResult result = Parser.parseFile(input, eventHandler); return create( ImmutableList.of(), result, HashCode.fromBytes(file.getDigest()).toString(), eventHandler); } public static BuildFileAST parseSkylarkFile(ParserInputSource input, EventHandler eventHandler) { - Parser.ParseResult result = Parser.parseFile(input, eventHandler, SKYLARK); + Parser.ParseResult result = Parser.parseFile(input, eventHandler); return create(ImmutableList.<Statement>of(), result, /*contentHashCode=*/ null, eventHandler); } @@ -315,7 +312,7 @@ public class BuildFileAST extends ASTNode { */ public static BuildFileAST parseSkylarkFileWithoutImports( ParserInputSource input, EventHandler eventHandler) { - ParseResult result = Parser.parseFile(input, eventHandler, SKYLARK); + ParseResult result = Parser.parseFile(input, eventHandler); return new BuildFileAST( ImmutableList.<Statement>builder() .addAll(ImmutableList.<Statement>of()) @@ -341,20 +338,28 @@ public class BuildFileAST extends ASTNode { return new BuildFileAST(statements, true, contentHashCode, getLocation(), comments, imports); } - private static BuildFileAST parseString( - Parser.Dialect dialect, EventHandler eventHandler, String... content) { + /** + * Run static checks for a BUILD file. + * + * @return a new AST (or the same), with the containsErrors flag updated. + */ + public BuildFileAST validateBuildFile(EventHandler eventHandler) { + boolean valid = ValidationEnvironment.checkBuildSyntax(statements, eventHandler); + if (valid || containsErrors) { + return this; + } + return new BuildFileAST(statements, true, contentHashCode, getLocation(), comments, imports); + } + + public static BuildFileAST parseString(EventHandler eventHandler, String... content) { String str = Joiner.on("\n").join(content); ParserInputSource input = ParserInputSource.create(str, PathFragment.EMPTY_FRAGMENT); - Parser.ParseResult result = Parser.parseFile(input, eventHandler, dialect); + Parser.ParseResult result = Parser.parseFile(input, eventHandler); return create(ImmutableList.of(), result, null, eventHandler); } public static BuildFileAST parseBuildString(EventHandler eventHandler, String... content) { - return parseString(BUILD, eventHandler, content); - } - - public static BuildFileAST parseSkylarkString(EventHandler eventHandler, String... content) { - return parseString(SKYLARK, eventHandler, content); + return parseString(eventHandler, content).validateBuildFile(eventHandler); } /** @@ -363,7 +368,7 @@ public class BuildFileAST extends ASTNode { * @return true if the input file is syntactically valid */ public static boolean checkSyntax(ParserInputSource input, EventHandler eventHandler) { - Parser.ParseResult result = Parser.parseFile(input, eventHandler, BUILD); + Parser.ParseResult result = Parser.parseFile(input, eventHandler); return !result.containsErrors; } @@ -402,7 +407,7 @@ public class BuildFileAST extends ASTNode { */ public static BuildFileAST parseAndValidateSkylarkString(Environment env, String[] input) throws EvalException { - BuildFileAST ast = parseSkylarkString(env.getEventHandler(), input); + BuildFileAST ast = parseString(env.getEventHandler(), input); ValidationEnvironment.validateAst(env, ast.getStatements()); return ast; } 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 e948b84884..6edf73744f 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 @@ -201,20 +201,14 @@ public class Parser { * * @param input the input to parse * @param eventHandler a reporter for parsing errors - * @param dialect may restrict the parser to Build-language features * @see BuildFileAST#parseBuildString * @see BuildFileAST#parseSkylarkString */ - public static ParseResult parseFile( - ParserInputSource input, EventHandler eventHandler, Dialect dialect) { + public static ParseResult parseFile(ParserInputSource input, EventHandler eventHandler) { Lexer lexer = new Lexer(input, eventHandler); Parser parser = new Parser(lexer, eventHandler); List<Statement> statements = parser.parseFileInput(); boolean errors = parser.errorsCount > 0 || lexer.containsErrors(); - // TODO(laurentlb): Remove dialect argument. - if (dialect == Dialect.BUILD) { - errors |= !ValidationEnvironment.checkBuildSyntax(statements, eventHandler); - } return new ParseResult( statements, parser.comments, locationFromStatements(lexer, statements), errors); } |