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
74 files changed
tree: e275801771e69b1c68109054b755e9faf2e6eeb1
  1. .bazelci/
  2. examples/
  3. scripts/
  4. site/
  5. src/
  6. third_party/
  7. tools/
  8. .bazelrc
  9. .gitattributes
  10. .gitignore
  11. AUTHORS
  12. BUILD
  13. CHANGELOG.md
  14. CODEOWNERS
  15. combine_distfiles.py
  16. combine_distfiles_to_tar.sh
  17. compile.sh
  18. CONTRIBUTING.md
  19. CONTRIBUTORS
  20. distdir.bzl
  21. ISSUE_TEMPLATE.md
  22. LICENSE
  23. README.md
  24. WORKSPACE
README.md

Bazel

{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.

Getting Started

Documentation

Contributing to Bazel

See CONTRIBUTING.md

Build status