summaryrefslogtreecommitdiff
path: root/compiler/utils/Outputable.lhs
diff options
context:
space:
mode:
Diffstat (limited to 'compiler/utils/Outputable.lhs')
-rw-r--r--compiler/utils/Outputable.lhs63
1 files changed, 35 insertions, 28 deletions
diff --git a/compiler/utils/Outputable.lhs b/compiler/utils/Outputable.lhs
index e32261de65..8d5e34ebc1 100644
--- a/compiler/utils/Outputable.lhs
+++ b/compiler/utils/Outputable.lhs
@@ -116,7 +116,7 @@ import GHC.Show ( showMultiLineString )
\begin{code}
data PprStyle
- = PprUser PrintUnqualified Depth
+ = PprUser PrintUnqualified Depth Bool
-- Pretty-print in a way that will make sense to the
-- ordinary user; must be very close to Haskell
-- syntax, etc.
@@ -191,7 +191,7 @@ neverQualify = (neverQualifyNames, neverQualifyModules)
defaultUserStyle, defaultDumpStyle :: PprStyle
-defaultUserStyle = mkUserStyle neverQualify AllTheWay
+defaultUserStyle = mkUserStyle neverQualify AllTheWay False
-- Print without qualifiers to reduce verbosity, unless -dppr-debug
defaultDumpStyle | opt_PprStyle_Debug = PprDebug
@@ -202,19 +202,20 @@ defaultErrStyle :: DynFlags -> PprStyle
-- It's a bit of a hack because it doesn't take into account what's in scope
-- Only used for desugarer warnings, and typechecker errors in interface sigs
-- NB that -dppr-debug will still get into PprDebug style
-defaultErrStyle dflags = mkErrStyle dflags neverQualify
+defaultErrStyle dflags = mkErrStyle dflags neverQualify (useUnicodeSyntax dflags)
-- | Style for printing error messages
-mkErrStyle :: DynFlags -> PrintUnqualified -> PprStyle
-mkErrStyle dflags qual = mkUserStyle qual (PartWay (pprUserLength dflags))
+mkErrStyle :: DynFlags -> PrintUnqualified -> Bool -> PprStyle
+mkErrStyle dflags qual useUnicode =
+ mkUserStyle qual (PartWay (pprUserLength dflags)) useUnicode
cmdlineParserStyle :: PprStyle
-cmdlineParserStyle = mkUserStyle alwaysQualify AllTheWay
+cmdlineParserStyle = mkUserStyle alwaysQualify AllTheWay False
-mkUserStyle :: PrintUnqualified -> Depth -> PprStyle
-mkUserStyle unqual depth
+mkUserStyle :: PrintUnqualified -> Depth -> Bool -> PprStyle
+mkUserStyle unqual depth useUnicode
| opt_PprStyle_Debug = PprDebug
- | otherwise = PprUser unqual depth
+ | otherwise = PprUser unqual depth useUnicode
\end{code}
Orthogonal to the above printing styles are (possibly) some
@@ -256,9 +257,9 @@ withPprStyleDoc dflags sty d = runSDoc d (initSDocContext dflags sty)
pprDeeper :: SDoc -> SDoc
pprDeeper d = SDoc $ \ctx -> case ctx of
- SDC{sdocStyle=PprUser _ (PartWay 0)} -> Pretty.text "..."
- SDC{sdocStyle=PprUser q (PartWay n)} ->
- runSDoc d ctx{sdocStyle = PprUser q (PartWay (n-1))}
+ SDC{sdocStyle=PprUser _ (PartWay 0) _} -> Pretty.text "..."
+ SDC{sdocStyle=PprUser q (PartWay n) uU} ->
+ runSDoc d ctx{sdocStyle = PprUser q (PartWay (n-1)) uU}
_ -> runSDoc d ctx
pprDeeperList :: ([SDoc] -> SDoc) -> [SDoc] -> SDoc
@@ -267,10 +268,10 @@ pprDeeperList f ds
| null ds = f []
| otherwise = SDoc work
where
- work ctx@SDC{sdocStyle=PprUser q (PartWay n)}
+ work ctx@SDC{sdocStyle=PprUser q (PartWay n) uU}
| n==0 = Pretty.text "..."
| otherwise =
- runSDoc (f (go 0 ds)) ctx{sdocStyle = PprUser q (PartWay (n-1))}
+ runSDoc (f (go 0 ds)) ctx{sdocStyle = PprUser q (PartWay (n-1)) uU}
where
go _ [] = []
go i (d:ds) | i >= n = [text "...."]
@@ -280,8 +281,8 @@ pprDeeperList f ds
pprSetDepth :: Depth -> SDoc -> SDoc
pprSetDepth depth doc = SDoc $ \ctx ->
case ctx of
- SDC{sdocStyle=PprUser q _} ->
- runSDoc doc ctx{sdocStyle = PprUser q depth}
+ SDC{sdocStyle=PprUser q _ uU} ->
+ runSDoc doc ctx{sdocStyle = PprUser q depth uU}
_ ->
runSDoc doc ctx
@@ -297,12 +298,16 @@ sdocWithPlatform f = sdocWithDynFlags (f . targetPlatform)
\begin{code}
qualName :: PprStyle -> QueryQualifyName
-qualName (PprUser (qual_name,_) _) mod occ = qual_name mod occ
-qualName _other mod _ = NameQual (moduleName mod)
+qualName (PprUser (qual_name,_) _ _) mod occ = qual_name mod occ
+qualName _other mod _ = NameQual (moduleName mod)
qualModule :: PprStyle -> QueryQualifyModule
-qualModule (PprUser (_,qual_mod) _) m = qual_mod m
-qualModule _other _m = True
+qualModule (PprUser (_,qual_mod) _ _) m = qual_mod m
+qualModule _other _m = True
+
+styleUseUnicode :: PprStyle -> Bool
+styleUseUnicode (PprUser _ _ b) = b
+styleUseUnicode _ = False
codeStyle :: PprStyle -> Bool
codeStyle (PprCode _) = True
@@ -321,8 +326,8 @@ debugStyle PprDebug = True
debugStyle _other = False
userStyle :: PprStyle -> Bool
-userStyle (PprUser _ _) = True
-userStyle _other = False
+userStyle (PprUser _ _ _) = True
+userStyle _other = False
ifPprDebug :: SDoc -> SDoc -- Empty for non-debug style
ifPprDebug d = SDoc $ \ctx ->
@@ -336,13 +341,13 @@ ifPprDebug d = SDoc $ \ctx ->
printForUser :: DynFlags -> Handle -> PrintUnqualified -> SDoc -> IO ()
printForUser dflags handle unqual doc
= Pretty.printDoc PageMode (pprCols dflags) handle
- (runSDoc doc (initSDocContext dflags (mkUserStyle unqual AllTheWay)))
+ (runSDoc doc (initSDocContext dflags (mkUserStyle unqual AllTheWay (useUnicodeSyntax dflags))))
printForUserPartWay :: DynFlags -> Handle -> Int -> PrintUnqualified -> SDoc
-> IO ()
printForUserPartWay dflags handle d unqual doc
= Pretty.printDoc PageMode (pprCols dflags) handle
- (runSDoc doc (initSDocContext dflags (mkUserStyle unqual (PartWay d))))
+ (runSDoc doc (initSDocContext dflags (mkUserStyle unqual (PartWay d) (useUnicodeSyntax dflags))))
-- printForC, printForAsm do what they sound like
printForC :: DynFlags -> Handle -> SDoc -> IO ()
@@ -382,12 +387,12 @@ showSDocOneLine dflags d
showSDocForUser :: DynFlags -> PrintUnqualified -> SDoc -> String
showSDocForUser dflags unqual doc
- = renderWithStyle dflags doc (mkUserStyle unqual AllTheWay)
+ = renderWithStyle dflags doc (mkUserStyle unqual AllTheWay (useUnicodeSyntax dflags))
showSDocUnqual :: DynFlags -> SDoc -> String
-- Only used by Haddock
showSDocUnqual dflags doc
- = renderWithStyle dflags doc (mkUserStyle neverQualify AllTheWay)
+ = renderWithStyle dflags doc (mkUserStyle neverQualify AllTheWay (useUnicodeSyntax dflags))
showSDocDump :: DynFlags -> SDoc -> String
showSDocDump dflags d = renderWithStyle dflags d defaultDumpStyle
@@ -500,8 +505,10 @@ forAllLit :: SDoc
forAllLit = unicodeSyntax (char '∀') (ptext (sLit "forall"))
unicodeSyntax :: SDoc -> SDoc -> SDoc
-unicodeSyntax unicode plain = sdocWithDynFlags $ \dflags ->
- if useUnicode dflags && useUnicodeSyntax dflags
+unicodeSyntax unicode plain =
+ sdocWithDynFlags $ \dflags ->
+ getPprStyle $ \style ->
+ if useUnicode dflags && styleUseUnicode style
then unicode
else plain