commit | 22096afd25a8a45815464bf297cacfefdf0caa23 | [log] [tgz] |
---|---|---|
author | adonovan <adonovan@google.com> | Wed Jan 08 07:09:52 2020 -0800 |
committer | Copybara-Service <copybara-worker@google.com> | Wed Jan 08 07:10:37 2020 -0800 |
tree | e275801771e69b1c68109054b755e9faf2e6eeb1 | |
parent | 41ec5a28fb30a8d6c5c60194c4bb29528352cf78 [diff] |
bazel events: simplify Location and break vfs dependency This change simplifies Location to a triple, (String filename, int line, int column) denoting a point, not a span, of Starlark source code. Either of column or line+column may be zero => undefined. Locations have the obvious order and equivalence relations. (Previously these were complicated by the hidden offsets, leading to confusing errors like "foo:1 != foo:1".) Logically, errors are associated with a position, not a span, and the use of spans leads to suboptimal positions, such as the beginning or entirety of a().b[x].c(), when what matters is the call paren after c. By contrast, Nodes have spans. The Node API now exposes start and end locations, and a follow-up change will develop this so that subclasses expose locations for key tokens, such as the call paren in the example above. Locations will be created on demand; the syntax tree will record only file offsets. Locations no longer have file offsets. Nodes do, though. The only client that needs offsets is Kythe analyzer, but it only needs them only for Nodes.) Various subclasses of Location were deleted. LexerLocation remains for now, as it but will be deleted in a follow-up, at which point Location will be a simple triple class. File names are now non-null Strings. lib.syntax and lib.events no longer depend on PathFragment or lib.vfs. Various junk print methods were inlined into their sole clients. The remaining print method was merged into toString and simplified. A later change will move Location into lib.syntax. PiperOrigin-RevId: 288689472
{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