module GHC.Driver.Flags
( DumpFlag(..)
, GeneralFlag(..)
, Language(..)
, optimisationFlags
, WarningFlag(..)
, warnFlagNames
, warningGroups
, warningHierarchies
, smallestWarningGroups
, standardWarnings
, minusWOpts
, minusWallOpts
, minusWeverythingOpts
, minusWcompatOpts
, unusedBindsFlags
)
where
import GHC.Prelude
import GHC.Utils.Outputable
import GHC.Utils.Binary
import GHC.Data.EnumSet as EnumSet
import Control.Monad (guard)
import Data.List.NonEmpty (NonEmpty(..))
import Data.Maybe (fromMaybe,mapMaybe)
data Language = Haskell98 | Haskell2010 | GHC2021
deriving (Eq, Enum, Show, Bounded)
instance Outputable Language where
ppr = text . show
instance Binary Language where
put_ bh = put_ bh . fromEnum
get bh = toEnum <$> get bh
data DumpFlag
= Opt_D_dump_cmm
| Opt_D_dump_cmm_from_stg
| Opt_D_dump_cmm_raw
| Opt_D_dump_cmm_verbose_by_proc
| Opt_D_dump_cmm_verbose
| Opt_D_dump_cmm_cfg
| Opt_D_dump_cmm_cbe
| Opt_D_dump_cmm_switch
| Opt_D_dump_cmm_proc
| Opt_D_dump_cmm_sp
| Opt_D_dump_cmm_sink
| Opt_D_dump_cmm_caf
| Opt_D_dump_cmm_procmap
| Opt_D_dump_cmm_split
| Opt_D_dump_cmm_info
| Opt_D_dump_cmm_cps
| Opt_D_dump_cfg_weights
| Opt_D_dump_asm
| Opt_D_dump_asm_native
| Opt_D_dump_asm_liveness
| Opt_D_dump_asm_regalloc
| Opt_D_dump_asm_regalloc_stages
| Opt_D_dump_asm_conflicts
| Opt_D_dump_asm_stats
| Opt_D_dump_c_backend
| Opt_D_dump_llvm
| Opt_D_dump_core_stats
| Opt_D_dump_deriv
| Opt_D_dump_ds
| Opt_D_dump_ds_preopt
| Opt_D_dump_foreign
| Opt_D_dump_inlinings
| Opt_D_dump_verbose_inlinings
| Opt_D_dump_rule_firings
| Opt_D_dump_rule_rewrites
| Opt_D_dump_simpl_trace
| Opt_D_dump_occur_anal
| Opt_D_dump_parsed
| Opt_D_dump_parsed_ast
| Opt_D_dump_rn
| Opt_D_dump_rn_ast
| Opt_D_dump_simpl
| Opt_D_dump_simpl_iterations
| Opt_D_dump_spec
| Opt_D_dump_prep
| Opt_D_dump_late_cc
| Opt_D_dump_stg_from_core
| Opt_D_dump_stg_unarised
| Opt_D_dump_stg_cg
| Opt_D_dump_stg_tags
| Opt_D_dump_stg_final
| Opt_D_dump_call_arity
| Opt_D_dump_exitify
| Opt_D_dump_stranal
| Opt_D_dump_str_signatures
| Opt_D_dump_cpranal
| Opt_D_dump_cpr_signatures
| Opt_D_dump_tc
| Opt_D_dump_tc_ast
| Opt_D_dump_hie
| Opt_D_dump_types
| Opt_D_dump_rules
| Opt_D_dump_cse
| Opt_D_dump_worker_wrapper
| Opt_D_dump_rn_trace
| Opt_D_dump_rn_stats
| Opt_D_dump_opt_cmm
| Opt_D_dump_simpl_stats
| Opt_D_dump_cs_trace
| Opt_D_dump_tc_trace
| Opt_D_dump_ec_trace
| Opt_D_dump_if_trace
| Opt_D_dump_splices
| Opt_D_th_dec_file
| Opt_D_dump_BCOs
| Opt_D_dump_ticked
| Opt_D_dump_rtti
| Opt_D_source_stats
| Opt_D_verbose_stg2stg
| Opt_D_dump_hi
| Opt_D_dump_hi_diffs
| Opt_D_dump_mod_cycles
| Opt_D_dump_mod_map
| Opt_D_dump_timings
| Opt_D_dump_view_pattern_commoning
| Opt_D_verbose_core2core
| Opt_D_dump_debug
| Opt_D_dump_json
| Opt_D_ppr_debug
| Opt_D_no_debug_output
| Opt_D_dump_faststrings
| Opt_D_faststring_stats
deriving (Eq, Show, Enum)
data GeneralFlag
= Opt_DumpToFile
| Opt_D_dump_minimal_imports
| Opt_DoCoreLinting
| Opt_DoLinearCoreLinting
| Opt_DoStgLinting
| Opt_DoCmmLinting
| Opt_DoAsmLinting
| Opt_DoAnnotationLinting
| Opt_DoBoundsChecking
| Opt_NoLlvmMangler
| Opt_FastLlvm
| Opt_NoTypeableBinds
| Opt_DistinctConstructorTables
| Opt_InfoTableMap
| Opt_WarnIsError
| Opt_ShowWarnGroups
| Opt_HideSourcePaths
| Opt_PrintExplicitForalls
| Opt_PrintExplicitKinds
| Opt_PrintExplicitCoercions
| Opt_PrintExplicitRuntimeReps
| Opt_PrintEqualityRelations
| Opt_PrintAxiomIncomps
| Opt_PrintUnicodeSyntax
| Opt_PrintExpandedSynonyms
| Opt_PrintPotentialInstances
| Opt_PrintTypecheckerElaboration
| Opt_CallArity
| Opt_Exitification
| Opt_Strictness
| Opt_LateDmdAnal
| Opt_KillAbsence
| Opt_KillOneShot
| Opt_FullLaziness
| Opt_FloatIn
| Opt_LateSpecialise
| Opt_Specialise
| Opt_SpecialiseAggressively
| Opt_CrossModuleSpecialise
| Opt_InlineGenerics
| Opt_InlineGenericsAggressively
| Opt_StaticArgumentTransformation
| Opt_CSE
| Opt_StgCSE
| Opt_StgLiftLams
| Opt_LiberateCase
| Opt_SpecConstr
| Opt_SpecConstrKeen
| Opt_DoLambdaEtaExpansion
| Opt_IgnoreAsserts
| Opt_DoEtaReduction
| Opt_CaseMerge
| Opt_CaseFolding
| Opt_UnboxStrictFields
| Opt_UnboxSmallStrictFields
| Opt_DictsCheap
| Opt_EnableRewriteRules
| Opt_EnableThSpliceWarnings
| Opt_RegsGraph
| Opt_RegsIterative
| Opt_PedanticBottoms
| Opt_LlvmTBAA
| Opt_LlvmFillUndefWithGarbage
| Opt_IrrefutableTuples
| Opt_CmmSink
| Opt_CmmStaticPred
| Opt_CmmElimCommonBlocks
| Opt_CmmControlFlow
| Opt_AsmShortcutting
| Opt_OmitYields
| Opt_FunToThunk
| Opt_DictsStrict
| Opt_DmdTxDictSel
| Opt_Loopification
| Opt_CfgBlocklayout
| Opt_WeightlessBlocklayout
| Opt_CprAnal
| Opt_WorkerWrapper
| Opt_WorkerWrapperUnlift
| Opt_SolveConstantDicts
| Opt_AlignmentSanitisation
| Opt_CatchNonexhaustiveCases
| Opt_NumConstantFolding
| Opt_CoreConstantFolding
| Opt_FastPAPCalls
| Opt_DoTagInferenceChecks
| Opt_SimplPreInlining
| Opt_IgnoreInterfacePragmas
| Opt_OmitInterfacePragmas
| Opt_ExposeAllUnfoldings
| Opt_WriteInterface
| Opt_WriteHie
| Opt_AutoSccsOnIndividualCafs
| Opt_ProfCountEntries
| Opt_ProfLateInlineCcs
| Opt_ProfLateCcs
| Opt_ProfManualCcs
| Opt_Pp
| Opt_ForceRecomp
| Opt_IgnoreOptimChanges
| Opt_IgnoreHpcChanges
| Opt_ExcessPrecision
| Opt_EagerBlackHoling
| Opt_NoHsMain
| Opt_SplitSections
| Opt_StgStats
| Opt_HideAllPackages
| Opt_HideAllPluginPackages
| Opt_PrintBindResult
| Opt_Haddock
| Opt_HaddockOptions
| Opt_BreakOnException
| Opt_BreakOnError
| Opt_PrintEvldWithShow
| Opt_PrintBindContents
| Opt_GenManifest
| Opt_EmbedManifest
| Opt_SharedImplib
| Opt_BuildingCabalPackage
| Opt_IgnoreDotGhci
| Opt_GhciSandbox
| Opt_GhciHistory
| Opt_GhciLeakCheck
| Opt_ValidateHie
| Opt_LocalGhciHistory
| Opt_NoIt
| Opt_HelpfulErrors
| Opt_DeferTypeErrors
| Opt_DeferTypedHoles
| Opt_DeferOutOfScopeVariables
| Opt_PIC
| Opt_PIE
| Opt_PICExecutable
| Opt_ExternalDynamicRefs
| Opt_Ticky
| Opt_Ticky_Allocd
| Opt_Ticky_LNE
| Opt_Ticky_Dyn_Thunk
| Opt_Ticky_Tag
| Opt_Ticky_AP
| Opt_RPath
| Opt_RelativeDynlibPaths
| Opt_CompactUnwind
| Opt_Hpc
| Opt_FamAppCache
| Opt_ExternalInterpreter
| Opt_OptimalApplicativeDo
| Opt_VersionMacros
| Opt_WholeArchiveHsLibs
| Opt_SingleLibFolder
| Opt_ExposeInternalSymbols
| Opt_KeepCAFs
| Opt_KeepGoing
| Opt_ByteCode
| Opt_LinkRts
| Opt_ErrorSpans
| Opt_DeferDiagnostics
| Opt_DiagnosticsShowCaret
| Opt_PprCaseAsLet
| Opt_PprShowTicks
| Opt_ShowHoleConstraints
| Opt_ShowValidHoleFits
| Opt_SortValidHoleFits
| Opt_SortBySizeHoleFits
| Opt_SortBySubsumHoleFits
| Opt_AbstractRefHoleFits
| Opt_UnclutterValidHoleFits
| Opt_ShowTypeAppOfHoleFits
| Opt_ShowTypeAppVarsOfHoleFits
| Opt_ShowDocsOfHoleFits
| Opt_ShowTypeOfHoleFits
| Opt_ShowProvOfHoleFits
| Opt_ShowMatchesOfHoleFits
| Opt_ShowLoadedModules
| Opt_HexWordLiterals
| Opt_SuppressCoercions
| Opt_SuppressCoercionTypes
| Opt_SuppressVarKinds
| Opt_SuppressModulePrefixes
| Opt_SuppressTypeApplications
| Opt_SuppressIdInfo
| Opt_SuppressUnfoldings
| Opt_SuppressTypeSignatures
| Opt_SuppressUniques
| Opt_SuppressStgExts
| Opt_SuppressStgReps
| Opt_SuppressTicks
| Opt_SuppressTimestamps
| Opt_SuppressCoreSizes
| Opt_AutoLinkPackages
| Opt_ImplicitImportQualified
| Opt_KeepHscppFiles
| Opt_KeepHiDiffs
| Opt_KeepHcFiles
| Opt_KeepSFiles
| Opt_KeepTmpFiles
| Opt_KeepRawTokenStream
| Opt_KeepLlvmFiles
| Opt_KeepHiFiles
| Opt_KeepOFiles
| Opt_BuildDynamicToo
| Opt_DistrustAllPackages
| Opt_PackageTrust
| Opt_PluginTrustworthy
| Opt_G_NoStateHack
| Opt_G_NoOptCoercion
deriving (Eq, Show, Enum)
optimisationFlags :: EnumSet GeneralFlag
optimisationFlags = EnumSet.fromList
[ Opt_CallArity
, Opt_Strictness
, Opt_LateDmdAnal
, Opt_KillAbsence
, Opt_KillOneShot
, Opt_FullLaziness
, Opt_FloatIn
, Opt_LateSpecialise
, Opt_Specialise
, Opt_SpecialiseAggressively
, Opt_CrossModuleSpecialise
, Opt_StaticArgumentTransformation
, Opt_CSE
, Opt_StgCSE
, Opt_StgLiftLams
, Opt_LiberateCase
, Opt_SpecConstr
, Opt_SpecConstrKeen
, Opt_DoLambdaEtaExpansion
, Opt_IgnoreAsserts
, Opt_DoEtaReduction
, Opt_CaseMerge
, Opt_CaseFolding
, Opt_UnboxStrictFields
, Opt_UnboxSmallStrictFields
, Opt_DictsCheap
, Opt_EnableRewriteRules
, Opt_RegsGraph
, Opt_RegsIterative
, Opt_PedanticBottoms
, Opt_LlvmTBAA
, Opt_LlvmFillUndefWithGarbage
, Opt_IrrefutableTuples
, Opt_CmmSink
, Opt_CmmElimCommonBlocks
, Opt_AsmShortcutting
, Opt_OmitYields
, Opt_FunToThunk
, Opt_DictsStrict
, Opt_DmdTxDictSel
, Opt_Loopification
, Opt_CfgBlocklayout
, Opt_WeightlessBlocklayout
, Opt_CprAnal
, Opt_WorkerWrapper
, Opt_WorkerWrapperUnlift
, Opt_SolveConstantDicts
, Opt_CatchNonexhaustiveCases
, Opt_IgnoreAsserts
]
data WarningFlag =
Opt_WarnDuplicateExports
| Opt_WarnDuplicateConstraints
| Opt_WarnRedundantConstraints
| Opt_WarnHiShadows
| Opt_WarnImplicitPrelude
| Opt_WarnIncompletePatterns
| Opt_WarnIncompleteUniPatterns
| Opt_WarnIncompletePatternsRecUpd
| Opt_WarnOverflowedLiterals
| Opt_WarnEmptyEnumerations
| Opt_WarnMissingFields
| Opt_WarnMissingImportList
| Opt_WarnMissingMethods
| Opt_WarnMissingSignatures
| Opt_WarnMissingLocalSignatures
| Opt_WarnNameShadowing
| Opt_WarnOverlappingPatterns
| Opt_WarnTypeDefaults
| Opt_WarnMonomorphism
| Opt_WarnUnusedTopBinds
| Opt_WarnUnusedLocalBinds
| Opt_WarnUnusedPatternBinds
| Opt_WarnUnusedImports
| Opt_WarnUnusedMatches
| Opt_WarnUnusedTypePatterns
| Opt_WarnUnusedForalls
| Opt_WarnUnusedRecordWildcards
| Opt_WarnRedundantBangPatterns
| Opt_WarnRedundantRecordWildcards
| Opt_WarnWarningsDeprecations
| Opt_WarnDeprecatedFlags
| Opt_WarnMissingMonadFailInstances
| Opt_WarnSemigroup
| Opt_WarnDodgyExports
| Opt_WarnDodgyImports
| Opt_WarnOrphans
| Opt_WarnAutoOrphans
| Opt_WarnIdentities
| Opt_WarnTabs
| Opt_WarnUnrecognisedPragmas
| Opt_WarnMisplacedPragmas
| Opt_WarnDodgyForeignImports
| Opt_WarnUnusedDoBind
| Opt_WarnWrongDoBind
| Opt_WarnAlternativeLayoutRuleTransitional
| Opt_WarnUnsafe
| Opt_WarnSafe
| Opt_WarnTrustworthySafe
| Opt_WarnMissedSpecs
| Opt_WarnAllMissedSpecs
| Opt_WarnUnsupportedCallingConventions
| Opt_WarnUnsupportedLlvmVersion
| Opt_WarnMissedExtraSharedLib
| Opt_WarnInlineRuleShadowing
| Opt_WarnTypedHoles
| Opt_WarnPartialTypeSignatures
| Opt_WarnMissingExportedSignatures
| Opt_WarnUntickedPromotedConstructors
| Opt_WarnDerivingTypeable
| Opt_WarnDeferredTypeErrors
| Opt_WarnDeferredOutOfScopeVariables
| Opt_WarnNonCanonicalMonadInstances
| Opt_WarnNonCanonicalMonadFailInstances
| Opt_WarnNonCanonicalMonoidInstances
| Opt_WarnMissingPatternSynonymSignatures
| Opt_WarnUnrecognisedWarningFlags
| Opt_WarnSimplifiableClassConstraints
| Opt_WarnCPPUndef
| Opt_WarnUnbangedStrictPatterns
| Opt_WarnMissingHomeModules
| Opt_WarnPartialFields
| Opt_WarnMissingExportList
| Opt_WarnInaccessibleCode
| Opt_WarnStarIsType
| Opt_WarnStarBinder
| Opt_WarnImplicitKindVars
| Opt_WarnSpaceAfterBang
| Opt_WarnMissingDerivingStrategies
| Opt_WarnPrepositiveQualifiedModule
| Opt_WarnUnusedPackages
| Opt_WarnInferredSafeImports
| Opt_WarnMissingSafeHaskellMode
| Opt_WarnCompatUnqualifiedImports
| Opt_WarnDerivingDefaults
| Opt_WarnInvalidHaddock
| Opt_WarnOperatorWhitespaceExtConflict
| Opt_WarnOperatorWhitespace
| Opt_WarnAmbiguousFields
| Opt_WarnImplicitLift
| Opt_WarnMissingKindSignatures
| Opt_WarnMissingExportedPatternSynonymSignatures
| Opt_WarnRedundantStrictnessFlags
| Opt_WarnForallIdentifier
| Opt_WarnUnicodeBidirectionalFormatCharacters
| Opt_WarnGADTMonoLocalBinds
| Opt_WarnTypeEqualityOutOfScope
| Opt_WarnTypeEqualityRequiresOperators
deriving (Eq, Ord, Show, Enum)
warnFlagNames :: WarningFlag -> NonEmpty String
warnFlagNames wflag = case wflag of
Opt_WarnAlternativeLayoutRuleTransitional -> "alternative-layout-rule-transitional" :| []
Opt_WarnAmbiguousFields -> "ambiguous-fields" :| []
Opt_WarnAutoOrphans -> "auto-orphans" :| []
Opt_WarnCPPUndef -> "cpp-undef" :| []
Opt_WarnUnbangedStrictPatterns -> "unbanged-strict-patterns" :| []
Opt_WarnDeferredTypeErrors -> "deferred-type-errors" :| []
Opt_WarnDeferredOutOfScopeVariables -> "deferred-out-of-scope-variables" :| []
Opt_WarnWarningsDeprecations -> "deprecations" :| ["warnings-deprecations"]
Opt_WarnDeprecatedFlags -> "deprecated-flags" :| []
Opt_WarnDerivingDefaults -> "deriving-defaults" :| []
Opt_WarnDerivingTypeable -> "deriving-typeable" :| []
Opt_WarnDodgyExports -> "dodgy-exports" :| []
Opt_WarnDodgyForeignImports -> "dodgy-foreign-imports" :| []
Opt_WarnDodgyImports -> "dodgy-imports" :| []
Opt_WarnEmptyEnumerations -> "empty-enumerations" :| []
Opt_WarnDuplicateConstraints -> "duplicate-constraints" :| []
Opt_WarnRedundantConstraints -> "redundant-constraints" :| []
Opt_WarnDuplicateExports -> "duplicate-exports" :| []
Opt_WarnHiShadows -> "hi-shadowing" :| []
Opt_WarnInaccessibleCode -> "inaccessible-code" :| []
Opt_WarnImplicitPrelude -> "implicit-prelude" :| []
Opt_WarnImplicitKindVars -> "implicit-kind-vars" :| []
Opt_WarnIncompletePatterns -> "incomplete-patterns" :| []
Opt_WarnIncompletePatternsRecUpd -> "incomplete-record-updates" :| []
Opt_WarnIncompleteUniPatterns -> "incomplete-uni-patterns" :| []
Opt_WarnInlineRuleShadowing -> "inline-rule-shadowing" :| []
Opt_WarnIdentities -> "identities" :| []
Opt_WarnMissingFields -> "missing-fields" :| []
Opt_WarnMissingImportList -> "missing-import-lists" :| []
Opt_WarnMissingExportList -> "missing-export-lists" :| []
Opt_WarnMissingLocalSignatures -> "missing-local-signatures" :| []
Opt_WarnMissingMethods -> "missing-methods" :| []
Opt_WarnMissingMonadFailInstances -> "missing-monadfail-instances" :| []
Opt_WarnSemigroup -> "semigroup" :| []
Opt_WarnMissingSignatures -> "missing-signatures" :| []
Opt_WarnMissingKindSignatures -> "missing-kind-signatures" :| []
Opt_WarnMissingExportedSignatures -> "missing-exported-signatures" :| []
Opt_WarnMonomorphism -> "monomorphism-restriction" :| []
Opt_WarnNameShadowing -> "name-shadowing" :| []
Opt_WarnNonCanonicalMonadInstances -> "noncanonical-monad-instances" :| []
Opt_WarnNonCanonicalMonadFailInstances -> "noncanonical-monadfail-instances" :| []
Opt_WarnNonCanonicalMonoidInstances -> "noncanonical-monoid-instances" :| []
Opt_WarnOrphans -> "orphans" :| []
Opt_WarnOverflowedLiterals -> "overflowed-literals" :| []
Opt_WarnOverlappingPatterns -> "overlapping-patterns" :| []
Opt_WarnMissedSpecs -> "missed-specialisations" :| ["missed-specializations"]
Opt_WarnAllMissedSpecs -> "all-missed-specialisations" :| ["all-missed-specializations"]
Opt_WarnSafe -> "safe" :| []
Opt_WarnTrustworthySafe -> "trustworthy-safe" :| []
Opt_WarnInferredSafeImports -> "inferred-safe-imports" :| []
Opt_WarnMissingSafeHaskellMode -> "missing-safe-haskell-mode" :| []
Opt_WarnTabs -> "tabs" :| []
Opt_WarnTypeDefaults -> "type-defaults" :| []
Opt_WarnTypedHoles -> "typed-holes" :| []
Opt_WarnPartialTypeSignatures -> "partial-type-signatures" :| []
Opt_WarnUnrecognisedPragmas -> "unrecognised-pragmas" :| []
Opt_WarnMisplacedPragmas -> "misplaced-pragmas" :| []
Opt_WarnUnsafe -> "unsafe" :| []
Opt_WarnUnsupportedCallingConventions -> "unsupported-calling-conventions" :| []
Opt_WarnUnsupportedLlvmVersion -> "unsupported-llvm-version" :| []
Opt_WarnMissedExtraSharedLib -> "missed-extra-shared-lib" :| []
Opt_WarnUntickedPromotedConstructors -> "unticked-promoted-constructors" :| []
Opt_WarnUnusedDoBind -> "unused-do-bind" :| []
Opt_WarnUnusedForalls -> "unused-foralls" :| []
Opt_WarnUnusedImports -> "unused-imports" :| []
Opt_WarnUnusedLocalBinds -> "unused-local-binds" :| []
Opt_WarnUnusedMatches -> "unused-matches" :| []
Opt_WarnUnusedPatternBinds -> "unused-pattern-binds" :| []
Opt_WarnUnusedTopBinds -> "unused-top-binds" :| []
Opt_WarnUnusedTypePatterns -> "unused-type-patterns" :| []
Opt_WarnUnusedRecordWildcards -> "unused-record-wildcards" :| []
Opt_WarnRedundantBangPatterns -> "redundant-bang-patterns" :| []
Opt_WarnRedundantRecordWildcards -> "redundant-record-wildcards" :| []
Opt_WarnRedundantStrictnessFlags -> "redundant-strictness-flags" :| []
Opt_WarnWrongDoBind -> "wrong-do-bind" :| []
Opt_WarnMissingPatternSynonymSignatures -> "missing-pattern-synonym-signatures" :| []
Opt_WarnMissingDerivingStrategies -> "missing-deriving-strategies" :| []
Opt_WarnSimplifiableClassConstraints -> "simplifiable-class-constraints" :| []
Opt_WarnMissingHomeModules -> "missing-home-modules" :| []
Opt_WarnUnrecognisedWarningFlags -> "unrecognised-warning-flags" :| []
Opt_WarnStarBinder -> "star-binder" :| []
Opt_WarnStarIsType -> "star-is-type" :| []
Opt_WarnSpaceAfterBang -> "missing-space-after-bang" :| []
Opt_WarnPartialFields -> "partial-fields" :| []
Opt_WarnPrepositiveQualifiedModule -> "prepositive-qualified-module" :| []
Opt_WarnUnusedPackages -> "unused-packages" :| []
Opt_WarnCompatUnqualifiedImports -> "compat-unqualified-imports" :| []
Opt_WarnInvalidHaddock -> "invalid-haddock" :| []
Opt_WarnOperatorWhitespaceExtConflict -> "operator-whitespace-ext-conflict" :| []
Opt_WarnOperatorWhitespace -> "operator-whitespace" :| []
Opt_WarnImplicitLift -> "implicit-lift" :| []
Opt_WarnMissingExportedPatternSynonymSignatures -> "missing-exported-pattern-synonym-signatures" :| []
Opt_WarnForallIdentifier -> "forall-identifier" :| []
Opt_WarnUnicodeBidirectionalFormatCharacters -> "unicode-bidirectional-format-characters" :| []
Opt_WarnGADTMonoLocalBinds -> "gadt-mono-local-binds" :| []
Opt_WarnTypeEqualityOutOfScope -> "type-equality-out-of-scope" :| []
Opt_WarnTypeEqualityRequiresOperators -> "type-equality-requires-operators" :| []
warningGroups :: [(String, [WarningFlag])]
warningGroups =
[ ("compat", minusWcompatOpts)
, ("unused-binds", unusedBindsFlags)
, ("default", standardWarnings)
, ("extra", minusWOpts)
, ("all", minusWallOpts)
, ("everything", minusWeverythingOpts)
]
warningHierarchies :: [[String]]
warningHierarchies = hierarchies ++ map (:[]) rest
where
hierarchies = [["default", "extra", "all"]]
rest = filter (`notElem` "everything" : concat hierarchies) $
map fst warningGroups
smallestWarningGroups :: WarningFlag -> [String]
smallestWarningGroups flag = mapMaybe go warningHierarchies where
go (group:rest) = fromMaybe (go rest) $ do
flags <- lookup group warningGroups
guard (flag `elem` flags)
pure (Just group)
go [] = Nothing
standardWarnings :: [WarningFlag]
standardWarnings
= [ Opt_WarnOverlappingPatterns,
Opt_WarnWarningsDeprecations,
Opt_WarnDeprecatedFlags,
Opt_WarnDeferredTypeErrors,
Opt_WarnTypedHoles,
Opt_WarnDeferredOutOfScopeVariables,
Opt_WarnPartialTypeSignatures,
Opt_WarnUnrecognisedPragmas,
Opt_WarnMisplacedPragmas,
Opt_WarnDuplicateExports,
Opt_WarnDerivingDefaults,
Opt_WarnOverflowedLiterals,
Opt_WarnEmptyEnumerations,
Opt_WarnAmbiguousFields,
Opt_WarnMissingFields,
Opt_WarnMissingMethods,
Opt_WarnWrongDoBind,
Opt_WarnUnsupportedCallingConventions,
Opt_WarnDodgyForeignImports,
Opt_WarnInlineRuleShadowing,
Opt_WarnAlternativeLayoutRuleTransitional,
Opt_WarnUnsupportedLlvmVersion,
Opt_WarnMissedExtraSharedLib,
Opt_WarnTabs,
Opt_WarnUnrecognisedWarningFlags,
Opt_WarnSimplifiableClassConstraints,
Opt_WarnStarBinder,
Opt_WarnInaccessibleCode,
Opt_WarnSpaceAfterBang,
Opt_WarnNonCanonicalMonadInstances,
Opt_WarnNonCanonicalMonoidInstances,
Opt_WarnOperatorWhitespaceExtConflict,
Opt_WarnForallIdentifier,
Opt_WarnUnicodeBidirectionalFormatCharacters,
Opt_WarnGADTMonoLocalBinds,
Opt_WarnTypeEqualityRequiresOperators
]
minusWOpts :: [WarningFlag]
minusWOpts
= standardWarnings ++
[ Opt_WarnUnusedTopBinds,
Opt_WarnUnusedLocalBinds,
Opt_WarnUnusedPatternBinds,
Opt_WarnUnusedMatches,
Opt_WarnUnusedForalls,
Opt_WarnUnusedImports,
Opt_WarnIncompletePatterns,
Opt_WarnDodgyExports,
Opt_WarnDodgyImports,
Opt_WarnUnbangedStrictPatterns
]
minusWallOpts :: [WarningFlag]
minusWallOpts
= minusWOpts ++
[ Opt_WarnTypeDefaults,
Opt_WarnNameShadowing,
Opt_WarnMissingSignatures,
Opt_WarnHiShadows,
Opt_WarnOrphans,
Opt_WarnUnusedDoBind,
Opt_WarnTrustworthySafe,
Opt_WarnMissingPatternSynonymSignatures,
Opt_WarnUnusedRecordWildcards,
Opt_WarnRedundantRecordWildcards,
Opt_WarnStarIsType,
Opt_WarnIncompleteUniPatterns,
Opt_WarnIncompletePatternsRecUpd
]
minusWeverythingOpts :: [WarningFlag]
minusWeverythingOpts = [ toEnum 0 .. ]
minusWcompatOpts :: [WarningFlag]
minusWcompatOpts
= [ Opt_WarnSemigroup
, Opt_WarnNonCanonicalMonoidInstances
, Opt_WarnStarIsType
, Opt_WarnCompatUnqualifiedImports
, Opt_WarnTypeEqualityOutOfScope
]
unusedBindsFlags :: [WarningFlag]
unusedBindsFlags = [ Opt_WarnUnusedTopBinds
, Opt_WarnUnusedLocalBinds
, Opt_WarnUnusedPatternBinds
]