ghc-9.8.0.20230929: The GHC API
Safe HaskellNone
LanguageHaskell2010

GHC.Utils.Logger

Description

Logger

The Logger is an configurable entity that is used by the compiler to output messages on the console (stdout, stderr) and in dump files.

The behaviour of default Logger returned by initLogger can be modified with hooks. The compiler itself uses hooks in multithreaded code (--make) and it is also probably used by ghc-api users (IDEs, etc.).

In addition to hooks, the Logger supports LogFlags: basically a subset of the command-line flags that control the logger behaviour at a higher level than hooks.

  1. Hooks are used to define how to generate a infowarningerror/dump messages
  2. LogFlags are used to decide when and how to generate messages
Synopsis

Documentation

class HasLogger (m :: Type -> Type) where Source #

Methods

getLogger :: m Logger Source #

Instances

Instances details
HasLogger LlvmM Source # 
Instance details

Defined in GHC.CmmToLlvm.Base

HasLogger CoreM Source # 
Instance details

Defined in GHC.Core.Opt.Monad

HasLogger SimplM Source # 
Instance details

Defined in GHC.Core.Opt.Simplify.Monad

HasLogger Hsc Source # 
Instance details

Defined in GHC.Driver.Env.Types

HasLogger Ghc Source # 
Instance details

Defined in GHC.Driver.Monad

ContainsLogger env => HasLogger (IOEnv env) Source # 
Instance details

Defined in GHC.Data.IOEnv

Methods

getLogger :: IOEnv env Logger Source #

MonadIO m => HasLogger (GhcT m) Source # 
Instance details

Defined in GHC.Driver.Monad

class ContainsLogger t where Source #

Methods

extractLogger :: t -> Logger Source #

Instances

Instances details
ContainsLogger (Env gbl lcl) Source # 
Instance details

Defined in GHC.Tc.Types

Methods

extractLogger :: Env gbl lcl -> Logger Source #

Logger setup

type TraceAction a = LogFlags -> String -> SDoc -> a -> a Source #

data DumpFormat Source #

Format of a dump

Dump formats are loosely defined: dumps may contain various additional headers and annotations and they may be partial. DumpFormat is mainly a hint (e.g. for syntax highlighters).

Constructors

FormatHaskell

Haskell

FormatCore

Core

FormatSTG

STG

FormatByteCode

ByteCode

FormatCMM

Cmm

FormatASM

Assembly code

FormatC

C code/header

FormatLLVM

LLVM bytecode

FormatJS

JavaScript code

FormatText

Unstructured dump

Instances

Instances details
Show DumpFormat Source # 
Instance details

Defined in GHC.Utils.Logger

Eq DumpFormat Source # 
Instance details

Defined in GHC.Utils.Logger

Hooks

popLogHook :: Logger -> Logger Source #

Pop a log hook

pushLogHook :: (LogAction -> LogAction) -> Logger -> Logger Source #

Push a log hook

popDumpHook :: Logger -> Logger Source #

Pop a dump hook

pushDumpHook :: (DumpAction -> DumpAction) -> Logger -> Logger Source #

Push a dump hook

popTraceHook :: Logger -> Logger Source #

Pop a trace hook

pushTraceHook :: (forall a. TraceAction a -> TraceAction a) -> Logger -> Logger Source #

Push a trace hook

makeThreadSafe :: Logger -> IO Logger Source #

Make the logger thread-safe

Flags

data LogFlags Source #

Logger flags

Constructors

LogFlags 

Fields

defaultLogFlags :: LogFlags Source #

Default LogFlags

log_dopt :: DumpFlag -> LogFlags -> Bool Source #

Test if a DumpFlag is enabled

log_set_dopt :: DumpFlag -> LogFlags -> LogFlags Source #

Enable a DumpFlag

setLogFlags :: Logger -> LogFlags -> Logger Source #

Set LogFlags

updateLogFlags :: Logger -> (LogFlags -> LogFlags) -> Logger Source #

Update LogFlags

logFlags :: Logger -> LogFlags Source #

Logger flags

logHasDumpFlag :: Logger -> DumpFlag -> Bool Source #

Test if a DumpFlag is set

logVerbAtLeast :: Logger -> Int -> Bool Source #

Test if verbosity is >= to the given value

Logging

putLogMsg :: Logger -> LogAction Source #

Log something

defaultLogActionHPrintDoc :: LogFlags -> Bool -> Handle -> SDoc -> IO () Source #

Like defaultLogActionHPutStrDoc but appends an extra newline.

defaultLogActionHPutStrDoc :: LogFlags -> Bool -> Handle -> SDoc -> IO () Source #

The boolean arguments let's the pretty printer know if it can optimize indent by writing ascii ' ' characters without going through decoding.

logMsg :: Logger -> MessageClass -> SrcSpan -> SDoc -> IO () Source #

Log something

logDumpMsg :: Logger -> String -> SDoc -> IO () Source #

Log a dump message (not a dump file)

Dumping

defaultDumpAction :: DumpCache -> LogAction -> DumpAction Source #

Default action for dumpAction hook

putDumpFile :: Logger -> DumpAction Source #

Dump something

putDumpFileMaybe :: Logger -> DumpFlag -> String -> DumpFormat -> SDoc -> IO () Source #

Dump if the given DumpFlag is set

putDumpFileMaybe' :: Logger -> NamePprCtx -> DumpFlag -> String -> DumpFormat -> SDoc -> IO () Source #

Dump if the given DumpFlag is set

Unlike putDumpFileMaybe, has a NamePprCtx argument

withDumpFileHandle :: DumpCache -> LogFlags -> DumpFlag -> (Maybe Handle -> IO ()) -> IO () Source #

Run an action with the handle of a DumpFlag if we are outputting to a file, otherwise Nothing.

touchDumpFile :: Logger -> DumpFlag -> IO () Source #

Ensure that a dump file is created even if it stays empty

logDumpFile :: Logger -> PprStyle -> DumpFlag -> String -> DumpFormat -> SDoc -> IO () Source #

Dump something

Tracing

defaultTraceAction :: TraceAction a Source #

Default action for traceAction hook

putTraceMsg :: Logger -> TraceAction a Source #

Trace something

loggerTraceFlushUpdate :: Logger -> (IO () -> IO ()) -> Logger Source #

Set the trace flushing function

The currently set trace flushing function is passed to the updating function

loggerTraceFlush :: Logger -> IO () Source #

Calls the trace flushing function

logTraceMsg :: Logger -> String -> SDoc -> a -> a Source #

Log a trace message