Skip to content

Commit 25addfb

Browse files
committed
Unindex dependency srcs if .hls is missing
1 parent 1aaa4d4 commit 25addfb

File tree

3 files changed

+30
-6
lines changed

3 files changed

+30
-6
lines changed

cabal.project

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,11 @@ packages:
3838
./plugins/hls-refactor-plugin
3939
./plugins/hls-overloaded-record-dot-plugin
4040

41+
source-repository-package
42+
type:git
43+
location: https://github.com/nlander/HieDb.git
44+
tag: 038bc785c80f13615f4ac1ec5066345f2eb999c2
45+
4146
-- Standard location for temporary packages needed for particular environments
4247
-- For example it is used in the project gitlab mirror to help in the MAcOS M1 build script
4348
-- See https://github.com/haskell/haskell-language-server/blob/master/.gitlab-ci.yml

ghcide/ghcide.cabal

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ library
6868
hls-plugin-api == 2.1.0.0,
6969
lens,
7070
list-t,
71-
hiedb == 0.4.3.*,
71+
hiedb,
7272
lsp-types ^>= 2.0.0.1,
7373
lsp ^>= 2.0.0.0 ,
7474
mtl,

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

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,14 @@ module Development.IDE.Types.HscEnvEq
1313

1414

1515
import Control.Concurrent.Async (Async, async, waitCatch)
16+
import Control.Concurrent.MVar (newEmptyMVar, putMVar, readMVar)
17+
import Control.Concurrent.STM (atomically)
18+
import Control.Concurrent.STM.TQueue (unGetTQueue)
1619
import Control.Concurrent.Strict (modifyVar, newVar)
1720
import Control.DeepSeq (force)
1821
import Control.Exception (evaluate, mask, throwIO)
1922
import Control.Exception.Safe (tryAny)
23+
import Control.Monad (unless)
2024
import Control.Monad.Extra (eitherM, join, mapMaybeM, void)
2125
import Data.Either (fromRight)
2226
import Data.Foldable (traverse_)
@@ -27,7 +31,7 @@ import qualified Data.Text as T
2731
import Data.Unique (Unique)
2832
import qualified Data.Unique as Unique
2933
import Development.IDE.Core.Compile (HieDbModuleQuery(HieDbModuleQuery), indexHieFile, loadHieFile)
30-
import Development.IDE.Core.Shake (ShakeExtras(ideNc, logger), mkUpdater)
34+
import Development.IDE.Core.Shake (HieDbWriter(indexQueue), ShakeExtras(hiedbWriter, ideNc, logger, lspEnv), mkUpdater)
3135
import Development.IDE.GHC.Compat
3236
import qualified Development.IDE.GHC.Compat.Util as Maybes
3337
import Development.IDE.GHC.Error (catchSrcErrors)
@@ -36,9 +40,10 @@ import Development.IDE.Graph.Classes
3640
import Development.IDE.Types.Exports (ExportsMap, createExportsMap)
3741
import Development.IDE.Types.Location (toNormalizedFilePath')
3842
import qualified Development.IDE.Types.Logger as Logger
39-
import HieDb (SourceFile(FakeFile))
43+
import HieDb (SourceFile(FakeFile), removeDependencySrcFiles)
44+
import Language.LSP.Server (resRootPath)
4045
import OpenTelemetry.Eventlog (withSpan)
41-
import System.Directory (makeAbsolute)
46+
import System.Directory (doesDirectoryExist, makeAbsolute)
4247
import System.FilePath
4348

4449
-- | An 'HscEnv' with equality. Two values are considered equal
@@ -117,8 +122,22 @@ newHscEnvEqWithImportPaths envImportPaths se hscEnv deps = do
117122
return HscEnvEq{..}
118123
where
119124
indexDependencyHieFiles :: IO ()
120-
indexDependencyHieFiles = void
121-
$ Map.traverseWithKey indexPackageHieFiles packagesWithModules
125+
indexDependencyHieFiles = do
126+
dotHlsDirExists <- maybe (pure False) doesDirectoryExist mHlsDir
127+
unless dotHlsDirExists deleteMissingDependencySources
128+
void $ Map.traverseWithKey indexPackageHieFiles packagesWithModules
129+
mHlsDir :: Maybe FilePath
130+
mHlsDir = do
131+
projectDir <- resRootPath =<< lspEnv se
132+
pure $ projectDir </> ".hls"
133+
deleteMissingDependencySources :: IO ()
134+
deleteMissingDependencySources = do
135+
completionToken <- newEmptyMVar
136+
atomically $ unGetTQueue (indexQueue $ hiedbWriter se) $
137+
\withHieDb -> withHieDb $ \db -> do
138+
removeDependencySrcFiles db
139+
putMVar completionToken ()
140+
readMVar completionToken
122141
indexPackageHieFiles :: Package -> [Module] -> IO ()
123142
indexPackageHieFiles (Package package) modules = do
124143
let pkgLibDir :: FilePath

0 commit comments

Comments
 (0)