nimgrep: add --inContext and --notinContext options (#19528)

* nimgrep: add `--matchContext` and `--noMatchContext` options

* Rename options for uniformity

* Revise option names, add `--parentPath` options

* Revert --bin deprecation

* Copy-paste an original test from quantimnot

The origin was:
https://gist.githubusercontent.com/quantimnot/5d23b32fe0936ffc453220d20a87b9e2/raw/96544656d52332118295e55aa73718c389e5d194/tnimgrep.nim

* Change ! to n

* Attempt to fix test

* Fix test on Windows

* Change --contentsFile -> --inFile, add more tests

* Bump

* Change --parentPath to --dirpath
This commit is contained in:
Andrey Makarov 2022-09-14 19:28:01 +03:00 • committed by GitHub
commit 2140d05f34
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 683 additions and 104 deletions

View file

@ -46,8 +46,7 @@ Options:
nimgrep --filenames # In current dir
nimgrep --filenames "" DIRECTORY
# Note empty pattern "", lists all files in DIRECTORY
* Interpret patterns:
* Interprete patterns:
--peg PATTERN and PAT are Peg
--re PATTERN and PAT are regular expressions (default)
--rex, -x use the "extended" syntax for the regular expression
@ -62,28 +61,45 @@ Options:
* File system walk:
--recursive, -r process directories recursively
--follow follow all symlinks when processing recursively
--ext:EX1|EX2|... only search the files with the given extension(s),
empty one ("--ext") means files with missing extension
--noExt:EX1|... exclude files having given extension(s), use empty one to
skip files with no extension (like some binary files are)
--includeFile:PAT search only files whose names contain pattern PAT
--excludeFile:PAT skip files whose names contain pattern PAT
--includeDir:PAT search only files with their whole directory path
containing PAT
--excludeDir:PAT skip directories whose name (not path)
contain pattern PAT
--if,--ef,--id,--ed abbreviations of the 4 options above
--sortTime, -s[:asc|desc]
order files by the last modification time (default: off):
ascending (recent files go last) or descending
* Filter file content:
--match:PAT select files containing a (not displayed) match of PAT
--noMatch:PAT select files not containing any match of PAT
* Filter files (based on filesystem paths):
.. Hint:: Instead of `not` you can type just `n` for negative options below.
--ex[tensions]:EX1|EX2|...
only search the files with the given extension(s),
empty one (`--ex`) means files with missing extension
--notex[tensions]:EX1|EX2|...
exclude files having given extension(s), use empty one to
skip files with no extension (like some binary files are)
--fi[lename]:PAT search only files whose name matches pattern PAT
--notfi[lename]:PAT skip files whose name matches pattern PAT
--di[rname]:PAT select files that in their path have a directory name
that matches pattern PAT
--notdi[rname]:PAT do not descend into directories whose name (not path)
matches pattern PAT
--dirp[ath]:PAT select only files whose whole relative directory path
matches pattern PAT
--notdirp[ath]:PAT skip files whose whole relative directory path
matches pattern PAT
* Filter files (based on file contents):
--inF[ile]:PAT select files containing a (not displayed) match of PAT
--notinF[ile]:PAT skip files containing a match of PAT
--bin:on|off|only process binary files? (detected by \0 in first 1K bytes)
(default: on - binary and text files treated the same way)
--text, -t process only text files, the same as `--bin:off`
* Filter matches:
--inC[ontext]:PAT select only matches containing a match of PAT in their
surrounding context (multiline with `-c`, `-a`, `-b`)
--notinC[ontext]:PAT
skip matches not containing a match of PAT
in their surrounding context
* Represent results:
--nocolor output will be given without any colors
--color[:on] force color even if output is redirected (default: auto)