    -- | Functions for initialising error message printing configuration from the
    -- GHC session flags.
    module GHC.Driver.Config.Diagnostic
      ( initDiagOpts
      , initPrintConfig
      , initPsMessageOpts
      , initDsMessageOpts
      , initTcMessageOpts
      , initDriverMessageOpts
      , initIfaceMessageOpts
      )
    where

    import GHC.Driver.Flags
    import GHC.Driver.DynFlags
    import GHC.Prelude

    import GHC.Utils.Outputable
    import GHC.Utils.Error (DiagOpts (..))
    import GHC.Driver.Errors.Types (GhcMessage, GhcMessageOpts (..), PsMessage, DriverMessage, DriverMessageOpts (..), checkBuildingCabalPackage)
    import GHC.Driver.Errors.Ppr ()
    import GHC.Tc.Errors.Types
    import GHC.HsToCore.Errors.Types
    import GHC.Types.Error
    import GHC.Iface.Errors.Types

    -- | Initialise the general configuration for printing diagnostic messages
    -- For example, this configuration controls things like whether warnings are
    -- treated like errors.
    initDiagOpts :: DynFlags -> DiagOpts
    initDiagOpts :: DynFlags -> DiagOpts
    initDiagOpts DynFlags
    dflags = DiagOpts
      { diag_warning_flags :: EnumSet WarningFlag
    diag_warning_flags       = DynFlags -> EnumSet WarningFlag
    warningFlags DynFlags
    dflags
      , diag_fatal_warning_flags :: EnumSet WarningFlag
    diag_fatal_warning_flags = DynFlags -> EnumSet WarningFlag
    fatalWarningFlags DynFlags
    dflags
      , diag_custom_warning_categories :: WarningCategorySet
    diag_custom_warning_categories = DynFlags -> WarningCategorySet
    customWarningCategories DynFlags
    dflags
      , diag_fatal_custom_warning_categories :: WarningCategorySet
    diag_fatal_custom_warning_categories = DynFlags -> WarningCategorySet
    fatalCustomWarningCategories DynFlags
    dflags
      , diag_warn_is_error :: Bool
    diag_warn_is_error       = GeneralFlag -> DynFlags -> Bool
    gopt GeneralFlag
    Opt_WarnIsError DynFlags
    dflags
      , diag_reverse_errors :: Bool
    diag_reverse_errors      = DynFlags -> Bool
    reverseErrors DynFlags
    dflags
      , diag_max_errors :: Maybe Int
    diag_max_errors          = DynFlags -> Maybe Int
    maxErrors DynFlags
    dflags
      , diag_ppr_ctx :: SDocContext
    diag_ppr_ctx             = DynFlags -> PprStyle -> SDocContext
    initSDocContext DynFlags
    dflags PprStyle
    defaultErrStyle
      }

    -- | Initialise the configuration for printing specific diagnostic messages
    initPrintConfig :: DynFlags -> DiagnosticOpts GhcMessage
    initPrintConfig :: DynFlags -> DiagnosticOpts GhcMessage
    initPrintConfig DynFlags
    dflags =
      GhcMessageOpts { psMessageOpts :: DiagnosticOpts PsMessage
    psMessageOpts = DynFlags -> DiagnosticOpts PsMessage
    initPsMessageOpts DynFlags
    dflags
                     , tcMessageOpts :: DiagnosticOpts TcRnMessage
    tcMessageOpts = DynFlags -> DiagnosticOpts TcRnMessage
    initTcMessageOpts DynFlags
    dflags
                     , dsMessageOpts :: DiagnosticOpts DsMessage
    dsMessageOpts = DynFlags -> DiagnosticOpts DsMessage
    initDsMessageOpts DynFlags
    dflags
                     , driverMessageOpts :: DiagnosticOpts DriverMessage
    driverMessageOpts= DynFlags -> DiagnosticOpts DriverMessage
    initDriverMessageOpts DynFlags
    dflags }

    initPsMessageOpts :: DynFlags -> DiagnosticOpts PsMessage
    initPsMessageOpts :: DynFlags -> DiagnosticOpts PsMessage
    initPsMessageOpts DynFlags
    _ = NoDiagnosticOpts
    DiagnosticOpts PsMessage
    NoDiagnosticOpts

    initTcMessageOpts :: DynFlags -> DiagnosticOpts TcRnMessage
    initTcMessageOpts :: DynFlags -> DiagnosticOpts TcRnMessage
    initTcMessageOpts DynFlags
    dflags =
      TcRnMessageOpts { tcOptsShowContext :: Bool
    tcOptsShowContext    = GeneralFlag -> DynFlags -> Bool
    gopt GeneralFlag
    Opt_ShowErrorContext DynFlags
    dflags
                      , tcOptsIfaceOpts :: IfaceMessageOpts
    tcOptsIfaceOpts      = DynFlags -> DiagnosticOpts IfaceMessage
    initIfaceMessageOpts DynFlags
    dflags }

    initDsMessageOpts :: DynFlags -> DiagnosticOpts DsMessage
    initDsMessageOpts :: DynFlags -> DiagnosticOpts DsMessage
    initDsMessageOpts DynFlags
    _ = NoDiagnosticOpts
    DiagnosticOpts DsMessage
    NoDiagnosticOpts

    initIfaceMessageOpts :: DynFlags -> DiagnosticOpts IfaceMessage
    initIfaceMessageOpts :: DynFlags -> DiagnosticOpts IfaceMessage
    initIfaceMessageOpts DynFlags
    dflags =
                      IfaceMessageOpts { ifaceShowTriedFiles :: Bool
    ifaceShowTriedFiles = DynFlags -> Int
    verbosity DynFlags
    dflags Int -> Int -> Bool
    forall a. Ord a => a -> a -> Bool
    >= Int
    3
                                       , ifaceBuildingCabalPackage :: BuildingCabalPackage
    ifaceBuildingCabalPackage = DynFlags -> BuildingCabalPackage
    checkBuildingCabalPackage DynFlags
    dflags }

    initDriverMessageOpts :: DynFlags -> DiagnosticOpts DriverMessage
    initDriverMessageOpts :: DynFlags -> DiagnosticOpts DriverMessage
    initDriverMessageOpts DynFlags
    dflags = DiagnosticOpts PsMessage
    -> DiagnosticOpts IfaceMessage -> DriverMessageOpts
    DriverMessageOpts (DynFlags -> DiagnosticOpts PsMessage
    initPsMessageOpts DynFlags
    dflags) (DynFlags -> DiagnosticOpts IfaceMessage
    initIfaceMessageOpts DynFlags
    dflags)