@@ -1036,6 +1036,7 @@ data RuleBody k v
1036
1036
{ newnessCheck :: BS. ByteString -> BS. ByteString -> Bool
1037
1037
, build :: k -> NormalizedFilePath -> Action (Maybe BS. ByteString , Maybe v )
1038
1038
}
1039
+ | RuleWithOldValue (k -> NormalizedFilePath -> Value v -> Action (Maybe BS. ByteString , IdeResult v ))
1039
1040
1040
1041
-- | Define a new Rule with early cutoff
1041
1042
defineEarlyCutoff
@@ -1048,20 +1049,26 @@ defineEarlyCutoff recorder (Rule op) = addRule $ \(Q (key, file)) (old :: Maybe
1048
1049
let diagnostics diags = do
1049
1050
traceDiagnostics diags
1050
1051
updateFileDiagnostics recorder file (Key key) extras . map (\ (_,y,z) -> (y,z)) $ diags
1051
- defineEarlyCutoff' diagnostics (==) key file old mode $ op key file
1052
+ defineEarlyCutoff' diagnostics (==) key file old mode $ const $ op key file
1052
1053
defineEarlyCutoff recorder (RuleNoDiagnostics op) = addRule $ \ (Q (key, file)) (old :: Maybe BS. ByteString ) mode -> otTracedAction key file mode traceA $ \ traceDiagnostics -> do
1053
1054
let diagnostics diags = do
1054
1055
traceDiagnostics diags
1055
1056
mapM_ (logWith recorder Warning . LogDefineEarlyCutoffRuleNoDiagHasDiag ) diags
1056
- defineEarlyCutoff' diagnostics (==) key file old mode $ second (mempty ,) <$> op key file
1057
+ defineEarlyCutoff' diagnostics (==) key file old mode $ const $ second (mempty ,) <$> op key file
1057
1058
defineEarlyCutoff recorder RuleWithCustomNewnessCheck {.. } =
1058
1059
addRule $ \ (Q (key, file)) (old :: Maybe BS. ByteString ) mode ->
1059
1060
otTracedAction key file mode traceA $ \ traceDiagnostics -> do
1060
1061
let diagnostics diags = do
1061
1062
traceDiagnostics diags
1062
1063
mapM_ (logWith recorder Warning . LogDefineEarlyCutoffRuleCustomNewnessHasDiag ) diags
1063
1064
defineEarlyCutoff' diagnostics newnessCheck key file old mode $
1064
- second (mempty ,) <$> build key file
1065
+ const $ second (mempty ,) <$> build key file
1066
+ defineEarlyCutoff recorder (RuleWithOldValue op) = addRule $ \ (Q (key, file)) (old :: Maybe BS. ByteString ) mode -> otTracedAction key file mode traceA $ \ traceDiagnostics -> do
1067
+ extras <- getShakeExtras
1068
+ let diagnostics diags = do
1069
+ traceDiagnostics diags
1070
+ updateFileDiagnostics recorder file (Key key) extras . map (\ (_,y,z) -> (y,z)) $ diags
1071
+ defineEarlyCutoff' diagnostics (==) key file old mode $ op key file
1065
1072
1066
1073
defineNoFile :: IdeRule k v => Recorder (WithPriority Log ) -> (k -> Action v ) -> Rules ()
1067
1074
defineNoFile recorder f = defineNoDiagnostics recorder $ \ k file -> do
@@ -1082,7 +1089,7 @@ defineEarlyCutoff'
1082
1089
-> NormalizedFilePath
1083
1090
-> Maybe BS. ByteString
1084
1091
-> RunMode
1085
- -> Action (Maybe BS. ByteString , IdeResult v )
1092
+ -> ( Value v -> Action (Maybe BS. ByteString , IdeResult v ) )
1086
1093
-> Action (RunResult (A (RuleResult k )))
1087
1094
defineEarlyCutoff' doDiagnostics cmp key file old mode action = do
1088
1095
ShakeExtras {state, progress, dirtyKeys} <- getShakeExtras
@@ -1112,7 +1119,7 @@ defineEarlyCutoff' doDiagnostics cmp key file old mode action = do
1112
1119
Just (Failed b, _) -> Failed b
1113
1120
1114
1121
(bs, (diags, res)) <- actionCatch
1115
- (do v <- action; liftIO $ evaluate $ force v) $
1122
+ (do v <- action staleV ; liftIO $ evaluate $ force v) $
1116
1123
\ (e :: SomeException ) -> do
1117
1124
pure (Nothing , ([ideErrorText file $ T. pack $ show e | not $ isBadDependency e],Nothing ))
1118
1125
0 commit comments