From 5aeda450bd018fa943d6260f9c8dd7d28563fdcc Mon Sep 17 00:00:00 2001
From: Sijawusz Pur Rahnama <sija@sija.pl>
Date: Fri, 6 Dec 2024 20:13:40 +0100
Subject: [PATCH] Sort sources and issues before passing them to the formatter

---
 src/ameba/runner.cr | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/src/ameba/runner.cr b/src/ameba/runner.cr
index 5166de535..d2189b394 100644
--- a/src/ameba/runner.cr
+++ b/src/ameba/runner.cr
@@ -72,7 +72,8 @@ module Ameba
       )
     end
 
-    protected def initialize(rules, @sources, @formatter, @severity, @autocorrect = false, @version = nil)
+    protected def initialize(rules, sources, @formatter, @severity, @autocorrect = false, @version = nil)
+      @sources = sources.sort_by(&.path)
       @rules =
         rules.select { |rule| rule_runnable?(rule, @version) }
       @unneeded_disable_directive_rule =
@@ -159,6 +160,10 @@ module Ameba
 
       File.write(source.path, source.code) unless corrected_issues.empty?
     ensure
+      missing_location = Crystal::Location.new(nil, 0, 0)
+      source.issues.sort_by! do |issue|
+        issue.location || missing_location
+      end
       @formatter.source_finished source
     end