diff --git a/ghcide/session-loader/Development/IDE/Session.hs b/ghcide/session-loader/Development/IDE/Session.hs index 7a88249823..b5a7ba893c 100644 --- a/ghcide/session-loader/Development/IDE/Session.hs +++ b/ghcide/session-loader/Development/IDE/Session.hs @@ -85,7 +85,6 @@ import Database.SQLite.Simple import HieDb.Create import HieDb.Types import HieDb.Utils -import Ide.Types (dynFlagsModifyGlobal) -- | Bump this version number when making changes to the format of the data stored in hiedb hiedbDataVersion :: String @@ -283,8 +282,7 @@ loadSessionWithOptions SessionLoadingOptions{..} dir = do packageSetup (hieYaml, cfp, opts, libDir) = do -- Parse DynFlags for the newly discovered component hscEnv <- emptyHscEnv ideNc libDir - (df, targets) <- evalGhcEnv hscEnv $ - first (dynFlagsModifyGlobal optModifyDynFlags) <$> setOptions opts (hsc_dflags hscEnv) + (df, targets) <- evalGhcEnv hscEnv $ setOptions opts (hsc_dflags hscEnv) let deps = componentDependencies opts ++ maybeToList hieYaml dep_info <- getDependencyInfo deps -- Now lookup to see whether we are combining with an existing HscEnv diff --git a/ghcide/src/Development/IDE/Core/Rules.hs b/ghcide/src/Development/IDE/Core/Rules.hs index 949d326509..c4cbab0d02 100644 --- a/ghcide/src/Development/IDE/Core/Rules.hs +++ b/ghcide/src/Development/IDE/Core/Rules.hs @@ -292,7 +292,10 @@ getParsedModuleWithCommentsRule = liftIO $ fmap (fmap reset_ms) $ snd <$> getParsedModuleDefinition (hscEnv sess) opt file ms getModifyDynFlags :: (DynFlagsModifications -> a) -> Action a -getModifyDynFlags f = f . optModifyDynFlags <$> getIdeOptions +getModifyDynFlags f = do + opts <- getIdeOptions + cfg <- getClientConfigAction def + pure $ f $ optModifyDynFlags opts cfg getParsedModuleDefinition diff --git a/ghcide/src/Development/IDE/Plugin.hs b/ghcide/src/Development/IDE/Plugin.hs index 531df7b593..0e682d6c9f 100644 --- a/ghcide/src/Development/IDE/Plugin.hs +++ b/ghcide/src/Development/IDE/Plugin.hs @@ -10,7 +10,7 @@ import qualified Language.LSP.Server as LSP data Plugin c = Plugin {pluginRules :: Rules () ,pluginHandlers :: LSP.Handlers (ServerM c) - ,pluginModifyDynflags :: DynFlagsModifications + ,pluginModifyDynflags :: c -> DynFlagsModifications } instance Default (Plugin c) where diff --git a/ghcide/src/Development/IDE/Plugin/HLS.hs b/ghcide/src/Development/IDE/Plugin/HLS.hs index fbaf5ea936..842b69b530 100644 --- a/ghcide/src/Development/IDE/Plugin/HLS.hs +++ b/ghcide/src/Development/IDE/Plugin/HLS.hs @@ -70,7 +70,14 @@ rulesPlugins rs = mempty { P.pluginRules = rules } rules = foldMap snd rs dynFlagsPlugins :: [(PluginId, DynFlagsModifications)] -> Plugin Config -dynFlagsPlugins rs = mempty { P.pluginModifyDynflags = foldMap snd rs } +dynFlagsPlugins rs = mempty + { P.pluginModifyDynflags = + flip foldMap rs $ \(plId, dflag_mods) cfg -> + let plg_cfg = configForPlugin cfg plId + in if plcGlobalOn plg_cfg + then dflag_mods + else mempty + } -- --------------------------------------------------------------------- diff --git a/ghcide/src/Development/IDE/Types/Options.hs b/ghcide/src/Development/IDE/Types/Options.hs index 817481dfea..2968e54abf 100644 --- a/ghcide/src/Development/IDE/Types/Options.hs +++ b/ghcide/src/Development/IDE/Types/Options.hs @@ -72,7 +72,7 @@ data IdeOptions = IdeOptions -- Otherwise, return the result of parsing without Opt_Haddock, so -- that the parsed module contains the result of Opt_KeepRawTokenStream, -- which might be necessary for hlint. - , optModifyDynFlags :: DynFlagsModifications + , optModifyDynFlags :: Config -> DynFlagsModifications -- ^ Will be called right after setting up a new cradle, -- allowing to customize the Ghc options used , optShakeOptions :: ShakeOptions