Simon Hengel pushed to branch wip/sol/remove-ddump-json at Glasgow Haskell Compiler / GHC

Commits:

7 changed files:

Changes:

  • compiler/GHC/Core/Opt/Monad.hs
    ... ... @@ -368,7 +368,7 @@ msg msg = do
    368 368
         name_ppr_ctx <- getNamePprCtx
    
    369 369
         let m = case msg of
    
    370 370
                     MCDump doc -> MCDump (dump_sty doc)
    
    371
    -                MCDiagnostic span severity reason code doc -> UnsafeMCDiagnostic span severity reason code (err_sty doc)
    
    371
    +                UnsafeMCDiagnostic span severity reason code doc diagnostic -> UnsafeMCDiagnostic span severity reason code (err_sty doc) diagnostic
    
    372 372
                     MCOutput doc -> MCOutput (user_sty doc)
    
    373 373
                     MCFatal doc -> MCFatal (user_sty doc)
    
    374 374
                     MCInteractive doc -> MCInteractive (user_sty doc)
    

  • compiler/GHC/Driver/Errors.hs
    ... ... @@ -47,18 +47,15 @@ printMessages logger msg_opts opts = mapM_ (printMessage logger msg_opts opts) .
    47 47
     
    
    48 48
     printMessage :: forall a. (Diagnostic a) => Logger -> DiagnosticOpts a -> DiagOpts -> MsgEnvelope a -> IO ()
    
    49 49
     printMessage logger msg_opts opts message = do
    
    50
    -  decorated <- decorateDiagnostic logflags (messageClass doc) location
    
    51
    -  if log_diags_as_json then do
    
    52
    -    let
    
    53
    -      rendered :: String
    
    54
    -      rendered = renderWithContext (log_default_user_context logflags) decorated
    
    55
    -
    
    56
    -      jsonMessage :: JsonDoc
    
    57
    -      jsonMessage = jsonDiagnostic rendered message
    
    58
    -
    
    59
    -    logJsonMsg logger (messageClass decorated) jsonMessage
    
    60
    -  else do
    
    61
    -    logMsg logger (messageClass decorated)
    
    50
    +  decorated <- decorateDiagnostic logflags location severity reason code doc
    
    51
    +  let
    
    52
    +    rendered :: String
    
    53
    +    rendered = renderWithContext (log_default_user_context logflags) decorated
    
    54
    +
    
    55
    +    jsonMessage :: JsonDoc
    
    56
    +    jsonMessage = jsonDiagnostic rendered message
    
    57
    +
    
    58
    +  logMsg logger $ UnsafeMCDiagnostic location severity reason code decorated jsonMessage
    
    62 59
       where
    
    63 60
         logflags :: LogFlags
    
    64 61
         logflags = logFlags logger
    
    ... ... @@ -66,9 +63,6 @@ printMessage logger msg_opts opts message = do
    66 63
         doc :: SDoc
    
    67 64
         doc = updSDocContext (\_ -> ctx) (messageWithHints diagnostic)
    
    68 65
     
    
    69
    -    messageClass :: SDoc -> Message
    
    70
    -    messageClass = UnsafeMCDiagnostic location severity (errMsgReason message) (diagnosticCode diagnostic)
    
    71
    -
    
    72 66
         style :: PprStyle
    
    73 67
         style = mkErrStyle (errMsgContext message)
    
    74 68
     
    
    ... ... @@ -84,6 +78,12 @@ printMessage logger msg_opts opts message = do
    84 78
         severity :: Severity
    
    85 79
         severity = errMsgSeverity message
    
    86 80
     
    
    81
    +    reason :: ResolvedDiagnosticReason
    
    82
    +    reason = errMsgReason message
    
    83
    +
    
    84
    +    code :: Maybe DiagnosticCode
    
    85
    +    code = diagnosticCode diagnostic
    
    86
    +
    
    87 87
         messageWithHints :: a -> SDoc
    
    88 88
         messageWithHints e =
    
    89 89
           let main_msg = formatBulleted $ diagnosticMessage msg_opts e
    
    ... ... @@ -93,21 +93,18 @@ printMessage logger msg_opts opts message = do
    93 93
                    hs  -> main_msg $$ hang (text "Suggested fixes:") 2
    
    94 94
                                            (formatBulleted  $ mkDecorated . map ppr $ hs)
    
    95 95
     
    
    96
    -    log_diags_as_json :: Bool
    
    97
    -    log_diags_as_json = log_diagnostics_as_json (logFlags logger)
    
    98
    -
    
    99
    -decorateDiagnostic :: LogFlags -> Message -> SrcSpan -> IO SDoc
    
    100
    -decorateDiagnostic logflags msg srcSpan = addCaret
    
    96
    +decorateDiagnostic :: LogFlags -> SrcSpan -> Severity -> ResolvedDiagnosticReason -> Maybe DiagnosticCode -> SDoc -> IO SDoc
    
    97
    +decorateDiagnostic logflags span severity reason code doc = addCaret
    
    101 98
       where
    
    102 99
         -- Pretty print the warning flag, if any (#10752)
    
    103 100
         message :: SDoc
    
    104
    -    message = mkLocMessageWarningGroups (log_show_warn_groups logflags) msg srcSpan
    
    101
    +    message = formatDiagnostic (log_show_warn_groups logflags) span severity reason code doc
    
    105 102
     
    
    106 103
         addCaret :: IO SDoc
    
    107 104
         addCaret = do
    
    108 105
           caretDiagnostic <-
    
    109 106
               if log_show_caret logflags
    
    110
    -          then getCaretDiagnostic msg srcSpan
    
    107
    +          then getCaretDiagnostic severity span
    
    111 108
               else pure empty
    
    112 109
           return $ getPprStyle $ \style ->
    
    113 110
             withPprStyle (setStyleColoured True style)
    

  • compiler/GHC/Driver/Make.hs
    ... ... @@ -1445,9 +1445,9 @@ withDeferredDiagnostics f = do
    1445 1445
         let deferDiagnostics _dflags !msg = do
    
    1446 1446
               let action = logMsg logger msg
    
    1447 1447
               case msg of
    
    1448
    -            MCDiagnostic _ SevWarning _reason _code _
    
    1448
    +            MCDiagnostic _ SevWarning _reason _code
    
    1449 1449
                   -> atomicModifyIORef' warnings $ \(!i) -> (action: i, ())
    
    1450
    -            MCDiagnostic _ SevError _reason _code _
    
    1450
    +            MCDiagnostic _ SevError _reason _code
    
    1451 1451
                   -> atomicModifyIORef' errors   $ \(!i) -> (action: i, ())
    
    1452 1452
                 MCFatal _
    
    1453 1453
                   -> atomicModifyIORef' fatals   $ \(!i) -> (action: i, ())
    

  • compiler/GHC/Driver/Monad.hs
    ... ... @@ -23,8 +23,6 @@ module GHC.Driver.Monad (
    23 23
             modifyLogger,
    
    24 24
             pushLogHookM,
    
    25 25
             popLogHookM,
    
    26
    -        pushJsonLogHookM,
    
    27
    -        popJsonLogHookM,
    
    28 26
             putLogMsgM,
    
    29 27
             putMsgM,
    
    30 28
             withTimingM,
    
    ... ... @@ -122,12 +120,6 @@ pushLogHookM = modifyLogger . pushLogHook
    122 120
     popLogHookM :: GhcMonad m => m ()
    
    123 121
     popLogHookM  = modifyLogger popLogHook
    
    124 122
     
    
    125
    -pushJsonLogHookM :: GhcMonad m => (LogJsonAction -> LogJsonAction) -> m ()
    
    126
    -pushJsonLogHookM = modifyLogger . pushJsonLogHook
    
    127
    -
    
    128
    -popJsonLogHookM :: GhcMonad m => m ()
    
    129
    -popJsonLogHookM = modifyLogger popJsonLogHook
    
    130
    -
    
    131 123
     -- | Put a log message
    
    132 124
     putMsgM :: GhcMonad m => SDoc -> m ()
    
    133 125
     putMsgM doc = do
    

  • compiler/GHC/Types/Error.hs
    ... ... @@ -70,7 +70,6 @@ module GHC.Types.Error
    70 70
        , mapDecoratedSDoc
    
    71 71
     
    
    72 72
        , pprMessageBag
    
    73
    -   , mkLocMessageWarningGroups
    
    74 73
        , formatLocMessage
    
    75 74
        , formatFatalLocMessage
    
    76 75
        , formatDiagnostic
    
    ... ... @@ -493,7 +492,7 @@ data Message
    493 492
         -- ^ Log messages intended for end users.
    
    494 493
         -- No file\/line\/column stuff.
    
    495 494
     
    
    496
    -  | UnsafeMCDiagnostic SrcSpan Severity ResolvedDiagnosticReason (Maybe DiagnosticCode) SDoc
    
    495
    +  | UnsafeMCDiagnostic SrcSpan Severity ResolvedDiagnosticReason (Maybe DiagnosticCode) SDoc JsonDoc
    
    497 496
         -- ^ Diagnostics from the compiler. This constructor is very powerful as
    
    498 497
         -- it allows the construction of a 'Message' with a completely
    
    499 498
         -- arbitrary permutation of 'Severity' and 'DiagnosticReason'. As such,
    
    ... ... @@ -509,8 +508,8 @@ data Message
    509 508
         -- should always have a 'DiagnosticCode'. See Note [Diagnostic codes].
    
    510 509
     
    
    511 510
     {-# COMPLETE MCOutput, MCFatal, MCInteractive, MCDump, MCInfo, MCDiagnostic #-}
    
    512
    -pattern MCDiagnostic :: SrcSpan -> Severity -> ResolvedDiagnosticReason -> Maybe DiagnosticCode -> SDoc -> Message
    
    513
    -pattern MCDiagnostic span severity reason code doc <- UnsafeMCDiagnostic span severity reason code doc
    
    511
    +pattern MCDiagnostic :: SrcSpan -> Severity -> ResolvedDiagnosticReason -> Maybe DiagnosticCode -> Message
    
    512
    +pattern MCDiagnostic span severity reason code <- UnsafeMCDiagnostic span severity reason code _diagnostic _json
    
    514 513
     
    
    515 514
     {-
    
    516 515
     Note [Suppressing Messages]
    
    ... ... @@ -635,25 +634,9 @@ showMsgEnvelope err =
    635 634
     pprMessageBag :: Bag SDoc -> SDoc
    
    636 635
     pprMessageBag msgs = vcat (punctuate blankLine (bagToList msgs))
    
    637 636
     
    
    638
    --- | Make an error message with location info, specifying whether to show
    
    639
    --- warning groups (if applicable).
    
    640
    -mkLocMessageWarningGroups
    
    641
    -  :: Bool                               -- ^ Print warning groups (if applicable)?
    
    642
    -  -> Message                            -- ^ message
    
    643
    -  -> SrcSpan                            -- ^ location
    
    644
    -  -> SDoc
    
    645
    -mkLocMessageWarningGroups show_warn_groups msg locn
    
    646
    -  = case msg of
    
    647
    -    MCDiagnostic span severity reason code doc -> formatDiagnostic show_warn_groups span severity reason code doc
    
    648
    -    MCFatal doc -> formatFatalLocMessage locn doc
    
    649
    -    MCOutput doc -> formatLocMessage locn doc
    
    650
    -    MCInteractive doc -> formatLocMessage locn doc
    
    651
    -    MCDump doc -> formatLocMessage locn doc
    
    652
    -    MCInfo doc -> formatLocMessage locn doc
    
    653
    -
    
    654 637
     formatFatalLocMessage :: SrcSpan -> SDoc -> SDoc
    
    655 638
     formatFatalLocMessage locn msg = sdocOption sdocColScheme $ \col_scheme ->
    
    656
    -      let msg_title = coloured (fatalColour col_scheme) $ text "fatal"
    
    639
    +      let msg_title = coloured (Col.sFatal col_scheme) $ text "fatal"
    
    657 640
           in formatLocMessageWarningGroups locn msg_title empty empty msg
    
    658 641
     
    
    659 642
     formatLocMessage :: SrcSpan -> SDoc -> SDoc
    
    ... ... @@ -770,23 +753,15 @@ formatLocMessageWarningGroups locn msg_title code_doc warning_flag_doc msg
    770 753
           in coloured (Col.sMessage col_scheme)
    
    771 754
                       $ hang (coloured (Col.sHeader col_scheme) header) 4 msg
    
    772 755
     
    
    773
    -getMessageClassColour :: Message -> Col.Scheme -> Col.PprColour
    
    774
    -getMessageClassColour (MCDiagnostic _span severity _reason _code _) = getSeverityColour severity
    
    775
    -getMessageClassColour (MCFatal _)                             = fatalColour
    
    776
    -getMessageClassColour _                                       = const mempty
    
    777
    -
    
    778
    -fatalColour :: Col.Scheme -> Col.PprColour
    
    779
    -fatalColour = Col.sFatal
    
    780
    -
    
    781 756
     getSeverityColour :: Severity -> Col.Scheme -> Col.PprColour
    
    782 757
     getSeverityColour severity = case severity of
    
    783 758
       SevError -> Col.sError
    
    784 759
       SevWarning -> Col.sWarning
    
    785 760
       SevIgnore -> const mempty
    
    786 761
     
    
    787
    -getCaretDiagnostic :: Message -> SrcSpan -> IO SDoc
    
    762
    +getCaretDiagnostic :: Severity -> SrcSpan -> IO SDoc
    
    788 763
     getCaretDiagnostic _ (UnhelpfulSpan _) = pure empty
    
    789
    -getCaretDiagnostic msg (RealSrcSpan span _) =
    
    764
    +getCaretDiagnostic severity (RealSrcSpan span _) =
    
    790 765
       caretDiagnostic <$> getSrcLine (srcSpanFile span) row
    
    791 766
       where
    
    792 767
         getSrcLine fn i =
    
    ... ... @@ -819,7 +794,7 @@ getCaretDiagnostic msg (RealSrcSpan span _) =
    819 794
         caretDiagnostic Nothing = empty
    
    820 795
         caretDiagnostic (Just srcLineWithNewline) =
    
    821 796
           sdocOption sdocColScheme$ \col_scheme ->
    
    822
    -      let sevColour = getMessageClassColour msg col_scheme
    
    797
    +      let sevColour = getSeverityColour severity col_scheme
    
    823 798
               marginColour = Col.sMargin col_scheme
    
    824 799
           in
    
    825 800
           coloured marginColour (text marginSpace) <>
    

  • compiler/GHC/Utils/Logger.hs
    ... ... @@ -24,7 +24,6 @@ module GHC.Utils.Logger
    24 24
         -- * Logger setup
    
    25 25
         , initLogger
    
    26 26
         , LogAction
    
    27
    -    , LogJsonAction
    
    28 27
         , DumpAction
    
    29 28
         , TraceAction
    
    30 29
         , DumpFormat (..)
    
    ... ... @@ -32,8 +31,6 @@ module GHC.Utils.Logger
    32 31
         -- ** Hooks
    
    33 32
         , popLogHook
    
    34 33
         , pushLogHook
    
    35
    -    , popJsonLogHook
    
    36
    -    , pushJsonLogHook
    
    37 34
         , popDumpHook
    
    38 35
         , pushDumpHook
    
    39 36
         , popTraceHook
    
    ... ... @@ -55,11 +52,9 @@ module GHC.Utils.Logger
    55 52
         , putLogMsg
    
    56 53
         , defaultLogAction
    
    57 54
         , defaultLogActionWithHandles
    
    58
    -    , defaultLogJsonAction
    
    59 55
         , defaultLogActionHPrintDoc
    
    60 56
         , defaultLogActionHPutStrDoc
    
    61 57
         , logMsg
    
    62
    -    , logJsonMsg
    
    63 58
         , logDumpMsg
    
    64 59
     
    
    65 60
         -- * Dumping
    
    ... ... @@ -86,8 +81,8 @@ import GHC.Types.Error
    86 81
     
    
    87 82
     import qualified GHC.Utils.Ppr as Pretty
    
    88 83
     import GHC.Utils.Outputable
    
    89
    -import GHC.Utils.Json
    
    90 84
     import GHC.Utils.Panic
    
    85
    +import GHC.Utils.Json (renderJSON)
    
    91 86
     
    
    92 87
     import GHC.Data.EnumSet (EnumSet)
    
    93 88
     import qualified GHC.Data.EnumSet as EnumSet
    
    ... ... @@ -181,11 +176,6 @@ type LogAction = LogFlags
    181 176
                   -> Message
    
    182 177
                   -> IO ()
    
    183 178
     
    
    184
    -type LogJsonAction = LogFlags
    
    185
    -                   -> Message
    
    186
    -                   -> JsonDoc
    
    187
    -                   -> IO ()
    
    188
    -
    
    189 179
     type DumpAction = LogFlags
    
    190 180
                    -> PprStyle
    
    191 181
                    -> DumpFlag
    
    ... ... @@ -223,9 +213,6 @@ data Logger = Logger
    223 213
         { log_hook   :: [LogAction -> LogAction]
    
    224 214
             -- ^ Log hooks stack
    
    225 215
     
    
    226
    -    , json_log_hook :: [LogJsonAction -> LogJsonAction]
    
    227
    -        -- ^ Json log hooks stack
    
    228
    -
    
    229 216
         , dump_hook  :: [DumpAction -> DumpAction]
    
    230 217
             -- ^ Dump hooks stack
    
    231 218
     
    
    ... ... @@ -261,7 +248,6 @@ initLogger = do
    261 248
         dumps <- newMVar Map.empty
    
    262 249
         return $ Logger
    
    263 250
             { log_hook        = []
    
    264
    -        , json_log_hook   = []
    
    265 251
             , dump_hook       = []
    
    266 252
             , trace_hook      = []
    
    267 253
             , generated_dumps = dumps
    
    ... ... @@ -273,10 +259,6 @@ initLogger = do
    273 259
     putLogMsg :: Logger -> LogAction
    
    274 260
     putLogMsg logger = foldr ($) defaultLogAction (log_hook logger)
    
    275 261
     
    
    276
    --- | Log a JsonDoc
    
    277
    -putJsonLogMsg :: Logger -> LogJsonAction
    
    278
    -putJsonLogMsg logger = foldr ($) defaultLogJsonAction (json_log_hook logger)
    
    279
    -
    
    280 262
     -- | Dump something
    
    281 263
     putDumpFile :: Logger -> DumpAction
    
    282 264
     putDumpFile logger =
    
    ... ... @@ -301,15 +283,6 @@ popLogHook logger = case log_hook logger of
    301 283
         []   -> panic "popLogHook: empty hook stack"
    
    302 284
         _:hs -> logger { log_hook = hs }
    
    303 285
     
    
    304
    --- | Push a json log hook
    
    305
    -pushJsonLogHook :: (LogJsonAction -> LogJsonAction) -> Logger -> Logger
    
    306
    -pushJsonLogHook h logger = logger { json_log_hook = h:json_log_hook logger }
    
    307
    -
    
    308
    -popJsonLogHook :: Logger -> Logger
    
    309
    -popJsonLogHook logger = case json_log_hook logger of
    
    310
    -    []   -> panic "popJsonLogHook: empty hook stack"
    
    311
    -    _:hs -> logger { json_log_hook = hs}
    
    312
    -
    
    313 286
     -- | Push a dump hook
    
    314 287
     pushDumpHook :: (DumpAction -> DumpAction) -> Logger -> Logger
    
    315 288
     pushDumpHook h logger = logger { dump_hook = h:dump_hook logger }
    
    ... ... @@ -353,22 +326,6 @@ makeThreadSafe logger = do
    353 326
                $ pushTraceHook trc
    
    354 327
                $ logger
    
    355 328
     
    
    356
    -defaultLogJsonAction :: LogJsonAction
    
    357
    -defaultLogJsonAction logflags msg_class jsdoc =
    
    358
    -  case msg_class of
    
    359
    -      MCOutput _                   -> printOut msg
    
    360
    -      MCDump _                     -> printOut (msg $$ blankLine)
    
    361
    -      MCInteractive _              -> putStrSDoc msg
    
    362
    -      MCInfo _                     -> printErrs msg
    
    363
    -      MCFatal _                    -> printErrs msg
    
    364
    -      MCDiagnostic _ SevIgnore _ _ _ -> pure () -- suppress the message
    
    365
    -      MCDiagnostic _span _sev _rea _code _ -> printErrs msg
    
    366
    -  where
    
    367
    -    printOut   = defaultLogActionHPrintDoc  logflags False stdout
    
    368
    -    printErrs  = defaultLogActionHPrintDoc  logflags False stderr
    
    369
    -    putStrSDoc = defaultLogActionHPutStrDoc logflags False stdout
    
    370
    -    msg = renderJSON jsdoc
    
    371
    -
    
    372 329
     -- | The default 'LogAction' prints to 'stdout' and 'stderr'.
    
    373 330
     --
    
    374 331
     -- To replicate the default log action behaviour with different @out@ and @err@
    
    ... ... @@ -386,8 +343,12 @@ defaultLogActionWithHandles out err logflags message
    386 343
           MCInteractive msg -> putStrSDoc msg
    
    387 344
           MCInfo msg -> printErrs msg
    
    388 345
           MCFatal msg -> printErrs msg
    
    389
    -      MCDiagnostic _ SevIgnore _ _ _ -> pure () -- suppress the message
    
    390
    -      MCDiagnostic _span _sev _rea _code msg -> printErrs msg
    
    346
    +      MCDiagnostic _ SevIgnore _ _ -> pure () -- suppress the message
    
    347
    +      UnsafeMCDiagnostic _span _severity _reason _code doc json -> do
    
    348
    +        if log_diagnostics_as_json logflags then do
    
    349
    +          printErrs (renderJSON json)
    
    350
    +        else do
    
    351
    +          printErrs doc
    
    391 352
         where
    
    392 353
           printOut   = defaultLogActionHPrintDoc  logflags False out
    
    393 354
           printErrs  = defaultLogActionHPrintDoc  logflags False err
    
    ... ... @@ -534,9 +495,6 @@ defaultTraceAction logflags title doc x =
    534 495
     logMsg :: Logger -> Message -> IO ()
    
    535 496
     logMsg logger = putLogMsg logger (logFlags logger)
    
    536 497
     
    
    537
    -logJsonMsg :: Logger -> Message -> JsonDoc -> IO ()
    
    538
    -logJsonMsg logger mc = putJsonLogMsg logger (logFlags logger) mc
    
    539
    -
    
    540 498
     -- | Dump something
    
    541 499
     logDumpFile :: Logger -> PprStyle -> DumpFlag -> String -> DumpFormat -> SDoc -> IO ()
    
    542 500
     logDumpFile logger = putDumpFile logger (logFlags logger)
    

  • ghc/GHCi/UI.hs
    ... ... @@ -836,7 +836,7 @@ ghciLogAction lastErrLocations old_log_action
    836 836
                   dflags msg = do
    
    837 837
         old_log_action dflags msg
    
    838 838
         case msg of
    
    839
    -        MCDiagnostic srcSpan SevError _reason _code _ -> case srcSpan of
    
    839
    +        MCDiagnostic srcSpan SevError _reason _code -> case srcSpan of
    
    840 840
                 RealSrcSpan rsp _ -> modifyIORef lastErrLocations
    
    841 841
                     (++ [(srcLocFile (realSrcSpanStart rsp), srcLocLine (realSrcSpanStart rsp))])
    
    842 842
                 _ -> return ()