@@ -984,6 +984,7 @@ data RuleBody k v
984
984
{ newnessCheck :: BS. ByteString -> BS. ByteString -> Bool
985
985
, build :: k -> NormalizedFilePath -> Action (Maybe BS. ByteString , Maybe v )
986
986
}
987
+ | RuleWithOldValue (k -> NormalizedFilePath -> Value v -> Action (Maybe BS. ByteString , IdeResult v ))
987
988
988
989
-- | Define a new Rule with early cutoff
989
990
defineEarlyCutoff
@@ -995,13 +996,13 @@ defineEarlyCutoff (Rule op) = addRule $ \(Q (key, file)) (old :: Maybe BS.ByteSt
995
996
let diagnostics diags = do
996
997
traceDiagnostics diags
997
998
updateFileDiagnostics file (Key key) extras . map (\ (_,y,z) -> (y,z)) $ diags
998
- defineEarlyCutoff' diagnostics (==) key file old mode $ op key file
999
+ defineEarlyCutoff' diagnostics (==) key file old mode $ const $ op key file
999
1000
defineEarlyCutoff (RuleNoDiagnostics op) = addRule $ \ (Q (key, file)) (old :: Maybe BS. ByteString ) mode -> otTracedAction key file mode traceA $ \ traceDiagnostics -> do
1000
1001
ShakeExtras {logger} <- getShakeExtras
1001
1002
let diagnostics diags = do
1002
1003
traceDiagnostics diags
1003
1004
mapM_ (\ d -> liftIO $ logWarning logger $ showDiagnosticsColored [d]) diags
1004
- defineEarlyCutoff' diagnostics (==) key file old mode $ second (mempty ,) <$> op key file
1005
+ defineEarlyCutoff' diagnostics (==) key file old mode $ const $ second (mempty ,) <$> op key file
1005
1006
defineEarlyCutoff RuleWithCustomNewnessCheck {.. } =
1006
1007
addRule $ \ (Q (key, file)) (old :: Maybe BS. ByteString ) mode ->
1007
1008
otTracedAction key file mode traceA $ \ traceDiagnostics -> do
@@ -1010,7 +1011,13 @@ defineEarlyCutoff RuleWithCustomNewnessCheck{..} =
1010
1011
mapM_ (\ d -> liftIO $ logWarning logger $ showDiagnosticsColored [d]) diags
1011
1012
traceDiagnostics diags
1012
1013
defineEarlyCutoff' diagnostics newnessCheck key file old mode $
1013
- second (mempty ,) <$> build key file
1014
+ const $ second (mempty ,) <$> build key file
1015
+ defineEarlyCutoff (RuleWithOldValue op) = addRule $ \ (Q (key, file)) (old :: Maybe BS. ByteString ) mode -> otTracedAction key file mode traceA $ \ traceDiagnostics -> do
1016
+ extras <- getShakeExtras
1017
+ let diagnostics diags = do
1018
+ traceDiagnostics diags
1019
+ updateFileDiagnostics file (Key key) extras . map (\ (_,y,z) -> (y,z)) $ diags
1020
+ defineEarlyCutoff' diagnostics (==) key file old mode $ op key file
1014
1021
1015
1022
defineNoFile :: IdeRule k v => (k -> Action v ) -> Rules ()
1016
1023
defineNoFile f = defineNoDiagnostics $ \ k file -> do
@@ -1031,7 +1038,7 @@ defineEarlyCutoff'
1031
1038
-> NormalizedFilePath
1032
1039
-> Maybe BS. ByteString
1033
1040
-> RunMode
1034
- -> Action (Maybe BS. ByteString , IdeResult v )
1041
+ -> ( Value v -> Action (Maybe BS. ByteString , IdeResult v ) )
1035
1042
-> Action (RunResult (A (RuleResult k )))
1036
1043
defineEarlyCutoff' doDiagnostics cmp key file old mode action = do
1037
1044
ShakeExtras {state, progress, dirtyKeys} <- getShakeExtras
@@ -1061,7 +1068,7 @@ defineEarlyCutoff' doDiagnostics cmp key file old mode action = do
1061
1068
Just (Failed b, _) -> Failed b
1062
1069
1063
1070
(bs, (diags, res)) <- actionCatch
1064
- (do v <- action; liftIO $ evaluate $ force v) $
1071
+ (do v <- action staleV ; liftIO $ evaluate $ force v) $
1065
1072
\ (e :: SomeException ) -> do
1066
1073
pure (Nothing , ([ideErrorText file $ T. pack $ show e | not $ isBadDependency e],Nothing ))
1067
1074
0 commit comments