module Argon.Results (order, filterResults, export)
where
import Data.Ord (comparing)
import Data.List (sortBy)
import Argon.Formatters
import Argon.Types
sortOn :: Ord b => (a -> b) -> [a] -> [a]
sortOn f =
map snd . sortBy (comparing fst) . map (\x -> let y = f x in y `seq` (y, x))
order :: [ComplexityBlock] -> [ComplexityBlock]
order = sortOn (\(CC ((l, _), f, cc)) -> (cc, l, f))
filterResults :: Config
-> (FilePath, AnalysisResult)
-> (FilePath, AnalysisResult)
filterResults _ (s, Left err) = (s, Left err)
filterResults o (s, Right rs) =
(s, Right $ order [r | r@(CC (_, _, cc)) <- rs, cc >= minCC o])
export :: Config -> [(FilePath, AnalysisResult)] -> String
export opts rs =
case outputMode opts of
BareText -> bareTextFormatter rs
Colored -> coloredTextFormatter rs
JSON -> jsonFormatter rs