module Unused.TermSearch ( SearchResults(..) , SearchBackend(..) , SearchTerm , search ) where import qualified Data.Maybe as M import GHC.IO.Exception (ExitCode(ExitSuccess)) import qualified System.Process as P import Unused.TermSearch.Internal (commandLineOptions, parseSearchResult) import Unused.TermSearch.Types (SearchResults(..), SearchBackend(..)) import Unused.Types (SearchTerm, searchTermToString) search :: SearchBackend -> SearchTerm -> IO SearchResults search backend t = SearchResults . M.mapMaybe (parseSearchResult backend t) <$> (lines <$> performSearch backend (searchTermToString t)) performSearch :: SearchBackend -> String -> IO String performSearch b t = extractSearchResults b <$> searchOutcome where searchOutcome = P.readProcessWithExitCode (backendToCommand b) (commandLineOptions b t) "" backendToCommand Rg = "rg" backendToCommand Ag = "ag" extractSearchResults :: SearchBackend -> (ExitCode, String, String) -> String extractSearchResults Rg (ExitSuccess, stdout, _) = stdout extractSearchResults Rg (_, _, stderr) = stderr extractSearchResults Ag (_, stdout, _) = stdout