-
Notifications
You must be signed in to change notification settings - Fork 4.1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
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
- Loading branch information
1 parent
db2a6e6
commit f0890f0
Showing
38 changed files
with
701 additions
and
835 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.