cgrep 6.6.4 → 6.6.7
raw patch · 9 files changed
+62/−38 lines, 9 files
Files
- README.md +3/−2
- cgrep.cabal +1/−1
- src/CGrep/Output.hs +7/−2
- src/CGrep/Parser/Cpp/Token.hs +24/−24
- src/CGrep/Parser/Generic/Token.hs +5/−5
- src/CmdOptions.hs +2/−0
- src/Config.hs +2/−2
- src/Main.hs +16/−2
- src/Options.hs +2/−0
README.md view
@@ -7,7 +7,7 @@ Usage ----- -Cgrep 6.6.4. Usage: cgrep [OPTION] [PATTERN] files...+Cgrep 6.6.7. Usage: cgrep [OPTION] [PATTERN] files... cgrep [OPTIONS] [ITEM] @@ -79,7 +79,8 @@ #1... e.g. "#f:#n #0 #1" --json Format output as json object --xml Format output as xml document-+ --vim Invoke vim program by passing the files that+ match Concurrency:
cgrep.cabal view
@@ -1,6 +1,6 @@ Name: cgrep Description: Cgrep: a context-aware grep for source codes-Version: 6.6.4+Version: 6.6.7 Synopsis: Command line tool Homepage: http://awgn.github.io/cgrep/ License: GPL-2
src/CGrep/Output.hs view
@@ -15,7 +15,7 @@ -- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -- -module CGrep.Output (Output(),+module CGrep.Output (Output(..), mkOutput, putPrettyHeader, putPrettyFooter,@@ -44,7 +44,12 @@ import Options -data Output = Output FilePath Int Text8 [Token]+data Output = Output+ { outFilePath :: FilePath+ , outLineNo :: Int+ , outLine :: Text8+ , outTokens :: [Token]+ } deriving (Show)
src/CGrep/Parser/Cpp/Token.hs view
@@ -86,65 +86,65 @@ tokenFilter :: TokenFilter -> Token -> Bool-tokenFilter filt (TokenIdentifier{}) = filtIdentifier filt-tokenFilter filt (TokenDirective{}) = filtDirective filt-tokenFilter filt (TokenKeyword{}) = filtKeyword filt-tokenFilter filt (TokenHeaderName{}) = filtHeader filt-tokenFilter filt (TokenNumber{}) = filtNumber filt-tokenFilter filt (TokenString{}) = filtString filt-tokenFilter filt (TokenChar{}) = filtChar filt-tokenFilter filt (TokenOperOrPunct{}) = filtOper filt+tokenFilter filt TokenIdentifier{} = filtIdentifier filt+tokenFilter filt TokenDirective{} = filtDirective filt+tokenFilter filt TokenKeyword{} = filtKeyword filt+tokenFilter filt TokenHeaderName{} = filtHeader filt+tokenFilter filt TokenNumber{} = filtNumber filt+tokenFilter filt TokenString{} = filtString filt+tokenFilter filt TokenChar{} = filtChar filt+tokenFilter filt TokenOperOrPunct{} = filtOper filt tokenCompare :: Token -> Token -> Bool-tokenCompare (TokenIdentifier { toString = l }) (TokenIdentifier { toString = r }) = l == r-tokenCompare (TokenDirective { toString = l }) (TokenDirective { toString = r }) = l == r-tokenCompare (TokenKeyword { toString = l }) (TokenKeyword { toString = r }) = l == r-tokenCompare (TokenNumber { toString = l }) (TokenNumber { toString = r }) = l == r-tokenCompare (TokenHeaderName { toString = l }) (TokenHeaderName { toString = r }) = l == r-tokenCompare (TokenString { toString = l }) (TokenString { toString = r }) = l == r-tokenCompare (TokenChar { toString = l }) (TokenChar { toString = r }) = l == r-tokenCompare (TokenOperOrPunct{ toString = l }) (TokenOperOrPunct{ toString = r }) = l == r+tokenCompare TokenIdentifier { toString = l } TokenIdentifier { toString = r } = l == r+tokenCompare TokenDirective { toString = l } TokenDirective { toString = r } = l == r+tokenCompare TokenKeyword { toString = l } TokenKeyword { toString = r } = l == r+tokenCompare TokenNumber { toString = l } TokenNumber { toString = r } = l == r+tokenCompare TokenHeaderName { toString = l } TokenHeaderName { toString = r } = l == r+tokenCompare TokenString { toString = l } TokenString { toString = r } = l == r+tokenCompare TokenChar { toString = l } TokenChar { toString = r } = l == r+tokenCompare TokenOperOrPunct{ toString = l } TokenOperOrPunct{ toString = r } = l == r tokenCompare _ _ = False isIdentifier :: Token -> Bool-isIdentifier (TokenIdentifier {}) = True+isIdentifier TokenIdentifier{} = True isIdentifier _ = False isKeyword :: Token -> Bool-isKeyword (TokenKeyword {}) = True+isKeyword TokenKeyword{} = True isKeyword _ = False isDirective :: Token -> Bool-isDirective (TokenDirective {}) = True+isDirective TokenDirective {} = True isDirective _ = False isLiteralNumber :: Token -> Bool-isLiteralNumber (TokenNumber {}) = True+isLiteralNumber TokenNumber {} = True isLiteralNumber _ = False isHeaderName :: Token -> Bool-isHeaderName (TokenHeaderName {}) = True+isHeaderName TokenHeaderName {} = True isHeaderName _ = False isString :: Token -> Bool-isString (TokenString {}) = True+isString TokenString {} = True isString _ = False isChar :: Token -> Bool-isChar (TokenChar {}) = True+isChar TokenChar{} = True isChar _ = False isOperOrPunct :: Token -> Bool-isOperOrPunct (TokenOperOrPunct {}) = True+isOperOrPunct TokenOperOrPunct {} = True isOperOrPunct _ = False
src/CGrep/Parser/Generic/Token.hs view
@@ -84,11 +84,11 @@ tokenCompare :: Token -> Token -> Bool-tokenCompare (TokenAlpha { toString = l }) (TokenAlpha { toString = r }) = l == r-tokenCompare (TokenDigit { toString = l }) (TokenDigit { toString = r }) = l == r-tokenCompare (TokenLiteral { toString = l }) (TokenLiteral { toString = r }) = l == r-tokenCompare (TokenBracket { toString = l }) (TokenBracket { toString = r }) = l == r-tokenCompare (TokenOther { toString = l }) (TokenOther { toString = r }) = l == r+tokenCompare TokenAlpha { toString = l } TokenAlpha { toString = r } = l == r+tokenCompare TokenDigit { toString = l } TokenDigit { toString = r } = l == r+tokenCompare TokenLiteral{ toString = l } TokenLiteral{ toString = r } = l == r+tokenCompare TokenBracket{ toString = l } TokenBracket{ toString = r } = l == r+tokenCompare TokenOther { toString = l } TokenOther { toString = r } = l == r tokenCompare _ _ = False
src/CmdOptions.hs view
@@ -63,6 +63,8 @@ , no_linenumber= False &= help "Suppress the line number on output lines" &= explicit &= name "N" &= name "no-linenumber" , count = False &= help "Print only a count of matching lines per file" &= explicit &= name "count" , filename_only = False &= help "Print only the name of files containing matches" &= explicit &= name "filename-only"+ , editor = False &= help "Run the editor specified by EDITOR var., passing the files that match" &= explicit &=name "editor"+ , vim = False &= help "Run vim the editor passing the files that match" &= explicit &=name "vim" #ifdef ENABLE_HINT , hint = Nothing &= typ "STRING" &= help "Haskell interpreter output. Var: file, row, line, tokens.\ne.g. \"file ++ show (tokens)\"" &= explicit &= name "hint" #endif
src/Config.hs view
@@ -52,7 +52,7 @@ confs <- filterM doesFileExist [cgreprc, "." ++ cgreprc, home </> "." ++ cgreprc, "/etc" </> cgreprc] if notNull confs then liftM dropComments (readFile (head confs)) >>= \xs ->- return ((prettyRead xs "Config error" :: Config), Just (head confs))- else return $ (Config [] [] False, Nothing)+ return (prettyRead xs "Config error" :: Config, Just (head confs))+ else return (Config [] [] False, Nothing)
src/Main.hs view
@@ -24,6 +24,8 @@ import Data.Maybe import Data.Char import Data.Data()++import Data.IORef import Data.Version(showVersion) import Data.Function import qualified Data.Set as Set@@ -48,7 +50,7 @@ import System.PosixCompat.Files as PosixCompat import System.IO import System.Exit-import System.Process (readProcess)+import System.Process (readProcess, runProcess, waitForProcess) import CGrep.CGrep import CGrep.Lang@@ -170,6 +172,8 @@ let stop = jobs opts + matchingFiles <- liftIO $ newIORef Set.empty+ fix (\action n m -> unless (n == stop) $ do out <- liftIO $ atomically $ readTChan out_chan@@ -180,12 +184,22 @@ _ | json opts -> when m $ liftIO $ putStrLn "," | otherwise -> return () prettyOutput out >>= mapM_ (liftIO . putStrLn)+ liftIO $ when (vim opts || editor opts) $ mapM_ (modifyIORef matchingFiles . Set.insert . outFilePath) out action n True ) 0 False putPrettyFooter + -- run editor... + liftIO $ when (vim opts || editor opts) $ do+ editor' <- if vim opts+ then return (Just "vim")+ else lookupEnv "EDITOR"+ files <- readIORef matchingFiles+ void (runProcess (fromJust $ editor' <|> Just "vi") (Set.toList files) Nothing Nothing (Just stdin) (Just stdout) (Just stderr) >>= waitForProcess)++ main :: IO () main = do @@ -237,7 +251,7 @@ -- display the configuration in use when (isJust confpath) $- hPutStrLn stderr $ showBold opts ("Using '" ++ (fromJust confpath) ++ "' configuration file...")+ hPutStrLn stderr $ showBold opts ("Using '" ++ fromJust confpath ++ "' configuration file...") -- load files to parse:
src/Options.hs view
@@ -72,6 +72,8 @@ , format :: Maybe String , json :: Bool , xml :: Bool+ , editor :: Bool+ , vim :: Bool -- Parallel: , jobs :: Int , cores :: Int