1
0
mirror of https://github.com/golang/go synced 2024-11-19 01:24:39 -07:00
go/internal/lsp/cmd
Albert Teoh 773fe550c1 gopls: return file error if file open fails
The bug manifests itself when a non-existent file is passed in as an
argument to gopls, causing a nil pointer dereference panic. This is due
to an attempt to reference the "mapper" attribute, which is not set if
the file is not found.

The resolution is to check for an informative error that is set on the
file instance after "getFile" is called and return it immediately to the
caller to allow the error to propagate up to the main() function and
print the error to stdout.

Testing:
--------

Non-existent file:
$ gopls -rpc.trace -v check gopls/doesnotexist.go
check: file:///Users/albertteoh/repo/tools/gopls/doesnotexist.go: open /Users/albertteoh/repo/tools/gopls/doesnotexist.go: no such file or directory

Existing go file:
$ gopls -rpc.trace -v check internal/lsp/definition.go
2019/08/03 13:33:00 Info:go/packages.Load
	packages = 2
2019/08/03 13:33:00 Info:go/packages.Load
	package = golang.org/x/tools/internal/lsp
...

Fixes golang/go#33445

Change-Id: Ib56d8a4b7f23f4882b75cf684c5d18a49d27b824
Reviewed-on: https://go-review.googlesource.com/c/tools/+/188857
Run-TryBot: Rebecca Stambler <rstambler@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Ian Cottrell <iancottrell@google.com>
2019-08-05 16:01:13 +00:00
..
check_test.go internal/lsp: stop making background contexts everywhere 2019-07-11 16:38:52 +00:00
check.go internal/lsp/cmd: replace time.Tick with time.After 2019-07-03 17:54:00 +00:00
cmd_race_test.go internal/lsp: extract the common test logic 2019-04-22 16:50:02 +00:00
cmd_test.go internal/lsp: have tests report a different application name to the main gopls binary 2019-07-18 23:01:26 +00:00
cmd.go gopls: return file error if file open fails 2019-08-05 16:01:13 +00:00
definition_test.go internal/lsp: have tests report a different application name to the main gopls binary 2019-07-18 23:01:26 +00:00
definition.go internal/lsp: add shutdown handling 2019-05-15 23:16:32 +00:00
export_test.go internal/lsp: refactor query definition test to allow adding a new test 2019-03-18 20:06:54 +00:00
format_test.go internal/lsp: have tests report a different application name to the main gopls binary 2019-07-18 23:01:26 +00:00
format.go internal/span: change URI.Filename so it just returns the filename 2019-06-10 21:39:43 +00:00
info.go internal/lsp: move PrintVersionInfo to the debug package 2019-06-03 15:29:06 +00:00
query.go internal/lsp: fix query cmd usage 2019-04-22 18:06:03 +00:00
serve.go internal/lsp: extra telemetry tagging of files and packages 2019-07-31 19:44:43 +00:00