{-# LANGUAGE RecordWildCards #-} module HIndent.Ast.Name.Prefix ( PrefixName , mkPrefixName ) where import Data.Maybe import qualified GHC.Types.Name as GHC import qualified GHC.Types.Name.Reader as GHC import qualified GHC.Unit.Module as GHC import HIndent.Ast.NodeComments import {-# SOURCE #-} HIndent.Pretty import HIndent.Pretty.Combinators import HIndent.Pretty.NodeComments data PrefixName = PrefixName { PrefixName -> String name :: String , PrefixName -> Maybe ModuleName moduleName :: Maybe GHC.ModuleName , PrefixName -> Bool parentheses :: Bool } instance CommentExtraction PrefixName where nodeComments :: PrefixName -> NodeComments nodeComments PrefixName {} = [LEpaComment] -> [LEpaComment] -> [LEpaComment] -> NodeComments NodeComments [] [] [] instance Pretty PrefixName where pretty' :: PrefixName -> Printer () pretty' PrefixName {Bool String Maybe ModuleName name :: PrefixName -> String moduleName :: PrefixName -> Maybe ModuleName parentheses :: PrefixName -> Bool name :: String moduleName :: Maybe ModuleName parentheses :: Bool ..} = Printer () -> Printer () forall {a}. Printer a -> Printer a wrap (Printer () -> Printer ()) -> Printer () -> Printer () forall a b. (a -> b) -> a -> b $ [Printer ()] -> Printer () hDotSep ([Printer ()] -> Printer ()) -> [Printer ()] -> Printer () forall a b. (a -> b) -> a -> b $ [Maybe (Printer ())] -> [Printer ()] forall a. [Maybe a] -> [a] catMaybes [ModuleName -> Printer () forall a. Pretty a => a -> Printer () pretty (ModuleName -> Printer ()) -> Maybe ModuleName -> Maybe (Printer ()) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> Maybe ModuleName moduleName, Printer () -> Maybe (Printer ()) forall a. a -> Maybe a Just (Printer () -> Maybe (Printer ())) -> Printer () -> Maybe (Printer ()) forall a b. (a -> b) -> a -> b $ HasCallStack => String -> Printer () String -> Printer () string String name] where wrap :: Printer a -> Printer a wrap = if Bool parentheses then Printer a -> Printer a forall {a}. Printer a -> Printer a parens else Printer a -> Printer a forall a. a -> a id mkPrefixName :: GHC.RdrName -> PrefixName mkPrefixName :: RdrName -> PrefixName mkPrefixName (GHC.Unqual OccName name) = String -> Maybe ModuleName -> Bool -> PrefixName PrefixName (OccName -> String forall a. Outputable a => a -> String showOutputable OccName name) Maybe ModuleName forall a. Maybe a Nothing (OccName -> Bool parensNeeded OccName name) mkPrefixName (GHC.Qual ModuleName modName OccName name) = String -> Maybe ModuleName -> Bool -> PrefixName PrefixName (OccName -> String forall a. Outputable a => a -> String showOutputable OccName name) (ModuleName -> Maybe ModuleName forall a. a -> Maybe a Just ModuleName modName) (OccName -> Bool parensNeeded OccName name) mkPrefixName (GHC.Orig {}) = String -> PrefixName forall a. HasCallStack => String -> a error String "This AST node should not appear in the parser output." mkPrefixName (GHC.Exact Name name) = String -> Maybe ModuleName -> Bool -> PrefixName PrefixName (Name -> String forall a. Outputable a => a -> String showOutputable Name name) Maybe ModuleName forall a. Maybe a Nothing (OccName -> Bool parensNeeded (OccName -> Bool) -> OccName -> Bool forall a b. (a -> b) -> a -> b $ Name -> OccName forall name. HasOccName name => name -> OccName GHC.occName Name name) parensNeeded :: GHC.OccName -> Bool parensNeeded :: OccName -> Bool parensNeeded = OccName -> Bool GHC.isSymOcc