{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE TemplateHaskellQuotes #-}

module Test.Tasty.AutoCollect.ExternalNames (
  ExternalNames (..),
  loadExternalNames,
) where

import Test.Tasty (TestTree)

import Test.Tasty.AutoCollect.Error
import Test.Tasty.AutoCollect.GHC
import Test.Tasty.Ext.Todo (testTreeTodo)

data ExternalNames = ExternalNames
  { ExternalNames -> Name
name_TestTree :: Name
  , ExternalNames -> Name
name_testTreeTodo :: Name
  }

loadExternalNames :: HscEnv -> IO ExternalNames
loadExternalNames :: HscEnv -> IO ExternalNames
loadExternalNames HscEnv
env = do
  Name
name_TestTree <- Name -> IO Name
loadName ''TestTree
  Name
name_testTreeTodo <- Name -> IO Name
loadName 'testTreeTodo
  ExternalNames -> IO ExternalNames
forall (f :: * -> *) a. Applicative f => a -> f a
pure ExternalNames :: Name -> Name -> ExternalNames
ExternalNames{Name
name_testTreeTodo :: Name
name_TestTree :: Name
name_testTreeTodo :: Name
name_TestTree :: Name
..}
  where
    loadName :: Name -> IO Name
loadName Name
name =
      HscEnv -> IORef NameCache -> Name -> IO (Maybe Name)
thNameToGhcNameIO HscEnv
env (HscEnv -> IORef NameCache
hsc_NC HscEnv
env) Name
name
        IO (Maybe Name) -> (Maybe Name -> IO Name) -> IO Name
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= IO Name -> (Name -> IO Name) -> Maybe Name -> IO Name
forall b a. b -> (a -> b) -> Maybe a -> b
maybe (String -> IO Name
forall a. String -> a
autocollectError (String -> IO Name) -> String -> IO Name
forall a b. (a -> b) -> a -> b
$ String
"Could not get Name for " String -> String -> String
forall a. [a] -> [a] -> [a]
++ Name -> String
forall a. Show a => a -> String
show Name
name) Name -> IO Name
forall (m :: * -> *) a. Monad m => a -> m a
return