-- | 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 () -- Diagnostic instances 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 dflags = DiagOpts { diag_warning_flags = warningFlags dflags , diag_fatal_warning_flags = fatalWarningFlags dflags , diag_custom_warning_categories = customWarningCategories dflags , diag_fatal_custom_warning_categories = fatalCustomWarningCategories dflags , diag_warn_is_error = gopt Opt_WarnIsError dflags , diag_reverse_errors = reverseErrors dflags , diag_max_errors = maxErrors dflags , diag_ppr_ctx = initSDocContext dflags defaultErrStyle } -- | Initialise the configuration for printing specific diagnostic messages initPrintConfig :: DynFlags -> DiagnosticOpts GhcMessage initPrintConfig dflags = GhcMessageOpts { psMessageOpts = initPsMessageOpts dflags , tcMessageOpts = initTcMessageOpts dflags , dsMessageOpts = initDsMessageOpts dflags , driverMessageOpts= initDriverMessageOpts dflags } initPsMessageOpts :: DynFlags -> DiagnosticOpts PsMessage initPsMessageOpts _ = NoDiagnosticOpts initTcMessageOpts :: DynFlags -> DiagnosticOpts TcRnMessage initTcMessageOpts dflags = TcRnMessageOpts { tcOptsShowContext = gopt Opt_ShowErrorContext dflags , tcOptsIfaceOpts = initIfaceMessageOpts dflags } initDsMessageOpts :: DynFlags -> DiagnosticOpts DsMessage initDsMessageOpts _ = NoDiagnosticOpts initIfaceMessageOpts :: DynFlags -> DiagnosticOpts IfaceMessage initIfaceMessageOpts dflags = IfaceMessageOpts { ifaceShowTriedFiles = verbosity dflags >= 3 , ifaceBuildingCabalPackage = checkBuildingCabalPackage dflags } initDriverMessageOpts :: DynFlags -> DiagnosticOpts DriverMessage initDriverMessageOpts dflags = DriverMessageOpts (initPsMessageOpts dflags) (initIfaceMessageOpts dflags)