module Hadolint.Rule.DL3059 (rule) where import Hadolint.Rule import Language.Docker.Syntax data Acc = Acc RunFlags | Empty deriving (Acc -> Acc -> Bool (Acc -> Acc -> Bool) -> (Acc -> Acc -> Bool) -> Eq Acc forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a /= :: Acc -> Acc -> Bool $c/= :: Acc -> Acc -> Bool == :: Acc -> Acc -> Bool $c== :: Acc -> Acc -> Bool Eq, Int -> Acc -> ShowS [Acc] -> ShowS Acc -> String (Int -> Acc -> ShowS) -> (Acc -> String) -> ([Acc] -> ShowS) -> Show Acc forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a showList :: [Acc] -> ShowS $cshowList :: [Acc] -> ShowS show :: Acc -> String $cshow :: Acc -> String showsPrec :: Int -> Acc -> ShowS $cshowsPrec :: Int -> Acc -> ShowS Show) rule :: Rule args rule :: Rule args rule = (Int -> State Acc -> Instruction args -> State Acc) -> State Acc -> Rule args forall a args. (Int -> State a -> Instruction args -> State a) -> State a -> Rule args customRule Int -> State Acc -> Instruction args -> State Acc forall args. Int -> State Acc -> Instruction args -> State Acc check (Acc -> State Acc forall a. a -> State a emptyState Acc Empty) where code :: RuleCode code = RuleCode "DL3059" severity :: DLSeverity severity = DLSeverity DLInfoC message :: Text message = Text "Multiple consecutive `RUN` instructions. Consider consolidation." check :: Int -> State Acc -> Instruction args -> State Acc check Int line State Acc st (Run (RunArgs Arguments args _ RunFlags flags)) | State Acc -> Acc forall a. State a -> a state State Acc st Acc -> Acc -> Bool forall a. Eq a => a -> a -> Bool == RunFlags -> Acc Acc RunFlags flags = State Acc st State Acc -> (State Acc -> State Acc) -> State Acc forall a b. a -> (a -> b) -> b |> CheckFailure -> State Acc -> State Acc forall a. CheckFailure -> State a -> State a addFail CheckFailure :: RuleCode -> DLSeverity -> Text -> Int -> CheckFailure CheckFailure {Int Text RuleCode DLSeverity line :: Int message :: Text severity :: DLSeverity code :: RuleCode line :: Int message :: Text severity :: DLSeverity code :: RuleCode ..} | Bool otherwise = State Acc st State Acc -> (State Acc -> State Acc) -> State Acc forall a b. a -> (a -> b) -> b |> (Acc -> Acc) -> State Acc -> State Acc forall a. (a -> a) -> State a -> State a modify (RunFlags -> Acc -> Acc remember RunFlags flags) check Int _ State Acc st Instruction args _ = State Acc st State Acc -> (State Acc -> State Acc) -> State Acc forall a b. a -> (a -> b) -> b |> (Acc -> Acc) -> State Acc -> State Acc forall a. (a -> a) -> State a -> State a modify Acc -> Acc reset {-# INLINEABLE rule #-} remember :: RunFlags -> Acc -> Acc remember :: RunFlags -> Acc -> Acc remember RunFlags flags Acc _ = RunFlags -> Acc Acc RunFlags flags reset :: Acc -> Acc reset :: Acc -> Acc reset Acc _ = Acc Empty