[Git][ghc/ghc][wip/sand-witch/warning-depracated-flag] Hide WARNING/DEPRECATED namespacing under -XExplicitNamespaces (#24396)
Andrei Borzenkov (@sand-witch)
gitlab at gitlab.haskell.org
Mon Feb 5 15:46:12 UTC 2024
Andrei Borzenkov pushed to branch wip/sand-witch/warning-depracated-flag at Glasgow Haskell Compiler / GHC
Commits:
43fb0d53 by Andrei Borzenkov at 2024-02-05T19:45:58+04:00
Hide WARNING/DEPRECATED namespacing under -XExplicitNamespaces (#24396)
- - - - -
12 changed files:
- compiler/GHC/Hs/Decls.hs
- compiler/GHC/Rename/Module.hs
- compiler/GHC/Tc/Errors/Ppr.hs
- compiler/GHC/Tc/Errors/Types.hs
- compiler/GHC/Types/Error/Codes.hs
- docs/users_guide/9.10.1-notes.rst
- docs/users_guide/exts/pragmas.rst
- libraries/ghc-prim/GHC/Tuple.hs
- testsuite/tests/warnings/should_compile/T24396a.hs
- + testsuite/tests/warnings/should_fail/T24396c.hs
- + testsuite/tests/warnings/should_fail/T24396c.stderr
- testsuite/tests/warnings/should_fail/all.T
Changes:
=====================================
compiler/GHC/Hs/Decls.hs
=====================================
@@ -1288,7 +1288,7 @@ data NamespaceSpecifier
= NoNamespaceSpecifier
| TypeNamespaceSpecifier (EpToken "type")
| DataNamespaceSpecifier (EpToken "data")
- deriving (Data)
+ deriving (Eq, Data)
overlappingNamespaceSpecifiers :: NamespaceSpecifier -> NamespaceSpecifier -> Bool
overlappingNamespaceSpecifiers NoNamespaceSpecifier _ = True
=====================================
compiler/GHC/Rename/Module.hs
=====================================
@@ -283,10 +283,13 @@ rnSrcWarnDecls bndr_set decls'
sig_ctxt = TopSigCtxt bndr_set
- rn_deprec (Warning (ns_spec, _) rdr_names txt)
+ rn_deprec w@(Warning (ns_spec, _) rdr_names txt)
-- ensures that the names are defined locally
= do { names <- concatMapM (lookupLocalTcNames sig_ctxt what ns_spec . unLoc)
rdr_names
+ ; unlessXOptM LangExt.ExplicitNamespaces $
+ when (ns_spec /= NoNamespaceSpecifier) $
+ addErr (TcRnNamespacedWarningPragmaWithoutFlag w)
; txt' <- rnWarningTxt txt
; return [(nameOccName nm, txt') | (_, nm) <- names] }
-- Use the OccName from the Name we looked up, rather than from the RdrName,
=====================================
compiler/GHC/Tc/Errors/Ppr.hs
=====================================
@@ -1889,6 +1889,17 @@ instance Diagnostic TcRnMessage where
| otherwise
= text "they are not unfilled metavariables"
+ TcRnNamespacedWarningPragmaWithoutFlag warning@(Warning (kw, _) _ txt) -> mkSimpleDecorated $
+ vcat [ text "Illegal use of the" <+> quotes (ppr kw) <+> text "keyword:"
+ , nest 2 (ppr warning)
+ , text "in a" <+> pragma_type <+> text "pragma"
+ ]
+ where
+ pragma_type = case txt of
+ WarningTxt{} -> text "WARNING"
+ DeprecatedTxt{} -> text "DEPRECATED"
+
+ diagnosticReason :: TcRnMessage -> DiagnosticReason
diagnosticReason = \case
TcRnUnknownMessage m
-> diagnosticReason m
@@ -2512,6 +2523,8 @@ instance Diagnostic TcRnMessage where
-> ErrorWithoutFlag
TcRnInvalidDefaultedTyVar{}
-> ErrorWithoutFlag
+ TcRnNamespacedWarningPragmaWithoutFlag{}
+ -> ErrorWithoutFlag
diagnosticHints = \case
TcRnUnknownMessage m
@@ -3170,6 +3183,8 @@ instance Diagnostic TcRnMessage where
-> noHints
TcRnInvalidDefaultedTyVar{}
-> noHints
+ TcRnNamespacedWarningPragmaWithoutFlag{}
+ -> [suggestExtension LangExt.ExplicitNamespaces]
diagnosticCode = constructorCode
=====================================
compiler/GHC/Tc/Errors/Types.hs
=====================================
@@ -4205,6 +4205,13 @@ data TcRnMessage where
-> NE.NonEmpty TcTyVar -- ^ The invalid type variables of the proposal
-> TcRnMessage
+ {-| TcRnNamespacedWarningPragmaWithoutFlag is an error that occurs when
+ a namespace specifier is used in {-# WARNING ... #-} or {-# DEPRECATED ... #-}
+ pragmas without the -XExplicitNamespaces extension enabled
+
+ -}
+ TcRnNamespacedWarningPragmaWithoutFlag :: WarnDecl GhcPs -> TcRnMessage
+
deriving Generic
=====================================
compiler/GHC/Types/Error/Codes.hs
=====================================
@@ -600,6 +600,7 @@ type family GhcDiagnosticCode c = n | n -> c where
GhcDiagnosticCode "TcRnDeprecatedInvisTyArgInConPat" = 69797
GhcDiagnosticCode "TcRnInvalidDefaultedTyVar" = 45625
GhcDiagnosticCode "TcRnIllegalTermLevelUse" = 01928
+ GhcDiagnosticCode "TcRnNamespacedWarningPragmaWithoutFlag" = 14995
-- TcRnTypeApplicationsDisabled
GhcDiagnosticCode "TypeApplication" = 23482
=====================================
docs/users_guide/9.10.1-notes.rst
=====================================
@@ -75,9 +75,10 @@ Language
- GHC Proposal `#65 <https://github.com/ghc-proposals/ghc-proposals/blob/master/proposals/0065-type-infix.rst>`_
"Require namespacing fixity declarations for type names and WARNING/DEPRECATED pragmas" has been partially implemented.
- Now you can specify namespace of a name that you want to warn about or deprecate: ::
+ Now, with :extension:`ExplicitNamespaces` enabled, you can specify the
+ namespace of a name that you want to warn about or deprecate: ::
- {-# DEPRACATED type D "Use `()` instead" #-} -- this will deprecate type D, but will not touch pattern synonym
+ {-# DEPRECATED type D "Use `()` instead" #-} -- this will deprecate type D, but will not touch pattern synonym
data D = MkD
{-# DEPRECATED data D "Use `MkD` instead" #-} -- this will deprecate pattern synonym only
=====================================
docs/users_guide/exts/pragmas.rst
=====================================
@@ -251,7 +251,8 @@ When a deprecated name appears in both value and type namespaces (i.e. punning o
{-# DEPRECATED D "This will deprecate both the type D and the pattern synonym D" #-}
It is possible to specify the namespace of the name to be warned about
-or deprecated using ``type`` and ``data`` specifiers: ::
+or deprecated using ``type`` and ``data`` specifiers, but this feature
+requires enabling :extension:`ExplicitNamespaces`: ::
{-# LANGUAGE PatternSynonyms #-}
=====================================
libraries/ghc-prim/GHC/Tuple.hs
=====================================
@@ -1,5 +1,5 @@
{-# LANGUAGE Trustworthy #-}
-{-# LANGUAGE NoImplicitPrelude, PatternSynonyms #-}
+{-# LANGUAGE NoImplicitPrelude, PatternSynonyms, ExplicitNamespaces #-}
-----------------------------------------------------------------------------
-- |
-- Module : GHC.Tuple
=====================================
testsuite/tests/warnings/should_compile/T24396a.hs
=====================================
@@ -1,3 +1,5 @@
+{-# LANGUAGE ExplicitNamespaces #-}
+
module T24396a where
class C1
=====================================
testsuite/tests/warnings/should_fail/T24396c.hs
=====================================
@@ -0,0 +1,20 @@
+
+module T24396c where
+
+
+f = id
+
+{-# WARNING data f "warning on data level" #-}
+
+data F
+
+{-# WARNING type F "warning on type level" #-}
+
+
+g = id
+
+{-# DEPRECATED data g "deprecation on data level" #-}
+
+data G
+
+{-# DEPRECATED type G "deprecation on type level" #-}
=====================================
testsuite/tests/warnings/should_fail/T24396c.stderr
=====================================
@@ -0,0 +1,24 @@
+
+T24396c.hs:7:13: error: [GHC-14995]
+ Illegal use of the ‘data’ keyword:
+ data f "warning on data level"
+ in a WARNING pragma
+ Suggested fix: Perhaps you intended to use ExplicitNamespaces
+
+T24396c.hs:11:13: error: [GHC-14995]
+ Illegal use of the ‘type’ keyword:
+ type F "warning on type level"
+ in a WARNING pragma
+ Suggested fix: Perhaps you intended to use ExplicitNamespaces
+
+T24396c.hs:16:16: error: [GHC-14995]
+ Illegal use of the ‘data’ keyword:
+ data g "deprecation on data level"
+ in a DEPRECATED pragma
+ Suggested fix: Perhaps you intended to use ExplicitNamespaces
+
+T24396c.hs:20:16: error: [GHC-14995]
+ Illegal use of the ‘type’ keyword:
+ type G "deprecation on type level"
+ in a DEPRECATED pragma
+ Suggested fix: Perhaps you intended to use ExplicitNamespaces
=====================================
testsuite/tests/warnings/should_fail/all.T
=====================================
@@ -26,3 +26,4 @@ test('WarningCategory5', [extra_files(['WarningCategory1.hs', 'WarningCategory1_
test('WarningCategory6', [extra_files(['WarningCategory1.hs', 'WarningCategory1_B.hs', 'WarningCategoryModule.hs'])], multimod_compile_fail, ['WarningCategory1', '-v0 -Wno-extended-warnings -Wdeprecations -Werror=warnings-deprecations'])
test('WarningCategory7', [extra_files(['WarningCategory1.hs', 'WarningCategory1_B.hs', 'WarningCategoryModule.hs'])], multimod_compile_fail, ['WarningCategory1', '-v0 -Werror -w -Wall'])
test('WarningCategoryInvalid', normal, compile_fail, [''])
+test('T24396c', normal, compile_fail, [''])
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/43fb0d53efb9de3ad58253b39ecd1fa5c86fdf64
--
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/43fb0d53efb9de3ad58253b39ecd1fa5c86fdf64
You're receiving this email because of your account on gitlab.haskell.org.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/ghc-commits/attachments/20240205/722e1fd5/attachment-0001.html>
More information about the ghc-commits
mailing list