Skip to content

Commit fd628d5

Browse files
committed
Add Ord instance for Dupes, sort on dupesNormLocPath
1 parent be3dea6 commit fd628d5

File tree

1 file changed

+13
-8
lines changed
  • cabal-install/src/Distribution/Client/ProjectConfig

1 file changed

+13
-8
lines changed

cabal-install/src/Distribution/Client/ProjectConfig/Legacy.hs

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,7 @@ import Distribution.Utils.Path hiding
199199

200200
import qualified Data.ByteString.Char8 as BS
201201
import Data.Functor ((<&>))
202+
import Data.List (sortOn)
202203
import qualified Data.Map as Map
203204
import qualified Data.Set as Set
204205
import Network.URI (URI (..), nullURIAuth, parseURI)
@@ -207,13 +208,12 @@ import System.FilePath (isAbsolute, isPathSeparator, makeValid, splitFileName, (
207208
import Text.PrettyPrint
208209
( Doc
209210
, render
210-
, ($+$)
211-
, vcat
212-
, text
213211
, semi
212+
, text
213+
, vcat
214+
, ($+$)
214215
)
215-
import qualified Text.PrettyPrint as Disp (empty, int, text, render)
216-
import Data.List (sortOn)
216+
import qualified Text.PrettyPrint as Disp (empty, int, render, text)
217217

218218
------------------------------------------------------------------
219219
-- Handle extended project config files with conditionals and imports.
@@ -280,13 +280,18 @@ data Dupes = Dupes
280280
, dupesNormLocPath :: ProjectConfigPath
281281
, dupesSeenImportsBy :: [(FilePath, ProjectConfigPath)]
282282
}
283+
deriving (Eq)
284+
285+
instance Ord Dupes where
286+
compare = compare `on` length . dupesSeenImportsBy
283287

284288
type DupesMap = Map FilePath [Dupes]
285289

286290
dupesMsg :: (FilePath, [Dupes]) -> Doc
287-
dupesMsg (duplicate, ds@(take 1 . sortOn dupesUniqueImport -> dupes)) = vcat $
288-
((text "Warning:" <+> Disp.int (length ds) <+> text "imports of" <+> text duplicate) <> semi)
289-
: ((\Dupes{..} -> duplicateImportMsg Disp.empty dupesUniqueImport dupesNormLocPath dupesSeenImportsBy) <$> dupes)
291+
dupesMsg (duplicate, ds@(take 1 . sortOn dupesNormLocPath -> dupes)) =
292+
vcat $
293+
((text "Warning:" <+> Disp.int (length ds) <+> text "imports of" <+> text duplicate) <> semi)
294+
: ((\Dupes{..} -> duplicateImportMsg Disp.empty dupesUniqueImport dupesNormLocPath dupesSeenImportsBy) <$> dupes)
290295

291296
parseProjectSkeleton
292297
:: FilePath

0 commit comments

Comments
 (0)