Skip to content
Draft
Changes from 1 commit
Commits
Show all changes
92 commits
Select commit Hold shift + click to select a range
58b8b68
Refactor session loading to manage pending files so we can batch load…
soulomoon Nov 2, 2024
ea002d7
distribute errors to all pending files are being loading
soulomoon Nov 3, 2024
c78b197
better filter loading files
soulomoon Nov 3, 2024
b879375
fallback to non-batch load
soulomoon Nov 4, 2024
8953aec
typo
soulomoon Nov 4, 2024
4bdc2c8
update inline doc
soulomoon Nov 4, 2024
c4bb53a
update inline doc
soulomoon Nov 4, 2024
112bc95
add LogSessionReloadOnError to log errors during file reloads; cleanu…
soulomoon Nov 4, 2024
9a2aaf1
Merge branch 'master' into batch-load
soulomoon Nov 4, 2024
6e04d28
refactor loadSessionWithOptions to improve error handling and clarify…
soulomoon Nov 4, 2024
67aebc4
refactor loadSessionWithOptions to improve pending file handling and …
soulomoon Nov 4, 2024
98ae446
add doc about limitation
soulomoon Nov 4, 2024
f3eb580
absolute file at the beginning
soulomoon Nov 5, 2024
e7bd3d4
run session loader and worker in sperate
soulomoon Nov 7, 2024
1f97c40
cleanup
soulomoon Nov 7, 2024
4c998bd
rename LogGetSessionRetry to LogLookupSessionCache for clarity in log…
soulomoon Nov 8, 2024
79a43a0
extract attempt to load files from errors
soulomoon Nov 9, 2024
beb1764
refactor session loading to wait for pending files before cache check
soulomoon Nov 12, 2024
6139522
add LogTime to logging for improved time tracking during session loading
soulomoon Nov 18, 2024
7314509
refactor session loading to handle dependency checks more clearly
soulomoon Nov 19, 2024
cddcc55
Refactors session loading logic
soulomoon Nov 19, 2024
4c99c47
Merge branch 'master' into batch-load-multi-read
soulomoon Dec 6, 2024
bb78a36
delay the restart
soulomoon Dec 6, 2024
33f788c
Merge branch 'master' into batch-load-multi-read
soulomoon Jan 8, 2025
0913d2e
Merge branch 'master' into batch-load-multi-read
soulomoon Feb 4, 2025
58ec7ea
re-inline the old file instead of loading it twice
soulomoon Feb 17, 2025
60e8427
Merge branch 'master' into batch-load-multi-read
soulomoon Feb 17, 2025
d943963
update upload artifact action version
soulomoon Feb 18, 2025
5d01500
update hie-bios tag
soulomoon Feb 25, 2025
10a6f7e
Update hie-bios tag to latest commit
soulomoon Feb 26, 2025
de6d5f3
Merge branch 'master' into batch-load-multi-read
soulomoon Mar 2, 2025
45b1241
update hie-bios
soulomoon Mar 2, 2025
219db46
update index-state to reflect the latest project state
soulomoon Mar 2, 2025
2f86db0
update index-state to reflect the new date
soulomoon Mar 3, 2025
de98232
update fourmolu dependency version constraints
soulomoon Mar 6, 2025
f0a881d
remove ListT from library dependencies
soulomoon Mar 6, 2025
14f6a3b
update hie-bios to a new tag
soulomoon Mar 6, 2025
8b0e246
update fourmolu dependency version constraints to allow 0.16
soulomoon Mar 6, 2025
2dd71c0
add allow-newer constraint for Cabal-syntax
soulomoon Mar 6, 2025
b8406d6
remove allow-newer constraint for Cabal-syntax
soulomoon Mar 6, 2025
5ea3d87
bump actions/checkout and actions/upload-artifact to v3
soulomoon Mar 6, 2025
3e0c27b
Revert "bump actions/checkout and actions/upload-artifact to v3"
soulomoon Mar 6, 2025
8c27e34
add allow-older constraint for optparse-applicative in cabal.project
soulomoon Mar 7, 2025
bb0a541
Merge branch 'master' into batch-load-multi-read
soulomoon Mar 13, 2025
e491f60
Merge branch 'master' into batch-load-multi-read
soulomoon Mar 20, 2025
d5c2326
Merge branch 'master' into batch-load-multi-read
soulomoon Mar 27, 2025
9efcb2e
Merge branch 'master' into batch-load-multi-read
soulomoon Apr 6, 2025
c883a09
Merge branch 'master' into batch-load-multi-read
soulomoon Apr 16, 2025
9f9b8f7
Merge branch 'master' into batch-load-multi-read
soulomoon Apr 24, 2025
b0af634
update hie-bios
soulomoon Apr 24, 2025
06fa5de
introduce SessionState
soulomoon Apr 27, 2025
78e01a8
Merge branch 'master' into batch-load-multi-read
soulomoon Apr 27, 2025
80d0160
update hiebois
soulomoon Apr 27, 2025
24269f6
revert
soulomoon Apr 28, 2025
98999f5
restart the shake if cabal file changed
soulomoon Apr 28, 2025
21dd233
better error handling in session loader
soulomoon Apr 28, 2025
f140a2a
refactor error handling in loadSessionWithOptions to improve clarity …
soulomoon Apr 28, 2025
e339c1d
refactor SessionState management for improved batch loading logic
soulomoon Apr 28, 2025
1425289
refactor session loading error handling for improved clarity and sepa…
soulomoon Apr 28, 2025
de6eb9c
cleanup
soulomoon May 8, 2025
db18100
Merge branch 'master' into batch-load-multi-read
soulomoon May 8, 2025
c9926d4
fix
soulomoon May 8, 2025
48a46d1
add sessionLoadingPreferenceConfig var to SessionState
soulomoon May 8, 2025
90e1df1
Merge branch 'master' into batch-load-multi-read
soulomoon May 12, 2025
702e367
refactor SessionState to use Var instead of IORef for loaded and fail…
soulomoon May 14, 2025
09213d3
simplified
soulomoon May 19, 2025
4a78e6e
Merge branch 'master' into batch-load-multi-read
soulomoon May 26, 2025
4cb5a70
Merge branch 'master' into batch-load-multi-read
soulomoon Jun 3, 2025
005f573
Merge branch 'master' into batch-load-multi-read
soulomoon Jun 4, 2025
db8b1ac
Merge branch 'master' into batch-load-multi-read
soulomoon Jun 13, 2025
f768db0
Extract top-level functions for session initialisation
fendor Jun 21, 2025
a92ffb1
Merge branch 'master' into batch-load-multi-read
soulomoon Jun 23, 2025
d4fbc2c
Remove unused _removeInplacePackages function
fendor Jul 4, 2025
ff807c3
Introduce SessionM for bundling read-only variables
fendor Jul 4, 2025
1aa1e2c
Extract ghc specific functions into separate module
fendor Jul 4, 2025
aff67c0
Merge remote-tracking branch 'upstream/master' into batch-load-multi-…
fendor Jul 4, 2025
8957a42
Merge branch 'master' into batch-load-multi-read
soulomoon Jul 17, 2025
7d106cf
fix duplication
soulomoon Jul 18, 2025
ddef7d4
Remove RTS options from multi-unit configuration files
soulomoon Aug 4, 2025
3a4ddda
merge master
soulomoon Aug 4, 2025
d5632d6
format
soulomoon Aug 4, 2025
4c5bc35
apply the patch from https://github.com/haskell/haskell-language-serv…
soulomoon Aug 4, 2025
d943452
add comments for orderedSet
soulomoon Aug 4, 2025
bd79156
update comments for orderedSet
soulomoon Aug 4, 2025
dc34df6
fix import
soulomoon Aug 4, 2025
71d6575
refactor OrderedSet to use a record for better clarity and structure
soulomoon Aug 5, 2025
ac1d36d
Merge branch 'master' into batch-load-multi-read
soulomoon Aug 9, 2025
504d71d
merge master in
soulomoon Aug 11, 2025
dd6b562
merge master in
soulomoon Aug 11, 2025
24738d6
session: move handleBatchLoadSuccess inside
soulomoon Aug 19, 2025
468b992
Merge branch 'master' into batch-load-multi-read
soulomoon Aug 20, 2025
f6d05c7
Merge branch 'master' into batch-load-multi-read
soulomoon Aug 22, 2025
File filter

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
update inline doc
  • Loading branch information
