diff options
-rw-r--r-- | diagnostics/diagnostics.go | 17 | ||||
-rw-r--r-- | testdata/errors/types.go | 2 |
2 files changed, 17 insertions, 2 deletions
diff --git a/diagnostics/diagnostics.go b/diagnostics/diagnostics.go index c793ba4aa..f9261e292 100644 --- a/diagnostics/diagnostics.go +++ b/diagnostics/diagnostics.go @@ -10,6 +10,7 @@ import ( "go/types" "io" "path/filepath" + "sort" "strings" "github.com/tinygo-org/tinygo/builder" @@ -59,6 +60,7 @@ func CreateDiagnostics(err error) ProgramDiagnostic { // Create diagnostics for a single package (though, in practice, it may also be // used for whole-program diagnostics in some cases). func createPackageDiagnostic(err error) PackageDiagnostic { + // Extract diagnostics for this package. var pkgDiag PackageDiagnostic switch err := err.(type) { case loader.Errors: @@ -89,7 +91,20 @@ func createPackageDiagnostic(err error) PackageDiagnostic { default: pkgDiag.Diagnostics = createDiagnostics(err) } - // TODO: sort + + // Sort these diagnostics by file/line/column. + sort.SliceStable(pkgDiag.Diagnostics, func(i, j int) bool { + posI := pkgDiag.Diagnostics[i].Pos + posJ := pkgDiag.Diagnostics[j].Pos + if posI.Filename != posJ.Filename { + return posI.Filename < posJ.Filename + } + if posI.Line != posJ.Line { + return posI.Line < posJ.Line + } + return posI.Column < posJ.Column + }) + return pkgDiag } diff --git a/testdata/errors/types.go b/testdata/errors/types.go index 491e2fe67..6bd949f0c 100644 --- a/testdata/errors/types.go +++ b/testdata/errors/types.go @@ -7,6 +7,6 @@ func main() { } // ERROR: # command-line-arguments +// ERROR: types.go:4:6: a declared and not used // ERROR: types.go:5:6: cannot use "foobar" (untyped string constant) as int value in assignment // ERROR: types.go:6:2: undefined: nonexisting -// ERROR: types.go:4:6: a declared and not used |