module Argon.Types (ComplexityBlock(CC), AnalysisResult, Config(..)
, OutputMode(..))
where
import Data.Aeson
newtype ComplexityBlock = CC (Int, Int, String, Int)
deriving (Show, Eq, Ord)
instance ToJSON ComplexityBlock where
toJSON (CC (l, c, func, cc)) = object [ "lineno" .= l
, "col" .= c
, "name" .= func
, "complexity" .= cc
]
type AnalysisResult = Either String [ComplexityBlock]
instance ToJSON (FilePath, AnalysisResult) where
toJSON (p, Left err) = object [ "path" .= p
, "type" .= ("error" :: String)
, "message" .= err
]
toJSON (p, Right rs) = object [ "path" .= p
, "type" .= ("result" :: String)
, "blocks" .= rs
]
data Config = Config {
minCC :: Int
, outputMode :: OutputMode
}
data OutputMode = BareText
| Colored
| JSON