diff options
author | Matthew Pickering <matthewtpickering@gmail.com> | 2022-09-14 11:58:32 +0100 |
---|---|---|
committer | Matthew Pickering <matthewtpickering@gmail.com> | 2022-09-14 13:28:06 +0100 |
commit | da515eca7e4b191dc75f5f78e24e196dfbea9bed (patch) | |
tree | 95c78530fe3c2e313a1e15dacd77617b5211f04c /compiler/GHC/Driver/Flags.hs | |
parent | dc6af9ed87e619d754bfc385df931c81cba6d93a (diff) | |
download | haskell-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.hs | 21 |
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 + ] |