Commit d42eef34 authored by Simon Jakobi's avatar Simon Jakobi Committed by Krzysztof Gogolewski

--show-iface: Qualify all non-local names

Summary:
In order to disambiguate names from different modules, qualify all names
that don't originate in the current module.

Also update docs for QueryQualifyName

Test Plan: validate

Reviewers: simonpj, bgamari

Reviewed By: simonpj

Subscribers: rwbarton, thomie, carter, tdammers

GHC Trac Issues: #15269

Differential Revision: https://phabricator.haskell.org/D4852
parent 193eeee6
......@@ -1047,6 +1047,15 @@ ifaceStats eps
Printing interfaces
* *
************************************************************************
Note [Name qualification with --show-iface]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In order to disambiguate between identifiers from different modules, we qualify
all names that don't originate in the current module. In order to keep visual
noise as low as possible, we keep local names unqualified.
For some background on this choice see trac #15269.
-}
-- | Read binary interface, and print it out
......@@ -1057,8 +1066,15 @@ showIface hsc_env filename = do
iface <- initTcRnIf 's' hsc_env () () $
readBinIface IgnoreHiWay TraceBinIFaceReading filename
let dflags = hsc_dflags hsc_env
-- See Note [Name qualification with --show-iface]
qualifyImportedNames mod _
| mod == mi_module iface = NameUnqual
| otherwise = NameNotInScope1
print_unqual = QueryQualify qualifyImportedNames
neverQualifyModules
neverQualifyPackages
putLogMsg dflags NoReason SevDump noSrcSpan
(defaultDumpStyle dflags) (pprModIface iface)
(mkDumpStyle dflags print_unqual) (pprModIface iface)
-- Show a ModIface but don't display details; suitable for ModIfaces stored in
-- the EPT.
......
......@@ -181,12 +181,8 @@ data PrintUnqualified = QueryQualify {
queryQualifyPackage :: QueryQualifyPackage
}
-- | given an /original/ name, this function tells you which module
-- name it should be qualified with when printing for the user, if
-- any. For example, given @Control.Exception.catch@, which is in scope
-- as @Exception.catch@, this function will return @Just "Exception"@.
-- Note that the return value is a ModuleName, not a Module, because
-- in source code, names are qualified by ModuleNames.
-- | Given a `Name`'s `Module` and `OccName`, decide whether and how to qualify
-- it.
type QueryQualifyName = Module -> OccName -> QualifyName
-- | For a given module, we need to know whether to print it with
......
instance [orphan] IsList [Bool] = $fIsListBool
instance IsList [X] = $fIsListX
family instance Item [X] = D:R:ItemX
family instance [orphan] Item [Bool] = D:R:ItemBool
"myrule1" [orphan] forall @ a id @ (a -> a) (id @ a) = id @ a
"myrule2" forall id @ (X -> X) f = f
instance [orphan] GHC.Exts.IsList [GHC.Types.Bool] = $fIsListBool
instance GHC.Exts.IsList [X] = $fIsListX
family instance GHC.Exts.Item [X] = D:R:ItemX
family instance [orphan] GHC.Exts.Item [GHC.Types.Bool]
"myrule1" [orphan] forall @ a
"myrule2" forall GHC.Base.id @ (X -> X) f = f
$wupd :: Double# -> Double#
$wupd :: GHC.Prim.Double# -> GHC.Prim.Double#
{- HasNoCafRefs, Strictness: m, Unfolding: (C# 'p'#) -}
{- HasNoCafRefs, Strictness: m, Unfolding: (C# 'q'#) -}
{- HasNoCafRefs, Strictness: m, Unfolding: (GHC.Types.C# 'p'#) -}
{- HasNoCafRefs, Strictness: m, Unfolding: (GHC.Types.C# 'q'#) -}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment