{-# LANGUAGE RankNTypes #-}
module Development.IDE.Types.Options
( IdeOptions(..)
, IdeReportProgress(..)
, clientSupportsProgress
, IdePkgLocationOptions(..)
, defaultIdeOptions
) where
import Data.Maybe
import Development.Shake
import GHC hiding (parseModule, typecheckModule)
import GhcPlugins as GHC hiding (fst3, (<>))
import qualified Language.Haskell.LSP.Types.Capabilities as LSP
data IdeOptions = IdeOptions
{ optPreprocessor :: GHC.ParsedSource -> ([(GHC.SrcSpan, String)], GHC.ParsedSource)
, optGhcSession :: Action HscEnv
, optPkgLocationOpts :: IdePkgLocationOptions
, optExtensions :: [String]
, optThreads :: Int
, optShakeProfiling :: Maybe FilePath
, optReportProgress :: IdeReportProgress
, optLanguageSyntax :: String
, optNewColonConvention :: Bool
}
newtype IdeReportProgress = IdeReportProgress Bool
clientSupportsProgress :: LSP.ClientCapabilities -> IdeReportProgress
clientSupportsProgress caps = IdeReportProgress $ fromMaybe False $
LSP._progress =<< LSP._window (caps :: LSP.ClientCapabilities)
defaultIdeOptions :: Action HscEnv -> IdeOptions
defaultIdeOptions session = IdeOptions
{optPreprocessor = (,) []
,optGhcSession = session
,optExtensions = ["hs"]
,optPkgLocationOpts = defaultIdePkgLocationOptions
,optThreads = 0
,optShakeProfiling = Nothing
,optReportProgress = IdeReportProgress False
,optLanguageSyntax = "haskell"
,optNewColonConvention = False
}
data IdePkgLocationOptions = IdePkgLocationOptions
{ optLocateHieFile :: PackageConfig -> Module -> IO (Maybe FilePath)
, optLocateSrcFile :: PackageConfig -> Module -> IO (Maybe FilePath)
}
defaultIdePkgLocationOptions :: IdePkgLocationOptions
defaultIdePkgLocationOptions = IdePkgLocationOptions f f
where f _ _ = return Nothing