1
0
mirror of https://github.com/golang/go synced 2024-11-19 15:05:00 -07:00

go/types: make gotype continue after syntax errors

This avoids odd behavior where sometimes a lot of useful
errors are not reported simply because of a small syntax
error.

Tested manually with non-existing files. (We cannot easily
add an automatic test because this is a stand-alone binary
in this directory that must be built manually.)

Fixes #23593.

Change-Id: Iff90f95413bed7d1023fa0a5c9eb0414144428a9
Reviewed-on: https://go-review.googlesource.com/93815
Reviewed-by: Alan Donovan <adonovan@google.com>
This commit is contained in:
Robert Griesemer 2018-02-13 16:37:51 -08:00
parent 8f9cf5525e
commit 70a04f6880

View File

@ -209,14 +209,30 @@ func parseFiles(dir string, filenames []string) ([]*ast.File, error) {
}
wg.Wait()
// if there are errors, return the first one for deterministic results
// If there are errors, return the first one for deterministic results.
var first error
for _, err := range errors {
if err != nil {
return nil, err
first = err
// If we have an error, some files may be nil.
// Remove them. (The go/parser always returns
// a possibly partial AST even in the presence
// of errors, except if the file doesn't exist
// in the first place, in which case it cannot
// matter.)
i := 0
for _, f := range files {
if f != nil {
files[i] = f
i++
}
}
files = files[:i]
break
}
}
return files, nil
return files, first
}
func parseDir(dir string) ([]*ast.File, error) {
@ -318,7 +334,7 @@ func main() {
files, err := getPkgFiles(flag.Args())
if err != nil {
report(err)
os.Exit(2)
// ok to continue (files may be empty, but not nil)
}
checkPkgFiles(files)