soulomoon committed Nov 4, 2024
commit c4bb53a267c5173394ce330f33e84d6da497541a
2 changes: 1 addition & 1 deletion ghcide/session-loader/Development/IDE/Session.hs
Original file line number Diff line number Diff line change
Expand Up @@ -438,8 +438,8 @@
-- they are inconsistent. So, everywhere you modify 'fileToFlags',
-- you have to modify 'filesMap' as well.
filesMap <- newVar HM.empty :: IO (Var FilesMap)
pendingFilesTQueue <- newTQueueIO
-- Pending files waiting to be loaded
pendingFilesTQueue <- newTQueueIO
-- Version of the mappings above
version <- newVar 0
biosSessionLoadingVar <- newVar Nothing :: IO (Var (Maybe SessionLoadingPreferenceConfig))
Expand Down Expand Up @@ -606,7 +606,7 @@
let !exportsMap' = createExportsMap $ mapMaybe (fmap hirModIface) modIfaces
liftIO $ atomically $ modifyTVar' (exportsMap shakeExtras) (exportsMap' <>)
return [keys1, keys2]
return $ (second Map.keys this_options, Set.fromList $ fromNormalizedFilePath <$> newLoaded)

Check warning on line 609 in ghcide/session-loader/Development/IDE/Session.hs

