Skip to content

Commit 3327288

Browse files
committed
refactor part 2
1 parent d24afca commit 3327288

File tree

3 files changed

+33
-26
lines changed

3 files changed

+33
-26
lines changed

Diff for: src/MyGrep/Common/Utils.hs

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,4 @@ fancyPrint rLine = T.putStrLn $ fileName <> "\t:: " <> lineNumber' <> "\t" <> li
1818
line' = renderChunkText With8Colours $ fore brightYellow $ chunk $ getL rLine
1919
fName = fromMaybe "" (file rLine)
2020
lName = maybe "" show (lineNumber rLine)
21-
getL rLine_@ResultLine{line=ll} = ll
21+
getL ResultLine{line=ll} = ll

Diff for: src/MyGrep/Core.hs

+1-4
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
module MyGrep.Core where
66

77
import MyGrep.Common.Types
8-
import MyGrep.Common.Utils
98
import MyGrep.Search
109
import qualified System.Environment as Env
1110
import qualified Data.Text as T
@@ -47,6 +46,4 @@ main' = do
4746
eArg <- parseArguments
4847
case eArg of
4948
Left err -> T.putStrLn $ "Error: " <> getError err
50-
Right arg -> do
51-
res <- search arg
52-
mapM_ fancyPrint res
49+
Right arg -> search arg

Diff for: src/MyGrep/Search.hs

+31-21
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
module MyGrep.Search (search) where
33

44
import MyGrep.Common.Types
5-
import MyGrep.Common.Utils (trim)
5+
import MyGrep.Common.Utils (trim,fancyPrint)
66
import qualified Data.Text.IO as T
77
import qualified Data.Text as T
88
import System.Directory
@@ -11,38 +11,48 @@ import Data.Maybe (fromMaybe)
1111
import Control.Exception
1212
import System.FilePath
1313

14-
search :: Args -> IO [ResultLine]
14+
search :: Args -> IO ()
1515
search Args{..} = do
1616
case searchLocationType of
1717
File -> searchInFile $ fromMaybe "" searchLocation
1818
Directory -> searchInDirectory $ fromMaybe "" searchLocation
19-
STDIN -> searchString 0 "" . T.lines <$> T.getContents
20-
_ -> pure [] -- impossible case
19+
STDIN -> T.getContents >>= (\content -> searchString 0 "" (T.lines content))
2120
where
22-
searchInDirectory :: FilePath -> IO [ResultLine]
21+
searchInDirectory :: FilePath -> IO ()
2322
searchInDirectory searchLocation' = do
2423
files_ <- listDirectory searchLocation'
2524
let files = filter (\x -> head x /= '.') files_ -- filtering out hidden directories
26-
mconcat $ map (\file -> do
27-
res <- doesDirectoryExist (searchLocation' </> file)
28-
(if res then searchInDirectory (searchLocation' </> file) else searchInFile (searchLocation' </> file))
29-
) files
25+
mapM_ go files
26+
where
27+
go :: FilePath -> IO ()
28+
go fp = do
29+
let fullPath = searchLocation' </> fp
30+
doesDirectoryExist fullPath >>= (\isDir -> if isDir then searchInDirectory fullPath
31+
else searchInFile fullPath)
3032

31-
searchInFile :: FilePath -> IO [ResultLine]
33+
searchInFile :: FilePath -> IO ()
3234
searchInFile fileName = do
33-
eContent <- try $ T.lines <$> T.readFile fileName :: IO (Either IOError [T.Text])
35+
eContent <- try $ T.lines <$> T.readFile fileName
36+
:: IO (Either IOError [T.Text])
3437
case eContent of
35-
Left _ -> pure [] -- print (e :: IOError)
36-
Right content -> pure $ searchString 0 fileName content
38+
Left _ -> pure () -- print (e :: IOError)
39+
Right content -> searchString 0 fileName content
3740

38-
searchString :: Int -> FilePath -> [T.Text] -> [ResultLine]
39-
searchString _ _ [] = []
41+
searchString :: Int -> FilePath -> [T.Text] -> IO ()
42+
searchString _ _ [] = pure ()
4043
searchString n fileName (hayStack:hayStacks) = do
41-
let res = if CaseInSensitive `elem` flags then indices (T.toLower searchTerm) (T.toLower hayStack) else indices searchTerm hayStack
44+
let res = if CaseInSensitive `elem` flags
45+
then indices (T.toLower searchTerm) (T.toLower hayStack)
46+
else indices searchTerm hayStack
4247
case res of
4348
[] -> searchString (n+1) fileName hayStacks
44-
_ -> ResultLine {
45-
file=Just fileName
46-
, lineNumber=if LineNumber `elem` flags then Just n else Nothing
47-
, line=trim hayStack
48-
} : searchString (n+1) fileName hayStacks
49+
_ -> do
50+
let
51+
resultLine = ResultLine {
52+
file=Just fileName
53+
, lineNumber= if LineNumber `elem` flags
54+
then Just n else Nothing
55+
, line=trim hayStack
56+
}
57+
fancyPrint resultLine
58+
searchString (n+1) fileName hayStacks

0 commit comments

Comments
 (0)