diff options
author | Daniel Gröber <dxld@darkboxed.org> | 2018-12-11 13:24:12 -0500 |
---|---|---|
committer | Ben Gamari <ben@smart-cactus.org> | 2018-12-11 14:23:22 -0500 |
commit | da05d79d03e5e03e391b381f23c46fc02957abf7 (patch) | |
tree | 4506d0f46dc5df4293ae1933d87b1367be0de831 /compiler/main/DynamicLoading.hs | |
parent | 9e763afa9f1f75eacce24291f298f32527591b14 (diff) | |
download | haskell-da05d79d03e5e03e391b381f23c46fc02957abf7.tar.gz |
Support registering Plugins through the GHC API
This allows tooling using the GHC API to use plugins internally.
Hopefully this will make it possible to decouple the development of
useful plugins from (currently) kitchen-sink type tooling projects
such as ghc-mod or HIE -- at least to some extent.
Test Plan: validate
Reviewers: bgamari, mpickering
Subscribers: mpickering, alanz, rwbarton, carter
GHC Trac Issues: #15826
Differential Revision: https://phabricator.haskell.org/D5278
Diffstat (limited to 'compiler/main/DynamicLoading.hs')
-rw-r--r-- | compiler/main/DynamicLoading.hs | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/compiler/main/DynamicLoading.hs b/compiler/main/DynamicLoading.hs index 7420f7cc01..0a5264e3f2 100644 --- a/compiler/main/DynamicLoading.hs +++ b/compiler/main/DynamicLoading.hs @@ -83,13 +83,15 @@ initializePlugins _ df return df #else initializePlugins hsc_env df - | map lpModuleName (plugins df) == pluginModNames df -- plugins not changed - && all (\p -> lpArguments p == argumentsForPlugin p (pluginModNameOpts df)) - (plugins df) -- arguments not changed + | map lpModuleName (cachedPlugins df) + == pluginModNames df -- plugins not changed + && all (\p -> paArguments (lpPlugin p) + == argumentsForPlugin p (pluginModNameOpts df)) + (cachedPlugins df) -- arguments not changed = return df -- no need to reload plugins | otherwise = do loadedPlugins <- loadPlugins (hsc_env { hsc_dflags = df }) - return $ df { plugins = loadedPlugins } + return $ df { cachedPlugins = loadedPlugins } where argumentsForPlugin p = map snd . filter ((== lpModuleName p) . fst) #endif @@ -106,7 +108,8 @@ loadPlugins hsc_env dflags = hsc_dflags hsc_env to_load = pluginModNames dflags - attachOptions mod_nm (plug, mod) = LoadedPlugin plug mod (reverse options) + attachOptions mod_nm (plug, mod) = + LoadedPlugin (PluginWithArgs plug (reverse options)) mod where options = [ option | (opt_mod_nm, option) <- pluginModNameOpts dflags , opt_mod_nm == mod_nm ] |