summaryrefslogtreecommitdiff
path: root/compiler/main/CmdLineParser.hs
diff options
context:
space:
mode:
authorLennart Kolmodin <kolmodin@gmail.com>2014-11-20 23:28:34 -0600
committerAustin Seipp <austin@well-typed.com>2014-11-20 23:32:16 -0600
commit417809baaf7d1fc6a7c708fa195ace277059c3d3 (patch)
tree850eca2017a80024cbe41115590aa0c955bffceb /compiler/main/CmdLineParser.hs
parentc6322eebea61dd29d0dab698cb89334596851b9d (diff)
downloadhaskell-wip/merge.tar.gz
ghc allow --show-options and --interactive togetherwip/merge
Summary: Previously --show-options showed all options that GHC accepts. Now, it'll only show the options that have effect in non-interactive modes. This change also adds support for using --interactive together with --show-options, making it show all options that have effect in the interactive mode. The CmdLineParser is updated to know about ghc modes, and then each flag is annotated with which mode it has effect. This fixes #9259. Test Plan: Try out --show-options with --interactive on the command line. With and without --interactive should give different results. Reviewers: austin Reviewed By: austin Subscribers: jstolarek, thomie, carter, simonmar Differential Revision: https://phabricator.haskell.org/D337 GHC Trac Issues: #9259 Conflicts: compiler/main/DynFlags.hs
Diffstat (limited to 'compiler/main/CmdLineParser.hs')
-rw-r--r--compiler/main/CmdLineParser.hs28
1 files changed, 24 insertions, 4 deletions
diff --git a/compiler/main/CmdLineParser.hs b/compiler/main/CmdLineParser.hs
index a4b9118f9d..561765e106 100644
--- a/compiler/main/CmdLineParser.hs
+++ b/compiler/main/CmdLineParser.hs
@@ -13,9 +13,9 @@
module CmdLineParser
(
- processArgs, OptKind(..),
+ processArgs, OptKind(..), GhcFlagMode(..),
CmdLineP(..), getCmdLineState, putCmdLineState,
- Flag(..),
+ Flag(..), defFlag, defGhcFlag, defGhciFlag, defHiddenFlag,
errorsToGhcException,
EwM, addErr, addWarn, getArg, getCurLoc, liftEwM, deprecate
@@ -42,10 +42,30 @@ import Control.Applicative (Applicative(..))
--------------------------------------------------------
data Flag m = Flag
- { flagName :: String, -- Flag, without the leading "-"
- flagOptKind :: OptKind m -- What to do if we see it
+ { flagName :: String, -- Flag, without the leading "-"
+ flagOptKind :: OptKind m, -- What to do if we see it
+ flagGhcMode :: GhcFlagMode -- Which modes this flag affects
}
+defFlag :: String -> OptKind m -> Flag m
+defFlag name optKind = Flag name optKind AllModes
+
+defGhcFlag :: String -> OptKind m -> Flag m
+defGhcFlag name optKind = Flag name optKind OnlyGhc
+
+defGhciFlag :: String -> OptKind m -> Flag m
+defGhciFlag name optKind = Flag name optKind OnlyGhci
+
+defHiddenFlag :: String -> OptKind m -> Flag m
+defHiddenFlag name optKind = Flag name optKind HiddenFlag
+
+-- | GHC flag modes describing when a flag has an effect.
+data GhcFlagMode
+ = OnlyGhc -- ^ The flag only affects the non-interactive GHC
+ | OnlyGhci -- ^ The flag only affects the interactive GHC
+ | AllModes -- ^ The flag affects multiple ghc modes
+ | HiddenFlag -- ^ This flag should not be seen in cli completion
+
data OptKind m -- Suppose the flag is -f
= NoArg (EwM m ()) -- -f all by itself
| HasArg (String -> EwM m ()) -- -farg or -f arg