View workflow job for this annotation

GitHub Actions / Hlint check run

Suggestion in loadSessionWithOptions in module Development.IDE.Session: Redundant $ ▫︎ Found: "return\n $ (second Map.keys this_options, \n Set.fromList $ fromNormalizedFilePath <$> newLoaded)" ▫︎ Perhaps: "return\n (second Map.keys this_options, \n Set.fromList $ fromNormalizedFilePath <$> newLoaded)"

let consultCradle :: Maybe FilePath -> FilePath -> IO (IdeResult HscEnvEq, [FilePath])
consultCradle hieYaml cfp = do
Expand Down Expand Up @@ -656,18 +656,18 @@
-- log new loaded files
logWith recorder Info $ LogSessionNewLoadedFiles $ Set.toList newLoadedT
-- remove the file from error loading files
atomicModifyIORef' cradle_files (\xs -> (newLoadedT <> xs,()))

Check warning on line 659 in ghcide/session-loader/Development/IDE/Session.hs

View workflow job for this annotation

GitHub Actions / Hlint check run

Warning in loadSessionWithOptions in module Development.IDE.Session: Use atomicModifyIORef'_ ▫︎ Found: "atomicModifyIORef' cradle_files (\\ xs -> (newLoadedT <> xs, ()))" ▫︎ Perhaps: "atomicModifyIORef'_ cradle_files ((<>) newLoadedT)"
atomicModifyIORef' error_loading_files (\old -> (old `Set.difference` newLoadedT, ()))
return results
| otherwise -> return (([renderPackageSetupException cfp GhcVersionMismatch{..}], Nothing),[])
-- Failure case, either a cradle error or the none cradle
Left err -> do
if (length toLoads > 1)

Check warning on line 665 in ghcide/session-loader/Development/IDE/Session.hs

View workflow job for this annotation

GitHub Actions / Hlint check run

Suggestion in loadSessionWithOptions in module Development.IDE.Session: Redundant bracket ▫︎ Found: "if (length toLoads > 1) then\n do succLoaded_files <- readIORef cradle_files\n let failedLoadingFiles\n = (Set.insert cfp toLoads) `Set.difference` succLoaded_files\n atomicModifyIORef'\n error_loading_files (\\ xs -> (failedLoadingFiles <> xs, ()))\n atomically $ forM_ pendingFiles (writeTQueue pendingFilesTQueue)\n consultCradle hieYaml cfp\nelse\n do dep_info <- getDependencyInfo (maybeToList hieYaml)\n let ncfp = toNormalizedFilePath' cfp\n let res\n = (map (\\ err' -> renderCradleError err' cradle ncfp) err, Nothing)\n void\n $ modifyVar' fileToFlags\n $ Map.insertWith\n HM.union hieYaml (HM.singleton ncfp (res, dep_info))\n void $ modifyVar' filesMap $ HM.insert ncfp hieYaml\n return\n (res, \n maybe [] pure hieYaml ++ concatMap cradleErrorDependencies err)" ▫︎ Perhaps: "if length toLoads > 1 then\n do succLoaded_files <- readIORef cradle_files\n let failedLoadingFiles\n = (Set.insert cfp toLoads) `Set.difference` succLoaded_files\n atomicModifyIORef'\n error_loading_files (\\ xs -> (failedLoadingFiles <> xs, ()))\n atomically $ forM_ pendingFiles (writeTQueue pendingFilesTQueue)\n consultCradle hieYaml cfp\nelse\n do dep_info <- getDependencyInfo (maybeToList hieYaml)\n let ncfp = toNormalizedFilePath' cfp\n let res\n = (map (\\ err' -> renderCradleError err' cradle ncfp) err, Nothing)\n void\n $ modifyVar' fileToFlags\n $ Map.insertWith\n HM.union hieYaml (HM.singleton ncfp (res, dep_info))\n void $ modifyVar' filesMap $ HM.insert ncfp hieYaml\n return\n (res, \n maybe [] pure hieYaml ++ concatMap cradleErrorDependencies err)"
then do
succLoaded_files <- readIORef cradle_files
-- mark as less loaded files as failedLoadingFiles as possible
let failedLoadingFiles = (Set.insert cfp toLoads) `Set.difference` succLoaded_files

