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) { ...@@ -209,14 +209,30 @@ func parseFiles(dir string, filenames []string) ([]*ast.File, error) {
} }
wg.Wait() 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 { for _, err := range errors {
if err != nil { 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) { func parseDir(dir string) ([]*ast.File, error) {
...@@ -318,7 +334,7 @@ func main() { ...@@ -318,7 +334,7 @@ func main() {
files, err := getPkgFiles(flag.Args()) files, err := getPkgFiles(flag.Args())
if err != nil { if err != nil {
report(err) report(err)
os.Exit(2) // ok to continue (files may be empty, but not nil)
} }
checkPkgFiles(files) 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