@@ -956,14 +956,26 @@ defineEarlyCutoff
956
956
:: IdeRule k v
957
957
=> RuleBody k v
958
958
-> 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
963
971
defineEarlyCutoff RuleWithCustomNewnessCheck {.. } =
964
972
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 $
967
979
second (mempty ,) <$> build key file
968
980
969
981
defineNoFile :: IdeRule k v => (k -> Action v ) -> Rules ()
@@ -978,7 +990,7 @@ defineEarlyCutOffNoFile f = defineEarlyCutoff $ RuleNoDiagnostics $ \k file -> d
978
990
979
991
defineEarlyCutoff'
980
992
:: IdeRule k v
981
- => Bool -- ^ update diagnostics
993
+ => ([ FileDiagnostic ] -> Action () ) -- ^ update diagnostics
982
994
-- | compare current and previous for freshness
983
995
-> (BS. ByteString -> BS. ByteString -> Bool )
984
996
-> k
@@ -988,7 +1000,7 @@ defineEarlyCutoff'
988
1000
-> Action (Maybe BS. ByteString , IdeResult v )
989
1001
-> Action (RunResult (A (RuleResult k )))
990
1002
defineEarlyCutoff' doDiagnostics cmp key file old mode action = do
991
- extras @ ShakeExtras {state, progress, logger , dirtyKeys} <- getShakeExtras
1003
+ ShakeExtras {state, progress, dirtyKeys} <- getShakeExtras
992
1004
options <- getIdeOptions
993
1005
(if optSkipProgress options key then id else inProgress progress file) $ do
994
1006
val <- case old of
@@ -998,8 +1010,7 @@ defineEarlyCutoff' doDiagnostics cmp key file old mode action = do
998
1010
-- No changes in the dependencies and we have
999
1011
-- an existing successful result.
1000
1012
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
1003
1014
return $ Just $ RunResult ChangedNothing old $ A v
1004
1015
_ -> return Nothing
1005
1016
_ ->
@@ -1028,9 +1039,7 @@ defineEarlyCutoff' doDiagnostics cmp key file old mode action = do
1028
1039
(toShakeValue ShakeResult bs, Failed b)
1029
1040
Just v -> pure (maybe ShakeNoCutoff ShakeResult bs, Succeeded (vfsVersion =<< modTime) v)
1030
1041
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
1034
1043
let eq = case (bs, fmap decodeShakeValue old) of
1035
1044
(ShakeResult a, Just (ShakeResult b)) -> cmp a b
1036
1045
(ShakeStale a, Just (ShakeStale b)) -> cmp a b
0 commit comments