module Hadolint.Formatter ( formatCheck , formatError ) where import Control.Monad import Data.Char (isSpace) import Hadolint.Rules import Language.Docker.Syntax import Text.Parsec.Error (Message, ParseError, errorMessages, errorPos, messageString, showErrorMessages) import Text.Parsec.Pos formatError :: ParseError -> String formatError err = posPart ++ stripNewlines msgPart where pos = errorPos err posPart = sourceName pos ++ ":" ++ show (sourceLine pos) ++ ":" ++ show (sourceColumn pos) msgPart = showErrorMessages "or" "unknown parse error" "expecting" "unexpected" "end of input" (errorMessages err) stripNewlines = map (\c -> if c == '\n' then ' ' else c) formatCheck :: RuleCheck -> String formatCheck (RuleCheck metadata source linenumber _) = formatPos source linenumber ++ code metadata ++ " " ++ message metadata formatPos :: Filename -> Linenumber -> String formatPos source linenumber = if linenumber >= 0 then source ++ ":" ++ show linenumber ++ " " else source ++ " "