{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE TemplateHaskell #-}
module Language.Haskell.Tools.Daemon.State where
import Control.Concurrent
import Control.Reference
import Data.Set
import GHC
import System.FSWatch.Repr
import Language.Haskell.Tools.Daemon.PackageDB
import Language.Haskell.Tools.Daemon.Protocol
import Language.Haskell.Tools.Daemon.Representation
import Language.Haskell.Tools.Refactor
data DaemonSessionState
= DaemonSessionState { _refSessMCs :: [ModuleCollection SourceFileKey]
, _packageDB :: Maybe (PackageDB, Bool)
, _ghcFlagsSet :: DynFlags -> DynFlags
, _pkgDbFlags :: DynFlags -> DynFlags
, _packageDBLocs :: [FilePath]
, _exiting :: Bool
, _undoStack :: [[UndoRefactor]]
, _watchProc :: Maybe WatchProcess
, _watchThreads :: [ThreadId]
, _touchedFiles :: Set FilePath
}
initSession :: DaemonSessionState
initSession = DaemonSessionState [] Nothing id id [] False [] Nothing [] empty
resetSession :: DaemonSessionState -> DaemonSessionState
resetSession DaemonSessionState{..} = initSession { _packageDB, _ghcFlagsSet }
makeReferences ''DaemonSessionState