mirror of
https://github.com/haskell/haskell-ide-engine.git
synced 2024-09-19 06:47:14 +03:00
Use hie data type BiosOptions instead of ghc-mod Options
This commit is contained in:
parent
fbd686086d
commit
1d4a52c123
@ -5,7 +5,6 @@ module Main where
|
||||
import Control.Monad
|
||||
import Data.Monoid ((<>))
|
||||
import Data.Version (showVersion)
|
||||
import qualified GhcMod.Types as GM
|
||||
import Haskell.Ide.Engine.MonadFunctions
|
||||
import Haskell.Ide.Engine.MonadTypes
|
||||
import Haskell.Ide.Engine.Options
|
||||
@ -121,13 +120,12 @@ run opts = do
|
||||
d <- getCurrentDirectory
|
||||
logm $ "Current directory:" ++ d
|
||||
|
||||
let vomitOptions = GM.defaultOptions { GM.optOutput = oo { GM.ooptLogLevel = GM.GmVomit}}
|
||||
oo = GM.optOutput GM.defaultOptions
|
||||
let defaultOpts = if optGhcModVomit opts then vomitOptions else GM.defaultOptions
|
||||
let vomitOptions = defaultOptions { boLogging = BlVomit}
|
||||
let defaultOpts = if optGhcModVomit opts then vomitOptions else defaultOptions
|
||||
-- Running HIE on projects with -Werror breaks most of the features since all warnings
|
||||
-- will be treated with the same severity of type errors. In order to offer a more useful
|
||||
-- experience, we make sure warnings are always reported as warnings by setting -Wwarn
|
||||
ghcModOptions = defaultOpts { GM.optGhcUserOptions = ["-Wwarn"] }
|
||||
biosOptions = defaultOpts { boGhcUserOptions = ["-Wwarn"] }
|
||||
|
||||
when (optGhcModVomit opts) $
|
||||
logm "Enabling --vomit for ghc-mod. Output will be on stderr"
|
||||
@ -139,8 +137,8 @@ run opts = do
|
||||
|
||||
-- launch the dispatcher.
|
||||
if optJson opts then do
|
||||
scheduler <- newScheduler plugins' ghcModOptions
|
||||
scheduler <- newScheduler plugins' biosOptions
|
||||
jsonStdioTransport scheduler
|
||||
else do
|
||||
scheduler <- newScheduler plugins' ghcModOptions
|
||||
scheduler <- newScheduler plugins' biosOptions
|
||||
lspStdioTransport scheduler origDir plugins' (optCaptureFile opts)
|
||||
|
@ -28,10 +28,8 @@ setTypecheckedModule
|
||||
|
||||
module Haskell.Ide.Engine.PluginApi
|
||||
(
|
||||
-- ** Re-exported from ghc-mod
|
||||
GM.Options(..)
|
||||
, GM.defaultOptions
|
||||
, GP.GmModuleGraph(..)
|
||||
-- ** Re-exported from ghc-mod via ghc-project-types
|
||||
GP.GmModuleGraph(..)
|
||||
, GP.ModulePath(..)
|
||||
, GP.GmComponent(..)
|
||||
, GP.GmComponentType(..)
|
||||
@ -60,21 +58,14 @@ module Haskell.Ide.Engine.PluginApi
|
||||
, HIE.CachedInfo(..)
|
||||
|
||||
-- * used for tests in HaRe
|
||||
, GM.globalArgSpec
|
||||
, GM.OutputOpts(..)
|
||||
, GM.GmLogLevel(..)
|
||||
, GM.OutputStyle(..)
|
||||
, GM.LineSeparator(..)
|
||||
, HIE.BiosLogLevel(..)
|
||||
, HIE.BiosOptions(..)
|
||||
, HIE.defaultOptions
|
||||
) where
|
||||
|
||||
import qualified GhcMod.Options.Options as GM (globalArgSpec)
|
||||
-- import qualified GhcMod.Types as GM (ModulePath(..),GmModuleGraph(..),GmComponent(..),GmComponentType(..),OutputOpts(..),GmLogLevel(..),OutputStyle(..),LineSeparator(..))
|
||||
import qualified GhcMod.Types as GM (OutputOpts(..),GmLogLevel(..),OutputStyle(..),LineSeparator(..))
|
||||
import qualified GhcMod.Utils as GM (mkRevRedirMapFunc)
|
||||
import qualified GhcModCore as GM (Options(..),defaultOptions)
|
||||
import qualified GhcProject.Types as GP
|
||||
import qualified GhcProject.Types as GP
|
||||
import qualified Haskell.Ide.Engine.Ghc as HIE
|
||||
import qualified Haskell.Ide.Engine.GhcModuleCache as HIE (CachedInfo(..),HasGhcModuleCache(..))
|
||||
import qualified Haskell.Ide.Engine.GhcModuleCache as HIE (CachedInfo(..),HasGhcModuleCache(..))
|
||||
import qualified Haskell.Ide.Engine.ModuleCache as HIE (ifCachedModule)
|
||||
import qualified Haskell.Ide.Engine.PluginsIdeMonads as HIE
|
||||
import qualified Language.Haskell.LSP.Types as LSP ( filePathToUri )
|
||||
|
@ -75,6 +75,11 @@ module Haskell.Ide.Engine.PluginsIdeMonads
|
||||
, PublishDiagnosticsParams(..)
|
||||
, List(..)
|
||||
, FormattingOptions(..)
|
||||
-- * Options
|
||||
, BiosLogLevel(..)
|
||||
, BiosOptions(..)
|
||||
, defaultOptions
|
||||
, mkGhcModOptions
|
||||
)
|
||||
where
|
||||
|
||||
@ -84,7 +89,7 @@ import Control.Monad.IO.Class
|
||||
import Control.Monad.Reader
|
||||
import Control.Monad.Trans.Free
|
||||
|
||||
import Data.Aeson
|
||||
import Data.Aeson hiding (defaultOptions)
|
||||
import qualified Data.ConstrainedDynamic as CD
|
||||
import Data.Default
|
||||
import qualified Data.List as List
|
||||
@ -107,11 +112,10 @@ import qualified DynFlags as GHC
|
||||
import qualified GHC as GHC
|
||||
import qualified HscTypes as GHC
|
||||
|
||||
|
||||
import Haskell.Ide.Engine.Compat
|
||||
import Haskell.Ide.Engine.Config
|
||||
import Haskell.Ide.Engine.MultiThreadState
|
||||
import Haskell.Ide.Engine.GhcModuleCache
|
||||
import Haskell.Ide.Engine.MultiThreadState
|
||||
|
||||
import qualified Language.Haskell.LSP.Core as Core
|
||||
import Language.Haskell.LSP.Types.Capabilities
|
||||
@ -319,23 +323,24 @@ getDiagnosticProvidersConfig c = Map.fromList [("applyrefact",hlintOn c)
|
||||
type IdeGhcM = GM.GhcModT IdeM
|
||||
|
||||
-- | Run an IdeGhcM with Cradle found from the current directory
|
||||
runIdeGhcM :: GM.Options -> IdePlugins -> Maybe (Core.LspFuncs Config) -> TVar IdeState -> IdeGhcM a -> IO a
|
||||
runIdeGhcM ghcModOptions plugins mlf stateVar f = do
|
||||
runIdeGhcM :: BiosOptions -> IdePlugins -> Maybe (Core.LspFuncs Config) -> TVar IdeState -> IdeGhcM a -> IO a
|
||||
runIdeGhcM biosOptions plugins mlf stateVar f = do
|
||||
env <- IdeEnv <$> pure mlf <*> getProcessID <*> pure plugins
|
||||
let ghcModOptions = mkGhcModOptions biosOptions
|
||||
(eres, _) <- flip runReaderT stateVar $ flip runReaderT env $ GM.runGhcModT ghcModOptions f
|
||||
case eres of
|
||||
Left err -> liftIO $ throwIO err
|
||||
Right res -> return res
|
||||
|
||||
-- | Run an IdeGhcM in an external context (e.g. HaRe), with no plugins or LSP functions
|
||||
runIdeGhcMBare :: GM.Options -> IdeGhcM a -> IO a
|
||||
runIdeGhcMBare ghcModOptions f = do
|
||||
runIdeGhcMBare :: BiosOptions -> IdeGhcM a -> IO a
|
||||
runIdeGhcMBare biosOptions f = do
|
||||
let
|
||||
plugins = IdePlugins Map.empty
|
||||
mlf = Nothing
|
||||
initialState = IdeState emptyModuleCache Map.empty Map.empty Nothing
|
||||
stateVar <- newTVarIO initialState
|
||||
runIdeGhcM ghcModOptions plugins mlf stateVar f
|
||||
runIdeGhcM biosOptions plugins mlf stateVar f
|
||||
|
||||
-- | A computation that is deferred until the module is cached.
|
||||
-- Note that the module may not typecheck, in which case 'UriCacheFailed' is passed
|
||||
@ -536,3 +541,45 @@ data IdeError = IdeError
|
||||
|
||||
instance ToJSON IdeError
|
||||
instance FromJSON IdeError
|
||||
|
||||
-- ---------------------------------------------------------------------
|
||||
-- Probably need to move this some time, but hitting import cycle issues
|
||||
|
||||
data BiosLogLevel =
|
||||
BlError
|
||||
| BlWarning
|
||||
| BlInfo
|
||||
| BlDebug
|
||||
| BlVomit
|
||||
deriving (Eq, Ord, Enum, Bounded, Show, Read)
|
||||
|
||||
data BiosOptions = BiosOptions {
|
||||
boGhcUserOptions :: [String]
|
||||
, boLogging :: BiosLogLevel
|
||||
} deriving Show
|
||||
|
||||
defaultOptions :: BiosOptions
|
||||
defaultOptions = BiosOptions {
|
||||
boGhcUserOptions = []
|
||||
, boLogging = BlWarning
|
||||
}
|
||||
|
||||
fmBiosLog :: BiosLogLevel -> GM.GmLogLevel
|
||||
fmBiosLog bl = case bl of
|
||||
BlError -> GM.GmError
|
||||
BlWarning -> GM.GmWarning
|
||||
BlInfo -> GM.GmInfo
|
||||
BlDebug -> GM.GmDebug
|
||||
BlVomit -> GM.GmVomit
|
||||
|
||||
-- ---------------------------------------------------------------------
|
||||
|
||||
-- | Apply BiosOptions to default ghc-mod Options
|
||||
mkGhcModOptions :: BiosOptions -> GM.Options
|
||||
mkGhcModOptions bo = GM.defaultOptions
|
||||
{
|
||||
GM.optGhcUserOptions = boGhcUserOptions bo
|
||||
, GM.optOutput = (GM.optOutput GM.defaultOptions) { GM.ooptLogLevel = fmBiosLog (boLogging bo) }
|
||||
}
|
||||
|
||||
-- ---------------------------------------------------------------------
|
||||
|
@ -41,7 +41,7 @@ import qualified GhcMod.Gap as GM
|
||||
import qualified GhcMod.SrcUtils as GM
|
||||
import qualified GhcMod.Types as GM
|
||||
import Haskell.Ide.Engine.Ghc
|
||||
import Haskell.Ide.Engine.MonadTypes
|
||||
import Haskell.Ide.Engine.MonadTypes hiding (defaultOptions)
|
||||
import Haskell.Ide.Engine.PluginUtils
|
||||
import qualified Haskell.Ide.Engine.Support.HieExtras as Hie
|
||||
import Haskell.Ide.Engine.ArtifactMap
|
||||
|
@ -60,8 +60,8 @@ data Scheduler m = Scheduler
|
||||
{ plugins :: IdePlugins
|
||||
-- ^ The list of plugins that will be used for responding to requests
|
||||
|
||||
, ghcModOptions :: GM.Options
|
||||
-- ^ Options for the ghc-mod session. Since we only keep a single ghc-mod session
|
||||
, biosOptions :: BiosOptions
|
||||
-- ^ Options for the bios session. Since we only keep a single bios session
|
||||
-- at a time, this cannot be changed a runtime.
|
||||
|
||||
, requestsToCancel :: STM.TVar (Set.Set J.LspId)
|
||||
@ -99,10 +99,10 @@ class HasScheduler a m where
|
||||
newScheduler
|
||||
:: IdePlugins
|
||||
-- ^ The list of plugins that will be used for responding to requests
|
||||
-> GM.Options
|
||||
-> BiosOptions
|
||||
-- ^ Options for the ghc-mod session. Since we only keep a single ghc-mod session
|
||||
-> IO (Scheduler m)
|
||||
newScheduler plugins ghcModOptions = do
|
||||
newScheduler plugins biosOpts = do
|
||||
cancelTVar <- STM.atomically $ STM.newTVar Set.empty
|
||||
wipTVar <- STM.atomically $ STM.newTVar Set.empty
|
||||
versionTVar <- STM.atomically $ STM.newTVar Map.empty
|
||||
@ -110,7 +110,7 @@ newScheduler plugins ghcModOptions = do
|
||||
ghcChan <- Channel.newChan
|
||||
return $ Scheduler
|
||||
{ plugins = plugins
|
||||
, ghcModOptions = ghcModOptions
|
||||
, biosOptions = biosOpts
|
||||
, requestsToCancel = cancelTVar
|
||||
, requestsInProgress = wipTVar
|
||||
, documentVersions = versionTVar
|
||||
@ -152,7 +152,7 @@ runScheduler Scheduler {..} errorHandler callbackHandler mlf = do
|
||||
|
||||
stateVar <- STM.newTVarIO initialState
|
||||
|
||||
let runGhcDisp = runIdeGhcM ghcModOptions plugins mlf stateVar $
|
||||
let runGhcDisp = runIdeGhcM biosOptions plugins mlf stateVar $
|
||||
ghcDispatcher dEnv errorHandler callbackHandler ghcChanOut
|
||||
runIdeDisp = runIdeM plugins mlf stateVar $
|
||||
ideDispatcher dEnv errorHandler callbackHandler ideChanOut
|
||||
|
@ -25,8 +25,8 @@ import Data.Typeable
|
||||
import Data.Yaml
|
||||
import qualified Data.Map as Map
|
||||
import Data.Maybe
|
||||
import qualified GhcMod.Monad as GM
|
||||
import qualified GhcMod.Types as GM
|
||||
-- import qualified GhcMod.Monad as GM
|
||||
-- import qualified GhcMod.Types as GM
|
||||
import qualified Language.Haskell.LSP.Core as Core
|
||||
import Haskell.Ide.Engine.MonadTypes
|
||||
import System.Directory
|
||||
@ -41,16 +41,12 @@ import Text.Blaze.Internal
|
||||
|
||||
-- ---------------------------------------------------------------------
|
||||
|
||||
testOptions :: GM.Options
|
||||
testOptions = GM.defaultOptions {
|
||||
GM.optOutput = GM.OutputOpts {
|
||||
GM.ooptLogLevel = GM.GmError
|
||||
-- GM.ooptLogLevel = GM.GmVomit
|
||||
, GM.ooptStyle = GM.PlainStyle
|
||||
, GM.ooptLineSeparator = GM.LineSeparator "\0"
|
||||
, GM.ooptLinePrefix = Nothing
|
||||
}
|
||||
|
||||
testOptions :: BiosOptions
|
||||
testOptions = defaultOptions {
|
||||
boLogging = BlError
|
||||
-- boLoggingg = BlDebug
|
||||
-- boLoggingg = BlVomit
|
||||
-- , boGhcUserOptions = ["-v4", "-DDEBUG"]
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user