diff options
| author | Charles Cooper <cooper.charles.m@gmail.com> | 2017-03-13 15:17:58 -0400 |
|---|---|---|
| committer | Ben Gamari <ben@smart-cactus.org> | 2017-03-13 15:18:09 -0400 |
| commit | 70274b4f8003fde0fa3e4094a10dfae880579786 (patch) | |
| tree | feeed15edbf9fc0f05fc22c16d8a78f9326b9d6c | |
| parent | c77b767098be53087e0b06ba23d613dd7c3bcf8e (diff) | |
| download | haskell-70274b4f8003fde0fa3e4094a10dfae880579786.tar.gz | |
Add `-fmax-errors` flag
This commit adds a command line option to limit the number of errors
displayed. It also moves the documentation for `reverse-errors` into the
`Warnings` section.
https://ghc.haskell.org/trac/ghc/ticket/13326
Reviewers: austin, bgamari
Reviewed By: bgamari
Subscribers: rwbarton, thomie
Differential Revision: https://phabricator.haskell.org/D3323
| -rw-r--r-- | compiler/main/DynFlags.hs | 12 | ||||
| -rw-r--r-- | compiler/main/ErrUtils.hs | 6 | ||||
| -rw-r--r-- | utils/mkUserGuidePart/Options/Misc.hs | 7 | ||||
| -rw-r--r-- | utils/mkUserGuidePart/Options/Warnings.hs | 13 |
4 files changed, 28 insertions, 10 deletions
diff --git a/compiler/main/DynFlags.hs b/compiler/main/DynFlags.hs index e96bf69d31..e95796d23b 100644 --- a/compiler/main/DynFlags.hs +++ b/compiler/main/DynFlags.hs @@ -935,7 +935,10 @@ data DynFlags = DynFlags { maxInlineMemsetInsns :: Int, -- | Reverse the order of error messages in GHC/GHCi - reverseErrors :: Bool, + reverseErrors :: Bool, + + -- | Limit the maximum number of errors to show + maxErrors :: Maybe Int, -- | Unique supply configuration for testing build determinism initialUnique :: Int, @@ -1684,7 +1687,8 @@ defaultDynFlags mySettings = initialUnique = 0, uniqueIncrement = 1, - reverseErrors = False + reverseErrors = False, + maxErrors = Nothing } defaultWays :: Settings -> [Way] @@ -2798,6 +2802,10 @@ dynamic_flags_deps = [ "Use -fno-force-recomp instead" , make_dep_flag defGhcFlag "no-recomp" (NoArg $ setGeneralFlag Opt_ForceRecomp) "Use -fforce-recomp instead" + , make_ord_flag defFlag "fmax-errors" + (intSuffix (\n d -> d { maxErrors = Just (max 1 n) })) + , make_ord_flag defFlag "fno-max-errors" + (noArg (\d -> d { maxErrors = Nothing })) , make_ord_flag defFlag "freverse-errors" (noArg (\d -> d {reverseErrors = True} )) , make_ord_flag defFlag "fno-reverse-errors" diff --git a/compiler/main/ErrUtils.hs b/compiler/main/ErrUtils.hs index d73628a87e..8e71847e1d 100644 --- a/compiler/main/ErrUtils.hs +++ b/compiler/main/ErrUtils.hs @@ -378,11 +378,15 @@ pprLocErrMsg (ErrMsg { errMsgSpan = s mkLocMessage sev s (formatErrDoc dflags doc) sortMsgBag :: Maybe DynFlags -> Bag ErrMsg -> [ErrMsg] -sortMsgBag dflags = sortBy (maybeFlip $ comparing errMsgSpan) . bagToList +sortMsgBag dflags = maybeLimit . sortBy (maybeFlip cmp) . bagToList where maybeFlip :: (a -> a -> b) -> (a -> a -> b) maybeFlip | fromMaybe False (fmap reverseErrors dflags) = flip | otherwise = id + cmp = comparing errMsgSpan + maybeLimit = case join (fmap maxErrors dflags) of + Nothing -> id + Just err_limit -> take err_limit ghcExit :: DynFlags -> Int -> IO () ghcExit dflags val diff --git a/utils/mkUserGuidePart/Options/Misc.hs b/utils/mkUserGuidePart/Options/Misc.hs index 57e8808655..c542fa39d6 100644 --- a/utils/mkUserGuidePart/Options/Misc.hs +++ b/utils/mkUserGuidePart/Options/Misc.hs @@ -29,13 +29,6 @@ miscOptions = "the main thread, rather than a forked thread." , flagType = DynamicFlag } - , flag { flagName = "-freverse-errors" - , flagDescription = - "Display errors in GHC/GHCi sorted by reverse order of "++ - "source code line numbers." - , flagType = DynamicFlag - , flagReverse = "-fno-reverse-errors" - } , flag { flagName = "-flocal-ghci-history" , flagDescription = "Use current directory for the GHCi command history "++ diff --git a/utils/mkUserGuidePart/Options/Warnings.hs b/utils/mkUserGuidePart/Options/Warnings.hs index f242fb062a..48ee32ce6c 100644 --- a/utils/mkUserGuidePart/Options/Warnings.hs +++ b/utils/mkUserGuidePart/Options/Warnings.hs @@ -90,6 +90,19 @@ warningsOptions = , flagType = DynamicFlag , flagReverse = "-fno-helpful-errors" } + , flag { flagName = "-freverse-errors" + , flagDescription = + "Display errors in GHC/GHCi sorted by reverse order of "++ + "source code line numbers." + , flagType = DynamicFlag + , flagReverse = "-fno-reverse-errors" + } + , flag { flagName = "-fmax-errors" + , flagDescription = + "Limit the number of errors displayed in GHC/GHCi." + , flagType = DynamicFlag + , flagReverse = "-fno-max-errors" + } , flag { flagName = "-Wdeprecated-flags" , flagDescription = "warn about uses of commandline flags that are deprecated" |
