Commit 70a04f68 authored by Robert Griesemer's avatar Robert Griesemer

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/93815Reviewed-by: default avatarAlan Donovan <adonovan@google.com>
parent 8f9cf552
......@@ -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)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment