packages feed

hadolint-1.6.5: src/Hadolint/Formatter/TTY.hs

{-# LANGUAGE NamedFieldPuns #-}
module Hadolint.Formatter.TTY
    ( printResult
    , formatError
    ) where

import Hadolint.Formatter.Format
import Hadolint.Rules
import Language.Docker.Syntax
import Text.Parsec.Error (ParseError, errorPos)
import Text.Parsec.Pos

formatErrors :: Functor t => t ParseError -> t String
formatErrors = fmap formatError

formatError :: ParseError -> String
formatError err = posPart ++ stripNewlines (formatErrorReason err)
  where
    pos = errorPos err
    posPart = sourceName pos ++ ":" ++ show (sourceLine pos) ++ ":" ++ show (sourceColumn pos)

formatChecks :: Functor t => t RuleCheck -> t String
formatChecks = fmap formatCheck
  where
    formatCheck (RuleCheck meta source line _) =
        formatPos source line ++ code meta ++ " " ++ message meta

formatPos :: Filename -> Linenumber -> String
formatPos source line =
    if line >= 0
        then source ++ ":" ++ show line ++ " "
        else source ++ " "

printResult :: Result -> IO ()
printResult Result{errors, checks} = printErrors >> printChecks
  where
    printErrors = mapM_ putStrLn (formatErrors errors)
    printChecks = mapM_ putStrLn (formatChecks checks)