Skip to content

Commit 3273b87

Browse files
committed
Add RuleWithOldValue to allow access to previous results
1 parent ea03a77 commit 3273b87

File tree

2 files changed

+12
-6
lines changed

2 files changed

+12
-6
lines changed

ghcide/src/Development/IDE/Core/Shake.hs

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1036,6 +1036,7 @@ data RuleBody k v
10361036
{ newnessCheck :: BS.ByteString -> BS.ByteString -> Bool
10371037
, build :: k -> NormalizedFilePath -> Action (Maybe BS.ByteString, Maybe v)
10381038
}
1039+
| RuleWithOldValue (k -> NormalizedFilePath -> Value v -> Action (Maybe BS.ByteString, IdeResult v))
10391040

10401041
-- | Define a new Rule with early cutoff
10411042
defineEarlyCutoff
@@ -1048,20 +1049,26 @@ defineEarlyCutoff recorder (Rule op) = addRule $ \(Q (key, file)) (old :: Maybe
10481049
let diagnostics diags = do
10491050
traceDiagnostics diags
10501051
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
10521053
defineEarlyCutoff recorder (RuleNoDiagnostics op) = addRule $ \(Q (key, file)) (old :: Maybe BS.ByteString) mode -> otTracedAction key file mode traceA $ \traceDiagnostics -> do
10531054
let diagnostics diags = do
10541055
traceDiagnostics diags
10551056
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
10571058
defineEarlyCutoff recorder RuleWithCustomNewnessCheck{..} =
10581059
addRule $ \(Q (key, file)) (old :: Maybe BS.ByteString) mode ->
10591060
otTracedAction key file mode traceA $ \ traceDiagnostics -> do
10601061
let diagnostics diags = do
10611062
traceDiagnostics diags
10621063
mapM_ (logWith recorder Warning . LogDefineEarlyCutoffRuleCustomNewnessHasDiag) diags
10631064
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
10651072

10661073
defineNoFile :: IdeRule k v => Recorder (WithPriority Log) -> (k -> Action v) -> Rules ()
10671074
defineNoFile recorder f = defineNoDiagnostics recorder $ \k file -> do
@@ -1082,7 +1089,7 @@ defineEarlyCutoff'
10821089
-> NormalizedFilePath
10831090
-> Maybe BS.ByteString
10841091
-> RunMode
1085-
-> Action (Maybe BS.ByteString, IdeResult v)
1092+
-> (Value v -> Action (Maybe BS.ByteString, IdeResult v))
10861093
-> Action (RunResult (A (RuleResult k)))
10871094
defineEarlyCutoff' doDiagnostics cmp key file old mode action = do
10881095
ShakeExtras{state, progress, dirtyKeys} <- getShakeExtras
@@ -1112,7 +1119,7 @@ defineEarlyCutoff' doDiagnostics cmp key file old mode action = do
11121119
Just (Failed b, _) -> Failed b
11131120

11141121
(bs, (diags, res)) <- actionCatch
1115-
(do v <- action; liftIO $ evaluate $ force v) $
1122+
(do v <- action staleV; liftIO $ evaluate $ force v) $
11161123
\(e :: SomeException) -> do
11171124
pure (Nothing, ([ideErrorText file $ T.pack $ show e | not $ isBadDependency e],Nothing))
11181125

ghcide/src/Development/IDE/Types/Shake.hs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ import Development.IDE.Types.Diagnostics
3131
import Development.IDE.Types.Location
3232
import GHC.Generics
3333
import HieDb.Types (HieDb)
34-
import Language.LSP.Types
3534
import qualified StmContainers.Map as STM
3635
import Type.Reflection (SomeTypeRep (SomeTypeRep),
3736
pattern App, pattern Con,

0 commit comments

Comments
 (0)