Check warning on line 669 in ghcide/session-loader/Development/IDE/Session.hs

View workflow job for this annotation

GitHub Actions / Hlint check run

Suggestion in loadSessionWithOptions in module Development.IDE.Session: Redundant bracket ▫︎ Found: "(Set.insert cfp toLoads) `Set.difference` succLoaded_files" ▫︎ Perhaps: "Set.insert cfp toLoads `Set.difference` succLoaded_files"
atomicModifyIORef' error_loading_files (\xs -> (failedLoadingFiles <> xs,()))

Check warning on line 670 in ghcide/session-loader/Development/IDE/Session.hs

View workflow job for this annotation

GitHub Actions / Hlint check run

Warning in loadSessionWithOptions in module Development.IDE.Session: Use atomicModifyIORef'_ ▫︎ Found: "atomicModifyIORef'\n error_loading_files (\\ xs -> (failedLoadingFiles <> xs, ()))" ▫︎ Perhaps: "atomicModifyIORef'_ error_loading_files ((<>) failedLoadingFiles)"
-- retry without other files
atomically $ forM_ pendingFiles (writeTQueue pendingFilesTQueue)
consultCradle hieYaml cfp
Expand Down Expand Up @@ -721,8 +721,8 @@
then do
-- todo invoke the action to recompile the file
-- if deps are old, we can try to load the error files again
atomicModifyIORef' error_loading_files (\xs -> (Set.delete file xs,()))

Check warning on line 724 in ghcide/session-loader/Development/IDE/Session.hs

View workflow job for this annotation

GitHub Actions / Hlint check run

Warning in loadSessionWithOptions in module Development.IDE.Session: Use atomicModifyIORef'_ ▫︎ Found: "atomicModifyIORef'\n error_loading_files (\\ xs -> (Set.delete file xs, ()))" ▫︎ Perhaps: "atomicModifyIORef'_ error_loading_files (Set.delete file)"
atomicModifyIORef' cradle_files (\xs -> (Set.delete file xs,()))

Check warning on line 725 in ghcide/session-loader/Development/IDE/Session.hs

View workflow job for this annotation

GitHub Actions / Hlint check run

Warning in loadSessionWithOptions in module Development.IDE.Session: Use atomicModifyIORef'_ ▫︎ Found: "atomicModifyIORef' cradle_files (\\ xs -> (Set.delete file xs, ()))" ▫︎ Perhaps: "atomicModifyIORef'_ cradle_files (Set.delete file)"
-- If the dependencies are out of date then clear both caches and start
-- again.
modifyVar_ fileToFlags (const (return Map.empty))
Expand Down Expand Up @@ -920,7 +920,7 @@
x <- bagToList $ mapBag errMsgDiagnostic $ unionManyBags $ map Compat.getMessages closure_errs
DriverHomePackagesNotClosed us <- pure x
pure us
isBad ci = (homeUnitId_ (componentDynFlags ci)) `OS.member` bad_units

Check warning on line 923 in ghcide/session-loader/Development/IDE/Session.hs

View workflow job for this annotation

GitHub Actions / Hlint check run

Suggestion in newComponentCache in module Development.IDE.Session: Redundant bracket ▫︎ Found: "(homeUnitId_ (componentDynFlags ci)) `OS.member` bad_units" ▫︎ Perhaps: "homeUnitId_ (componentDynFlags ci) `OS.member` bad_units"
-- Whenever we spin up a session on Linux, dynamically load libm.so.6
-- in. We need this in case the binary is statically linked, in which
-- case the interactive session will fail when trying to load
Expand Down
Loading