stack-2.11.1: src/Stack/Types/Runner.hs
{-# LANGUAGE NoImplicitPrelude #-}
module Stack.Types.Runner
( Runner (..)
, HasRunner (..)
, globalOptsL
, stackYamlLocL
, lockFileBehaviorL
, terminalL
, reExecL
, rslInLogL
) where
import RIO.Process ( HasProcessContext (..), ProcessContext )
import Stack.Prelude
import Stack.Types.GlobalOpts ( GlobalOpts (..) )
import Stack.Types.LockFileBehavior ( LockFileBehavior )
import Stack.Types.StackYamlLoc ( StackYamlLoc )
-- | The base environment that almost everything in Stack runs in,
-- based off of parsing command line options in 'GlobalOpts'. Provides
-- logging and process execution.
data Runner = Runner
{ runnerGlobalOpts :: !GlobalOpts
, runnerUseColor :: !Bool
, runnerLogFunc :: !LogFunc
, runnerTermWidth :: !Int
, runnerProcessContext :: !ProcessContext
}
instance HasLogFunc Runner where
logFuncL = lens runnerLogFunc (\x y -> x { runnerLogFunc = y })
instance HasProcessContext Runner where
processContextL =
lens runnerProcessContext (\x y -> x { runnerProcessContext = y })
instance HasRunner Runner where
runnerL = id
instance HasStylesUpdate Runner where
stylesUpdateL = globalOptsL.
lens globalStylesUpdate (\x y -> x { globalStylesUpdate = y })
instance HasTerm Runner where
useColorL = lens runnerUseColor (\x y -> x { runnerUseColor = y })
termWidthL = lens runnerTermWidth (\x y -> x { runnerTermWidth = y })
-- | Class for environment values which have a 'Runner'.
class (HasProcessContext env, HasLogFunc env) => HasRunner env where
runnerL :: Lens' env Runner
stackYamlLocL :: HasRunner env => Lens' env StackYamlLoc
stackYamlLocL =
globalOptsL.lens globalStackYaml (\x y -> x { globalStackYaml = y })
lockFileBehaviorL :: HasRunner env => SimpleGetter env LockFileBehavior
lockFileBehaviorL = globalOptsL.to globalLockFileBehavior
globalOptsL :: HasRunner env => Lens' env GlobalOpts
globalOptsL = runnerL.lens runnerGlobalOpts (\x y -> x { runnerGlobalOpts = y })
-- | See 'globalTerminal'
terminalL :: HasRunner env => Lens' env Bool
terminalL = globalOptsL.lens globalTerminal (\x y -> x { globalTerminal = y })
-- | See 'globalReExecVersion'
reExecL :: HasRunner env => SimpleGetter env Bool
reExecL = globalOptsL.to (isJust . globalReExecVersion)
rslInLogL :: HasRunner env => SimpleGetter env Bool
rslInLogL = globalOptsL.to globalRSLInLog