@@ -956,14 +956,26 @@ defineEarlyCutoff
956956 :: IdeRule k v
957957 => RuleBody k v
958958 -> Rules ()
959- defineEarlyCutoff (Rule op) = addRule $ \ (Q (key, file)) (old :: Maybe BS. ByteString ) mode -> otTracedAction key file mode traceA $ do
960- defineEarlyCutoff' True (==) key file old mode $ op key file
961- defineEarlyCutoff (RuleNoDiagnostics op) = addRule $ \ (Q (key, file)) (old :: Maybe BS. ByteString ) mode -> otTracedAction key file mode traceA $ do
962- defineEarlyCutoff' False (==) key file old mode $ second (mempty ,) <$> op key file
959+ defineEarlyCutoff (Rule op) = addRule $ \ (Q (key, file)) (old :: Maybe BS. ByteString ) mode -> otTracedAction key file mode traceA $ \ traceDiagnostics -> do
960+ extras <- getShakeExtras
961+ let diagnostics diags = do
962+ traceDiagnostics diags
963+ updateFileDiagnostics file (Key key) extras . map (\ (_,y,z) -> (y,z)) $ diags
964+ defineEarlyCutoff' diagnostics (==) key file old mode $ op key file
965+ defineEarlyCutoff (RuleNoDiagnostics op) = addRule $ \ (Q (key, file)) (old :: Maybe BS. ByteString ) mode -> otTracedAction key file mode traceA $ \ traceDiagnostics -> do
966+ ShakeExtras {logger} <- getShakeExtras
967+ let diagnostics diags = do
968+ traceDiagnostics diags
969+ mapM_ (\ d -> liftIO $ logWarning logger $ showDiagnosticsColored [d]) diags
970+ defineEarlyCutoff' diagnostics (==) key file old mode $ second (mempty ,) <$> op key file
963971defineEarlyCutoff RuleWithCustomNewnessCheck {.. } =
964972 addRule $ \ (Q (key, file)) (old :: Maybe BS. ByteString ) mode ->
965- otTracedAction key file mode traceA $
966- defineEarlyCutoff' False newnessCheck key file old mode $
973+ otTracedAction key file mode traceA $ \ traceDiagnostics -> do
974+ ShakeExtras {logger} <- getShakeExtras
975+ let diagnostics diags = do
976+ mapM_ (\ d -> liftIO $ logWarning logger $ showDiagnosticsColored [d]) diags
977+ traceDiagnostics diags
978+ defineEarlyCutoff' diagnostics newnessCheck key file old mode $
967979 second (mempty ,) <$> build key file
968980
969981defineNoFile :: IdeRule k v => (k -> Action v ) -> Rules ()
@@ -978,7 +990,7 @@ defineEarlyCutOffNoFile f = defineEarlyCutoff $ RuleNoDiagnostics $ \k file -> d
978990
979991defineEarlyCutoff'
980992 :: IdeRule k v
981- => Bool -- ^ update diagnostics
993+ => ([ FileDiagnostic ] -> Action () ) -- ^ update diagnostics
982994 -- | compare current and previous for freshness
983995 -> (BS. ByteString -> BS. ByteString -> Bool )
984996 -> k
@@ -988,7 +1000,7 @@ defineEarlyCutoff'
9881000 -> Action (Maybe BS. ByteString , IdeResult v )
9891001 -> Action (RunResult (A (RuleResult k )))
9901002defineEarlyCutoff' doDiagnostics cmp key file old mode action = do
991- extras @ ShakeExtras {state, progress, logger , dirtyKeys} <- getShakeExtras
1003+ ShakeExtras {state, progress, dirtyKeys} <- getShakeExtras
9921004 options <- getIdeOptions
9931005 (if optSkipProgress options key then id else inProgress progress file) $ do
9941006 val <- case old of
@@ -998,8 +1010,7 @@ defineEarlyCutoff' doDiagnostics cmp key file old mode action = do
9981010 -- No changes in the dependencies and we have
9991011 -- an existing successful result.
10001012 Just (v@ Succeeded {}, diags) -> do
1001- when doDiagnostics $
1002- updateFileDiagnostics file (Key key) extras $ map (\ (_,y,z) -> (y,z)) $ Vector. toList diags
1013+ doDiagnostics $ Vector. toList diags
10031014 return $ Just $ RunResult ChangedNothing old $ A v
10041015 _ -> return Nothing
10051016 _ ->
@@ -1028,9 +1039,7 @@ defineEarlyCutoff' doDiagnostics cmp key file old mode action = do
10281039 (toShakeValue ShakeResult bs, Failed b)
10291040 Just v -> pure (maybe ShakeNoCutoff ShakeResult bs, Succeeded (vfsVersion =<< modTime) v)
10301041 liftIO $ setValues state key file res (Vector. fromList diags)
1031- if doDiagnostics
1032- then updateFileDiagnostics file (Key key) extras $ map (\ (_,y,z) -> (y,z)) diags
1033- else forM_ diags $ \ d -> liftIO $ logWarning logger $ showDiagnosticsColored [d]
1042+ doDiagnostics diags
10341043 let eq = case (bs, fmap decodeShakeValue old) of
10351044 (ShakeResult a, Just (ShakeResult b)) -> cmp a b
10361045 (ShakeStale a, Just (ShakeStale b)) -> cmp a b
0 commit comments