33module Haskell.Ide.Engine.Plugin.Hoogle where
44
55import Control.Monad.IO.Class
6+ import Control.Monad (join )
7+ import Control.Exception
68import Data.Aeson
79import Data.Bifunctor
810import Data.Maybe
@@ -42,7 +44,11 @@ hoogleDescriptor plId = PluginDescriptor
4244
4345-- ---------------------------------------------------------------------
4446
45- data HoogleError = NoDb | NoResults deriving (Eq ,Ord ,Show )
47+ data HoogleError
48+ = NoDb
49+ | DbFail T. Text
50+ | NoResults
51+ deriving (Eq ,Ord ,Show )
4652
4753newtype HoogleDb = HoogleDb (Maybe FilePath )
4854
@@ -53,6 +59,8 @@ hoogleErrorToIdeError NoResults =
5359 IdeError PluginError " No results found" Null
5460hoogleErrorToIdeError NoDb =
5561 IdeError PluginError " Hoogle database not found. Run hoogle generate to generate" Null
62+ hoogleErrorToIdeError (DbFail msg) =
63+ IdeError PluginError (" Hoogle failed with following error: " <> msg) Null
5664
5765instance ExtensionClass HoogleDb where
5866 initialValue = HoogleDb Nothing
@@ -216,8 +224,8 @@ lookupCmd' n term = do
216224runHoogleQuery :: Maybe FilePath -> T. Text -> ([Target ] -> Either HoogleError a ) -> IO (Either HoogleError a )
217225runHoogleQuery Nothing _ _ = return $ Left NoDb
218226runHoogleQuery (Just db) quer f = do
219- res <- searchHoogle db quer
220- return ( f res)
227+ res <- try ( searchHoogle db quer) :: IO ( Either ErrorCall [ Target ])
228+ return . join $ bimap ( DbFail . T. pack . show ) f res
221229
222230
223231-- | Run a query for Hoogle on the given Hoogle database.
0 commit comments