{-# LANGUAGE LambdaCase #-} {-# LANGUAGE NamedFieldPuns #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE QuasiQuotes #-} module Krank.Formatter ( showViolation, ) where import Data.Text (Text) import Krank.Types import PyF (fmt) import System.Console.Pretty import Utils.Display (indent) showViolation :: Bool -> Violation -> Text showViolation useColors Violation {checker, location, level, message} = [fmt| {showSourcePos location}: {showViolationLevel useColors level}: {indent 2 checker} {indent 4 message} |] showViolationLevel :: Bool -> ViolationLevel -> String showViolationLevel enableColor = \case Info -> colorized Green "info" Warning -> colorized Magenta "warning" Error -> colorized Red "error" where colorized c | enableColor = style Bold . color c | otherwise = id showSourcePos :: SourcePos -> String showSourcePos (SourcePos path line column) = [fmt|{path}:{line}:{column}|]