unused-0.8.0.0: src/Unused/TermSearch.hs
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