Implement -hide-all-plugin-packages and -plugin-package(-id), fixing #11244
authorEdward Z. Yang <ezyang@cs.stanford.edu>
Sat, 19 Dec 2015 02:29:52 +0000 (18:29 -0800)
committerEdward Z. Yang <ezyang@cs.stanford.edu>
Tue, 22 Dec 2015 22:23:16 +0000 (14:23 -0800)
commit1faf1fcaebb2871f8085b01d0c6d19eec11dc808
treeff61505ef4e115f5b13933b5e05a574d507629f5
parent998739df630cbee7d006329a76786239e3e2c0be
Implement -hide-all-plugin-packages and -plugin-package(-id), fixing #11244

Summary:
The basic idea is that we have a new set of "exposed modules"
which are /only/ used for plugins, i.e. -fplugin Foo and
--frontend Foo.  You can interact with this namespace
using the flags -plugin-package-id and -plugin-package.
By default, this namespace contains all modules in the
user namespace (as before), but you can toggle that using
-hide-all-plugin-packages.

There is one nasty hack: GhcMake respects -fplugin in
GHC_OPTIONS to make local plugins work correctly.  It also
bails out of you have an import of a module which doesn't
exist locally or in the package database.  The upshot is
that we need to be sure to check in the plugin modules
too, so we don't give a spurious failure when a plugin
is in the plugin namespace but not the main namespace.
A better way to fix this would be to distinguish between
plugin and normal dependencies in ModSummary.

I cheated a little and tweaked a few existing plugins
tests to exercise the new code paths.

TODO: Documentation

Signed-off-by: Edward Z. Yang <ezyang@cs.stanford.edu>
Test Plan: validate

Reviewers: bgamari, austin, simonpj, duncan

Subscribers: thomie

Differential Revision: https://phabricator.haskell.org/D1661

GHC Trac Issues: #11244
13 files changed:
compiler/main/DynFlags.hs
compiler/main/DynamicLoading.hs
compiler/main/Finder.hs
compiler/main/Packages.hs
docs/users_guide/extending_ghc.rst
docs/users_guide/packages.rst
ghc/GHCi/UI.hs
testsuite/.gitignore
testsuite/tests/ghc-api/T9595.hs
testsuite/tests/plugins/Makefile
testsuite/tests/plugins/T11244.hs [new file with mode: 0644]
testsuite/tests/plugins/T11244.stderr [new file with mode: 0644]
testsuite/tests/plugins/all.T