aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--diagnostics/diagnostics.go17
-rw-r--r--testdata/errors/types.go2
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