{-# LANGUAGE NoImplicitPrelude #-} module Language.Haskell.Brittany.Internal.Util.AST where import Language.Haskell.Brittany.Internal.Prelude import qualified Data.Text as Text import GHC ( moduleName , moduleNameString , GenLocated(L) ) import qualified GHC import GHC.Types.Name ( getOccString ) import GHC.Types.Name.Occurrence ( occNameString ) import GHC.Types.Name.Reader ( RdrName ( Exact , Orig , Qual , Unqual ) ) rdrNameToText :: RdrName -> Text -- rdrNameToText = Text.pack . show . flip runSDoc unsafeGlobalDynFlags . ppr rdrNameToText (Unqual occname) = Text.pack $ occNameString occname rdrNameToText (Qual mname occname) = Text.pack $ moduleNameString mname ++ "." ++ occNameString occname rdrNameToText (Orig modul occname) = Text.pack $ moduleNameString (moduleName modul) ++ occNameString occname rdrNameToText (Exact name) = Text.pack $ getOccString name getDeclBindingNames :: GHC.LHsDecl GhcPs -> [String] getDeclBindingNames (L _ decl) = case decl of GHC.SigD _ (GHC.TypeSig _ ns _) -> ns <&> \(L _ n) -> Text.unpack (rdrNameToText n) GHC.ValD _ (GHC.FunBind _ (L _ n) _ _) -> [Text.unpack $ rdrNameToText n] _ -> []