summaryrefslogtreecommitdiff
path: root/compiler/GHC/Driver/Flags.hs
diff options
context:
space:
mode:
authorMatthew Pickering <matthewtpickering@gmail.com>2022-09-14 11:58:32 +0100
committerMatthew Pickering <matthewtpickering@gmail.com>2022-09-14 13:28:06 +0100
commitda515eca7e4b191dc75f5f78e24e196dfbea9bed (patch)
tree95c78530fe3c2e313a1e15dacd77617b5211f04c /compiler/GHC/Driver/Flags.hs
parentdc6af9ed87e619d754bfc385df931c81cba6d93a (diff)
downloadhaskell-wip/unused-imports.tar.gz
Split up -Wunused-imports into three warningswip/unused-imports
This splits up `-Wunused-imports` into three warnings: `-Wunused-explicit-imports`: Warn when an explicitly imported identifier is not used. import Foo (bar) `-Wredundant-imports`: Warn when nothing from an import is used. -- Nothing from Foo is used import Foo `-Wunused-source-imports`: Warn when a source import is unecessary -- Can just `import Foo`. import {-# SOURCE #-} Foo These three flags are implied by `-Wunused-imports` The motiviation for this is that some library authors don't want to always enable `-Wredundant-imports` as it makes downstream library changes introduce warnings in libraries. Fixes #21879 Also fixes #22182 by supporting -Werror=unused-imports and -Werror=unused-binds
Diffstat (limited to 'compiler/GHC/Driver/Flags.hs')
-rw-r--r--compiler/GHC/Driver/Flags.hs21
1 files changed, 18 insertions, 3 deletions
diff --git a/compiler/GHC/Driver/Flags.hs b/compiler/GHC/Driver/Flags.hs
index fd23d2e81e..279dacc681 100644
--- a/compiler/GHC/Driver/Flags.hs
+++ b/compiler/GHC/Driver/Flags.hs
@@ -18,6 +18,7 @@ module GHC.Driver.Flags
, minusWeverythingOpts
, minusWcompatOpts
, unusedBindsFlags
+ , unusedImportsFlags
)
where
@@ -538,7 +539,9 @@ data WarningFlag =
| Opt_WarnUnusedTopBinds
| Opt_WarnUnusedLocalBinds
| Opt_WarnUnusedPatternBinds
- | Opt_WarnUnusedImports
+ | Opt_WarnUnusedSourceImports
+ | Opt_WarnUnusedExplicitImports
+ | Opt_WarnRedundantImports
| Opt_WarnUnusedMatches
| Opt_WarnUnusedTypePatterns
| Opt_WarnUnusedForalls
@@ -685,7 +688,9 @@ warnFlagNames wflag = case wflag of
Opt_WarnUntickedPromotedConstructors -> "unticked-promoted-constructors" :| []
Opt_WarnUnusedDoBind -> "unused-do-bind" :| []
Opt_WarnUnusedForalls -> "unused-foralls" :| []
- Opt_WarnUnusedImports -> "unused-imports" :| []
+ Opt_WarnUnusedExplicitImports -> "unused-explicit-imports" :| []
+ Opt_WarnUnusedSourceImports -> "unused-source-imports" :| []
+ Opt_WarnRedundantImports -> "redundant-imports" :| []
Opt_WarnUnusedLocalBinds -> "unused-local-binds" :| []
Opt_WarnUnusedMatches -> "unused-matches" :| []
Opt_WarnUnusedPatternBinds -> "unused-pattern-binds" :| []
@@ -738,6 +743,7 @@ warningGroups :: [(String, [WarningFlag])]
warningGroups =
[ ("compat", minusWcompatOpts)
, ("unused-binds", unusedBindsFlags)
+ , ("unused-imports", unusedImportsFlags)
, ("default", standardWarnings)
, ("extra", minusWOpts)
, ("all", minusWallOpts)
@@ -825,7 +831,9 @@ minusWOpts
Opt_WarnUnusedPatternBinds,
Opt_WarnUnusedMatches,
Opt_WarnUnusedForalls,
- Opt_WarnUnusedImports,
+ Opt_WarnUnusedExplicitImports,
+ Opt_WarnUnusedSourceImports,
+ Opt_WarnRedundantImports,
Opt_WarnIncompletePatterns,
Opt_WarnDodgyExports,
Opt_WarnDodgyImports,
@@ -875,3 +883,10 @@ unusedBindsFlags = [ Opt_WarnUnusedTopBinds
, Opt_WarnUnusedLocalBinds
, Opt_WarnUnusedPatternBinds
]
+
+-- | Things you get with -Wunused-binds
+unusedImportsFlags :: [WarningFlag]
+unusedImportsFlags = [ Opt_WarnUnusedExplicitImports
+ , Opt_WarnUnusedSourceImports
+ , Opt_WarnRedundantImports
+ ]