Marge Bot pushed to branch master at Glasgow Haskell Compiler / GHC

Commits:

3 changed files:

Changes:

  • compiler/GHC/Driver/Errors.hs
    1 1
     {-# LANGUAGE ScopedTypeVariables #-}
    
    2 2
     module GHC.Driver.Errors (
    
    3
    -    printOrThrowDiagnostics
    
    3
    +    reportError
    
    4
    +  , reportDiagnostic
    
    4 5
       , printMessages
    
    6
    +  , printOrThrowDiagnostics
    
    5 7
       , mkDriverPsHeaderMessage
    
    6 8
       ) where
    
    7 9
     
    
    8 10
     import GHC.Driver.Errors.Types
    
    9 11
     import GHC.Prelude
    
    12
    +import GHC.Types.SrcLoc
    
    10 13
     import GHC.Types.SourceError
    
    11 14
     import GHC.Types.Error
    
    12 15
     import GHC.Utils.Error
    
    13
    -import GHC.Utils.Outputable (hang, ppr, ($$),  text, mkErrStyle, sdocStyle, updSDocContext )
    
    16
    +import GHC.Utils.Outputable
    
    14 17
     import GHC.Utils.Logger
    
    15 18
     
    
    19
    +reportError :: Logger -> NamePprCtx -> DiagOpts -> SrcSpan -> SDoc -> IO ()
    
    20
    +reportError logger nameContext opts span doc = do
    
    21
    +  let
    
    22
    +    message :: MsgEnvelope DiagnosticMessage
    
    23
    +    message = mkErrorMsgEnvelope span nameContext DiagnosticMessage {
    
    24
    +        diagMessage = mkDecorated [doc]
    
    25
    +      , diagReason = ErrorWithoutFlag
    
    26
    +      , diagHints = []
    
    27
    +      }
    
    28
    +  printMessage logger NoDiagnosticOpts opts message
    
    29
    +
    
    30
    +reportDiagnostic :: Logger -> NamePprCtx -> DiagOpts -> SrcSpan -> DiagnosticReason -> SDoc -> IO ()
    
    31
    +reportDiagnostic logger nameContext opts span reason doc = do
    
    32
    +  let
    
    33
    +    message :: MsgEnvelope DiagnosticMessage
    
    34
    +    message = mkMsgEnvelope opts span nameContext DiagnosticMessage {
    
    35
    +        diagMessage = mkDecorated [doc]
    
    36
    +      , diagReason = reason
    
    37
    +      , diagHints = []
    
    38
    +      }
    
    39
    +  printMessage logger NoDiagnosticOpts opts message
    
    40
    +
    
    16 41
     printMessages :: forall a. (Diagnostic a) => Logger -> DiagnosticOpts a -> DiagOpts -> Messages a -> IO ()
    
    17
    -printMessages logger msg_opts opts msgs
    
    18
    -  = sequence_ [ let style = mkErrStyle name_ppr_ctx
    
    19
    -                    ctx   = (diag_ppr_ctx opts) { sdocStyle = style }
    
    20
    -                in (if log_diags_as_json
    
    21
    -                    then logJsonMsg logger (MCDiagnostic sev reason (diagnosticCode dia)) msg
    
    22
    -                    else logMsg logger (MCDiagnostic sev reason (diagnosticCode dia)) s $
    
    23
    -                  updSDocContext (\_ -> ctx) (messageWithHints dia))
    
    24
    -              | msg@MsgEnvelope { errMsgSpan       = s,
    
    25
    -                                  errMsgDiagnostic = dia,
    
    26
    -                                  errMsgSeverity   = sev,
    
    27
    -                                  errMsgReason     = reason,
    
    28
    -                                  errMsgContext    = name_ppr_ctx }
    
    29
    -                  <- sortMsgBag (Just opts) (getMessages msgs) ]
    
    42
    +printMessages logger msg_opts opts = mapM_ (printMessage logger msg_opts opts) . sortMessages
    
    43
    +  where
    
    44
    +    sortMessages :: Messages a -> [MsgEnvelope a]
    
    45
    +    sortMessages = sortMsgBag (Just opts) . getMessages
    
    46
    +
    
    47
    +printMessage :: forall a. (Diagnostic a) => Logger -> DiagnosticOpts a -> DiagOpts -> MsgEnvelope a -> IO ()
    
    48
    +printMessage logger msg_opts opts message
    
    49
    +  | log_diags_as_json = logJsonMsg logger messageClass message
    
    50
    +  | otherwise = logMsg logger messageClass location doc
    
    30 51
       where
    
    52
    +    doc :: SDoc
    
    53
    +    doc = updSDocContext (\_ -> ctx) (messageWithHints diagnostic)
    
    54
    +
    
    55
    +    messageClass :: MessageClass
    
    56
    +    messageClass = MCDiagnostic severity (errMsgReason message) (diagnosticCode diagnostic)
    
    57
    +
    
    58
    +    style :: PprStyle
    
    59
    +    style = mkErrStyle (errMsgContext message)
    
    60
    +
    
    61
    +    location :: SrcSpan
    
    62
    +    location = errMsgSpan message
    
    63
    +
    
    64
    +    ctx :: SDocContext
    
    65
    +    ctx = (diag_ppr_ctx opts) { sdocStyle = style }
    
    66
    +
    
    67
    +    diagnostic :: a
    
    68
    +    diagnostic = errMsgDiagnostic message
    
    69
    +
    
    70
    +    severity :: Severity
    
    71
    +    severity = errMsgSeverity message
    
    72
    +
    
    31 73
         messageWithHints :: a -> SDoc
    
    32 74
         messageWithHints e =
    
    33 75
           let main_msg = formatBulleted $ diagnosticMessage msg_opts e
    
    ... ... @@ -36,6 +78,8 @@ printMessages logger msg_opts opts msgs
    36 78
                    [h] -> main_msg $$ hang (text "Suggested fix:") 2 (ppr h)
    
    37 79
                    hs  -> main_msg $$ hang (text "Suggested fixes:") 2
    
    38 80
                                            (formatBulleted  $ mkDecorated . map ppr $ hs)
    
    81
    +
    
    82
    +    log_diags_as_json :: Bool
    
    39 83
         log_diags_as_json = log_diagnostics_as_json (logFlags logger)
    
    40 84
     
    
    41 85
     -- | Given a bag of diagnostics, turn them into an exception if
    

  • compiler/GHC/SysTools/Process.hs
    ... ... @@ -26,6 +26,8 @@ import GHC.Utils.Logger
    26 26
     import GHC.Utils.TmpFs
    
    27 27
     import GHC.Utils.CliOption
    
    28 28
     
    
    29
    +import GHC.Driver.Errors (reportError)
    
    30
    +
    
    29 31
     import GHC.Types.SrcLoc ( SrcLoc, mkSrcLoc, mkSrcSpan )
    
    30 32
     import GHC.Data.FastString
    
    31 33
     
    
    ... ... @@ -286,8 +288,7 @@ builderMainLoop logger filter_fn pgm real_args mb_cwd mb_env = withPipe $ \ (rea
    286 288
             BuildMsg msg -> do
    
    287 289
               logInfo logger $ withPprStyle defaultUserStyle msg
    
    288 290
             BuildError loc msg -> do
    
    289
    -          logMsg logger errorDiagnostic (mkSrcSpan loc loc)
    
    290
    -              $ withPprStyle defaultUserStyle msg
    
    291
    +          reportError logger neverQualify emptyDiagOpts (mkSrcSpan loc loc) msg
    
    291 292
     
    
    292 293
     parseBuildMessages :: [String] -> [BuildMessage]
    
    293 294
     parseBuildMessages str = loop str Nothing
    

  • ghc/GHCi/UI.hs
    ... ... @@ -53,7 +53,7 @@ import GHC.Core.DataCon
    53 53
     import GHC.Core.ConLike
    
    54 54
     import GHC.Core.PatSyn
    
    55 55
     import GHC.Driver.Flags
    
    56
    -import GHC.Driver.Errors
    
    56
    +import GHC.Driver.Errors (printOrThrowDiagnostics)
    
    57 57
     import GHC.Driver.Errors.Types
    
    58 58
     import GHC.Driver.Phases
    
    59 59
     import GHC.Driver.Session as DynFlags