packages feed

hadolint-2.2.0: src/Hadolint/Rule/DL3059.hs

module Hadolint.Rule.DL3059 (rule) where

import Hadolint.Rule
import Language.Docker.Syntax


data Acc
  = Acc RunFlags
  | Empty
  deriving (Eq, Show)

rule :: Rule args
rule = customRule check (emptyState Empty)
  where
    code = "DL3059"
    severity = DLInfoC
    message = "Multiple consecutive `RUN` instructions. Consider consolidation."

    check line st (Run (RunArgs _ flags))
      | state st == Acc flags = st |> addFail CheckFailure {..}
      | otherwise = st |> modify (remember flags)
    check _ st _ = st |> modify reset
{-# INLINEABLE rule #-}

remember :: RunFlags -> Acc -> Acc
remember flags _ = Acc flags

reset :: Acc -> Acc
reset _ = Empty