diff options
Diffstat (limited to 'compiler/GHC/Driver/Session.hs')
-rw-r--r-- | compiler/GHC/Driver/Session.hs | 30 |
1 files changed, 23 insertions, 7 deletions
diff --git a/compiler/GHC/Driver/Session.hs b/compiler/GHC/Driver/Session.hs index 9d03c434f6..864e93e35b 100644 --- a/compiler/GHC/Driver/Session.hs +++ b/compiler/GHC/Driver/Session.hs @@ -2916,6 +2916,10 @@ dynamic_flags_deps = [ , make_ord_flag defHiddenFlag "fwarn-unused-binds" (NoArg enableUnusedBinds) , make_ord_flag defHiddenFlag "fno-warn-unused-binds" (NoArg disableUnusedBinds) + , make_ord_flag defFlag "Wunused-imports" (NoArg enableUnusedImports) + , make_ord_flag defFlag "Wno-unused-imports" (NoArg disableUnusedImports) + , make_ord_flag defHiddenFlag "fwarn-unused-imports" (NoArg enableUnusedImports) + , make_ord_flag defHiddenFlag "fno-warn-unused-imports" (NoArg disableUnusedImports) ------ Safe Haskell flags ------------------------------------------- , make_ord_flag defFlag "fpackage-trust" (NoArg setPackageTrust) @@ -2952,12 +2956,7 @@ dynamic_flags_deps = [ ++ [ (NotDeprecated, unrecognisedWarning "W"), (Deprecated, unrecognisedWarning "fwarn-"), (Deprecated, unrecognisedWarning "fno-warn-") ] - ++ [ make_ord_flag defFlag "Werror=compat" - (NoArg (mapM_ setWErrorFlag minusWcompatOpts)) - , make_ord_flag defFlag "Wno-error=compat" - (NoArg (mapM_ unSetFatalWarningFlag minusWcompatOpts)) - , make_ord_flag defFlag "Wwarn=compat" - (NoArg (mapM_ unSetFatalWarningFlag minusWcompatOpts)) ] + ++ concatMap werrorFlagGroup ["compat", "unused-binds", "unused-imports"] ++ map (mkFlag turnOn "f" setExtensionFlag ) fLangFlagsDeps ++ map (mkFlag turnOff "fno-" unSetExtensionFlag) fLangFlagsDeps ++ map (mkFlag turnOn "X" setExtensionFlag ) xFlagsDeps @@ -2965,6 +2964,16 @@ dynamic_flags_deps = [ ++ map (mkFlag turnOn "X" setLanguage ) languageFlagsDeps ++ map (mkFlag turnOn "X" setSafeHaskell ) safeHaskellFlagsDeps +werrorFlagGroup :: String -> [(Deprecation, Flag (CmdLineP DynFlags))] +werrorFlagGroup name = + let Just opts = lookup name warningGroups + in [ make_ord_flag defFlag ("Werror=" ++ name) + (NoArg (mapM_ setWErrorFlag opts)) + , make_ord_flag defFlag ("Wno-error=" ++ name) + (NoArg (mapM_ unSetFatalWarningFlag opts)) + , make_ord_flag defFlag ("Wwarn=" ++ name) + (NoArg (mapM_ unSetFatalWarningFlag opts)) ] + -- | This is where we handle unrecognised warning flags. We only issue a warning -- if -Wunrecognised-warning-flags is set. See #11429 for context. unrecognisedWarning :: String -> Flag (CmdLineP DynFlags) @@ -3291,7 +3300,9 @@ wWarningFlagsDeps = mconcat [ warnSpec Opt_WarnUntickedPromotedConstructors, warnSpec Opt_WarnUnusedDoBind, warnSpec Opt_WarnUnusedForalls, - warnSpec Opt_WarnUnusedImports, + warnSpec Opt_WarnUnusedSourceImports, + warnSpec Opt_WarnUnusedExplicitImports, + warnSpec Opt_WarnRedundantImports, warnSpec Opt_WarnUnusedLocalBinds, warnSpec Opt_WarnUnusedMatches, warnSpec Opt_WarnUnusedPatternBinds, @@ -4034,6 +4045,11 @@ enableUnusedBinds = mapM_ setWarningFlag unusedBindsFlags disableUnusedBinds :: DynP () disableUnusedBinds = mapM_ unSetWarningFlag unusedBindsFlags +enableUnusedImports, disableUnusedImports :: DynP () +enableUnusedImports = mapM_ setWarningFlag unusedImportsFlags +disableUnusedImports = mapM_ unSetWarningFlag unusedImportsFlags + + -- | Things you get with `-dlint`. enableDLint :: DynP () enableDLint = do |