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:
parent
8f9cf5525e
commit
70a04f6880
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user