41 lines
1.7 KiB
Haskell
41 lines
1.7 KiB
Haskell
{-# 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]
|
|
_ -> []
|