diff options
author | Boldizsar Nemeth <nboldi@elte.hu> | 2018-06-02 19:08:40 -0400 |
---|---|---|
committer | Ben Gamari <ben@smart-cactus.org> | 2018-06-02 23:20:47 -0400 |
commit | c2783ccf545faabd21a234a4dfc569cd856082b9 (patch) | |
tree | 506fa03c577a381a4bb9c74e9f9749723b3928a3 /testsuite/tests/plugins/simple-plugin/Simple/SourcePlugin.hs | |
parent | 727256680c8547282bda09dffefba01f9db98d1e (diff) | |
download | haskell-c2783ccf545faabd21a234a4dfc569cd856082b9.tar.gz |
Extended the plugin system to run plugins on more representations
Extend GHC plugins to access parsed, type checked representation,
interfaces that are loaded. And splices that are evaluated. The goal is
to enable development tools to access the GHC representation in the
pre-existing build environment.
See the full proposal here:
https://ghc.haskell.org/trac/ghc/wiki/ExtendedPluginsProposal
Reviewers: goldfire, bgamari, ezyang, angerman, mpickering
Reviewed By: mpickering
Subscribers: ezyang, angerman, mpickering, ulysses4ever, rwbarton, thomie, carter
GHC Trac Issues: #14709
Differential Revision: https://phabricator.haskell.org/D4342
Diffstat (limited to 'testsuite/tests/plugins/simple-plugin/Simple/SourcePlugin.hs')
-rw-r--r-- | testsuite/tests/plugins/simple-plugin/Simple/SourcePlugin.hs | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/testsuite/tests/plugins/simple-plugin/Simple/SourcePlugin.hs b/testsuite/tests/plugins/simple-plugin/Simple/SourcePlugin.hs new file mode 100644 index 0000000000..d5c9dd1856 --- /dev/null +++ b/testsuite/tests/plugins/simple-plugin/Simple/SourcePlugin.hs @@ -0,0 +1,52 @@ +module Simple.SourcePlugin where + +import Control.Monad.IO.Class +import Data.List (intercalate) +import Data.Maybe (isJust) +import Plugins +import HscTypes +import TcRnTypes +import HsExtension +import Avail +import HsExpr +import Outputable +import HsImpExp +import HsDecls +import HsDoc + +plugin :: Plugin +plugin = defaultPlugin { parsedResultAction = parsedPlugin + , typeCheckResultAction = typecheckPlugin + , spliceRunAction = metaPlugin' + , interfaceLoadAction = interfaceLoadPlugin' + , renamedResultAction = Just renamedAction + } + +parsedPlugin :: [CommandLineOption] -> ModSummary -> HsParsedModule + -> Hsc HsParsedModule +parsedPlugin opts _ pm + = do liftIO $ putStrLn $ "parsePlugin(" ++ intercalate "," opts ++ ")" + return pm + +renamedAction :: [CommandLineOption] -> ModSummary + -> ( HsGroup GhcRn, [LImportDecl GhcRn] + , Maybe [(LIE GhcRn, Avails)], Maybe LHsDocString ) + -> Hsc () +renamedAction _ _ ( gr, _, _, _ ) + = liftIO $ putStrLn "typeCheckPlugin (rn)" + +typecheckPlugin :: [CommandLineOption] -> ModSummary -> TcGblEnv -> Hsc TcGblEnv +typecheckPlugin _ _ tc + = do liftIO $ putStrLn "typeCheckPlugin (tc)" + return tc + +metaPlugin' :: [CommandLineOption] -> LHsExpr GhcTc -> TcM (LHsExpr GhcTc) +metaPlugin' _ meta + = do liftIO $ putStrLn $ "metaPlugin: " ++ (showSDocUnsafe $ ppr meta) + return meta + +interfaceLoadPlugin' :: [CommandLineOption] -> ModIface -> IfM lcl ModIface +interfaceLoadPlugin' _ iface + = do liftIO $ putStrLn $ "interfacePlugin: " + ++ (showSDocUnsafe $ ppr $ mi_module iface) + return iface |