commit | f0890f0d659f6f2afb94d60d5d762c8bcbbbd122 | [log] [tgz] |
---|---|---|
author | Googler <noreply@google.com> | Tue Oct 01 07:28:48 2019 -0700 |
committer | Copybara-Service <copybara-worker@google.com> | Tue Oct 01 07:30:09 2019 -0700 |
tree | 2dbba0b36a17051c79aa9988af492beda1825f04 | |
parent | db2a6e695e87eb42d5148b464458a4ee08c37de8 [diff] |
bazel syntax: break dependence on EventHandler This change removes nearly all uses of EventHandler in the interpreter. (The remaining uses are for events created by the Starlark 'print' statement. A follow-up change will create a dedicated StarlarkThread.PrintHandler.) All parse functions now report errors in one of two ways: 1) by throwing a SyntaxError exception containing a list of events. This approach is used by "all-or-nothing" parse operations related to expressions. Clients may catch the exception, extract the events, and replay them on their handler should they choose. Example: try { Expression expr = Expression.parse(input) ... } catch (SyntaxError ex) { Event.replayEventsOn(handler, ex.errors()); } 2) by recording a list of scan/parse errors in StarlarkFile.errors. The result of parsing a file is both a syntax tree (possibly incomplete), and a list of errors. If parsing is followed by validation, the validator appends its errors to this list. (Validation is now capable of reporting multiple errors per file. ValidationException is gone.) StarlarkFile file = StarlarkFile.parse(input) if (!file.ok()) { Event.replayEventsOn(handler, file.errors()); return; } Or: StarlarkFile file = StarlarkFile.parse(input) if (!file.ok()) { throw new SyntaxError(file.errors()); } Details: - error helpers for Identifiers have moved from Eval to ValidationEnvironment and no longer depend on EvalException. - The EvalException.incompleteAST concept is irrelevant now that clients do not proceed to evaluation if the parser or validation step produced errors. - StarlarkFile: exec + execTopLevelStatement have moved to EvalUtils, and will change further. - replayLexerEvents is gone from the API. The validator (which has access to a StarlarkSemantics) can optionally copy the string escape events into the main error bucket, or ignore them. - StarlarkFile: eliminate parseWithoutImports - Parser: delete dead code parseStatement{,s} - Lexer: delete dead code stringAtLine Numerous fixes were required in the tests, because they are such a muddle of different phases (scan, parse, validate, evaluate) and modes (BUILD vs .bzl vs core Starlark). RELNOTES: Multiple Starlark validation errors are reported in a single pass. PiperOrigin-RevId: 272205103
{Fast, Correct} - Choose two
Build and test software of any size, quickly and reliably.
Speed up your builds and tests: Bazel rebuilds only what is necessary. With advanced local and distributed caching, optimized dependency analysis and parallel execution, you get fast and incremental builds.
One tool, multiple languages: Build and test Java, C++, Android, iOS, Go, and a wide variety of other language platforms. Bazel runs on Windows, macOS, and Linux.
Scalable: Bazel helps you scale your organization, codebase, and continuous integration solution. It handles codebases of any size, in multiple repositories or a huge monorepo.
Extensible to your needs: Easily add support for new languages and platforms with Bazel's familiar extension language. Share and re-use language rules written by the growing Bazel community.
Follow our tutorials:
See CONTRIBUTING.md
Bazel is released in ‘Beta’. See the product roadmap to learn about the path toward a stable 1.0 release.