Sort errors reported by line number
diff --git a/gen/src/error.rs b/gen/src/error.rs
index 2e8ecc4..b91c166 100644
--- a/gen/src/error.rs
+++ b/gen/src/error.rs
@@ -57,6 +57,7 @@
 pub(super) fn format_err(path: &Path, source: &str, error: Error) -> ! {
     match error {
         Error::Syn(syn_error) => {
+            let syn_error = sort_syn_errors(syn_error);
             let writer = StandardStream::stderr(ColorChoice::Auto);
             let ref mut stderr = writer.lock();
             for error in syn_error {
@@ -69,6 +70,15 @@
     process::exit(1);
 }
 
+fn sort_syn_errors(error: syn::Error) -> Vec<syn::Error> {
+    let mut errors: Vec<_> = error.into_iter().collect();
+    errors.sort_by_key(|e| {
+        let start = e.span().start();
+        (start.line, start.column)
+    });
+    errors
+}
+
 fn display_syn_error(stderr: &mut dyn WriteColor, path: &Path, source: &str, error: syn::Error) {
     let span = error.span();
     let start = span.start();