Skip to content

Commit bbc5c95

Browse files
committed
capture more dirty keys to between sessions
1 parent 8adf5a4 commit bbc5c95

File tree

4 files changed

+17
-15
lines changed

4 files changed

+17
-15
lines changed

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -120,10 +120,10 @@ modifyFileExists state changes = do
120120
-- flush previous values
121121
let (fileModifChanges, fileExistChanges) =
122122
partition ((== FileChangeType_Changed) . snd) changes
123-
mapM_ (deleteValue (shakeExtras state) GetFileExists . fst) fileExistChanges
123+
keys0 <- concat <$> mapM (deleteValue (shakeExtras state) GetFileExists . fst) fileExistChanges
124124
let keys1 = map (toKey GetFileExists . fst) fileExistChanges
125125
let keys2 = map (toKey GetModificationTime . fst) fileModifChanges
126-
return (keys1 <> keys2)
126+
return (keys0 <> keys1 <> keys2)
127127

128128
fromChange :: FileChangeType -> Maybe Bool
129129
fromChange FileChangeType_Created = Just True

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

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -149,24 +149,24 @@ isInterface :: NormalizedFilePath -> Bool
149149
isInterface f = takeExtension (fromNormalizedFilePath f) `elem` [".hi", ".hi-boot", ".hie", ".hie-boot", ".core"]
150150

151151
-- | Reset the GetModificationTime state of interface files
152-
resetInterfaceStore :: ShakeExtras -> NormalizedFilePath -> STM ()
152+
resetInterfaceStore :: ShakeExtras -> NormalizedFilePath -> STM [Key]
153153
resetInterfaceStore state f = do
154154
deleteValue state GetModificationTime f
155155

156156
-- | Reset the GetModificationTime state of watched files
157157
-- Assumes the list does not include any FOIs
158-
resetFileStore :: IdeState -> [(NormalizedFilePath, LSP.FileChangeType)] -> IO ()
158+
resetFileStore :: IdeState -> [(NormalizedFilePath, LSP.FileChangeType)] -> IO [Key]
159159
resetFileStore ideState changes = mask $ \_ -> do
160160
-- we record FOIs document versions in all the stored values
161161
-- so NEVER reset FOIs to avoid losing their versions
162162
-- FOI filtering is done by the caller (LSP Notification handler)
163-
forM_ changes $ \(nfp, c) -> do
164-
case c of
165-
LSP.FileChangeType_Changed
166-
-- already checked elsewhere | not $ HM.member nfp fois
167-
-> atomically $
168-
deleteValue (shakeExtras ideState) GetModificationTime nfp
169-
_ -> pure ()
163+
fmap concat <$>
164+
forM changes $ \(nfp, c) -> do
165+
case c of
166+
LSP.FileChangeType_Changed
167+
-- already checked elsewhere | not $ HM.member nfp fois
168+
-> atomically $ deleteValue (shakeExtras ideState) GetModificationTime nfp
169+
_ -> pure []
170170

171171

172172
modificationTime :: FileVersion -> Maybe UTCTime

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -563,10 +563,11 @@ deleteValue
563563
=> ShakeExtras
564564
-> k
565565
-> NormalizedFilePath
566-
-> STM ()
566+
-> STM [Key]
567567
deleteValue ShakeExtras{dirtyKeys, state} key file = do
568568
STM.delete (toKey key file) state
569-
modifyTVar' dirtyKeys $ insertKeySet (toKey key file)
569+
return [toKey key file]
570+
570571

571572
recordDirtyKeys
572573
:: ShakeExtras

ghcide/src/Development/IDE/LSP/Notifications.hs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -117,8 +117,9 @@ descriptor recorder plId = (defaultPluginDescriptor plId desc) { pluginNotificat
117117
let msg = show fileEvents'
118118
logWith recorder Debug $ LogWatchedFileEvents (Text.pack msg)
119119
setSomethingModified (VFSModified vfs) ide msg $ do
120-
resetFileStore ide fileEvents'
121-
modifyFileExists ide fileEvents'
120+
ks1 <- resetFileStore ide fileEvents'
121+
ks2 <- modifyFileExists ide fileEvents'
122+
return (ks1 <> ks2)
122123

123124
, mkPluginNotificationHandler LSP.SMethod_WorkspaceDidChangeWorkspaceFolders $
124125
\ide _ _ (DidChangeWorkspaceFoldersParams events) -> liftIO $ do

0 commit comments

Comments
 (0)