]> Cypherpunks.ru repositories - gostls13.git/commit
go/types: add unexported start and end positions to type checker errors
authorRob Findley <rfindley@google.com>
Tue, 27 Oct 2020 02:44:54 +0000 (22:44 -0400)
committerRobert Findley <rfindley@google.com>
Thu, 5 Nov 2020 20:35:00 +0000 (20:35 +0000)
commit2822bae168fa5d7b14c87d2b2ee22cb85fc90cce
tree7e60ef1f9cae0a3dee654b55ef012c9d49f628bb
parentd508d86cf12a3c4ee139d31f5f5c9e5e53566ecc
go/types: add unexported start and end positions to type checker errors

Tools often need to associate errors not with a single position, but
with a span of source code. For example, gopls currently estimates
diagnostic spans using heuristics to expand the positions reported by
the type checker to surrounding source code. Unfortunately this is often
inaccurate.

This CL lays the groundwork to solve this within go/types by adding a
start and end position to type checker errors. This is an experimental
API, both because we are uncertain of the ideal representation for these
spans and because their initial positioning is naive. In most cases this
CL simply expands errors to the surrounding ast.Node being typechecked,
if available. This might not be the best error span to present to the
user. For these reasons the API is unexported -- gopls can read these
positions using reflection, allowing us to gain experience and improve
them during the next development cycle.

For golang/go#42290

Change-Id: I39a04d70ea2bb2134b4d4c937f32b2ddb4456430
Reviewed-on: https://go-review.googlesource.com/c/go/+/265250
Run-TryBot: Robert Findley <rfindley@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Robert Griesemer <gri@golang.org>
Trust: Robert Findley <rfindley@google.com>
Trust: Robert Griesemer <gri@golang.org>
15 files changed:
src/go/types/api.go
src/go/types/assignments.go
src/go/types/builtins.go
src/go/types/call.go
src/go/types/check.go
src/go/types/conversions.go
src/go/types/decl.go
src/go/types/errors.go
src/go/types/expr.go
src/go/types/initorder.go
src/go/types/labels.go
src/go/types/operand.go
src/go/types/resolver.go
src/go/types/stmt.go
src/go/types/typexpr.go