haste-compiler-0.5.3: src/Haste/AST/PP/Opts.hs
{-# LANGUAGE OverloadedStrings #-}
-- | Basic config types for Haste's pretty printer.
module Haste.AST.PP.Opts where
import Data.ByteString.Builder
-- | Pretty-printing options
data PPOpts = PPOpts {
nameComments :: Bool, -- ^ Emit comments for externals?
externalAnnotation :: Bool, -- ^ Emit comments for names?
useIndentation :: Bool, -- ^ Should we indent at all?
indentStr :: Builder, -- ^ Indentation step.
useNewlines :: Bool, -- ^ Use line breaks?
useSpaces :: Bool, -- ^ Use spaces other than where necessary?
preserveNames :: Bool -- ^ Use STG names?
}
defaultPPOpts :: PPOpts
defaultPPOpts = PPOpts {
nameComments = False,
externalAnnotation = False,
useIndentation = False,
indentStr = " ",
useNewlines = False,
useSpaces = False,
preserveNames = False
}
-- | Print code using indentation, whitespace and newlines.
withPretty :: PPOpts -> PPOpts
withPretty opts = opts {
useIndentation = True,
indentStr = " ",
useNewlines = True,
useSpaces = True
}
-- | Annotate non-local, non-JS symbols with qualified names.
withAnnotations :: PPOpts -> PPOpts
withAnnotations opts = opts {nameComments = True}
-- | Annotate externals with /* EXTERNAL */ comment.
withExtAnnotation :: PPOpts -> PPOpts
withExtAnnotation opts = opts {externalAnnotation = True}
-- | Preserve STG names. Currently slightly broken; don't use.
withHSNames :: PPOpts -> PPOpts
withHSNames opts = opts {preserveNames = True}