summaryrefslogtreecommitdiffstats
AgeCommit message (Collapse)Author
2018-08-21ripgrep: make --no-pcre2-unicode the canonical flagAndrew Gallant
Previously, we used --pcre2-unicode as the canonical flag despite the fact that it is enabled by default, which is inconsistent with how we handle other similar flags. The reason why --pcre2-unicode was made the canonical flag was to make it easier to discover since it would be sorted near the --pcre2 flag. To solve that problem, we simply start a convention that lists related flags in the docs. Fixes #1022
2018-08-20doc: fix typoAndrew Gallant
2018-08-20doc: caveatsAndrew Gallant
2018-08-20ripgrep: small cleanupsgrep-search-0.1.0grep-regex-0.1.0grep-printer-0.1.0grep-pcre2-0.1.0grep-matcher-0.1.0grep-0.2.0Andrew Gallant
2018-08-20doc: add section on PCRE2 performanceAndrew Gallant
2018-08-20deps: update other dependencies to latestAndrew Gallant
2018-08-20deps: update libripgrep crate versionsAndrew Gallant
This prepares them for an initial 0.1.0 release.
2018-08-20ignore/types: add .mako and .mao for Mako templatesAndy Freeland
I've personally never seen `.mao`, but GitHub includes it in Linguist: https://github.com/github/linguist/blob/4f11062304ae28b09a9b90c4536a92a27e142dcb/lib/linguist/languages.yml#L2702-L2709
2018-08-20complete: add completion reference guidedana
2018-08-20ripgrep: add --no-multiline-dotalldana
2018-08-20ripgrep: fix typos in option descriptionsdana
2018-08-20complete: update wording, exclusion, &c.dana
2018-08-20test_complete: match certain long options in description bodiesdana
2018-08-20changelog: massive update for libripgrepAndrew Gallant
This commit updates the CHANGELOG to reflect all the work done to make libripgrep a reality. * Closes #162 (libripgrep) * Closes #176 (multiline search) * Closes #188 (opt-in PCRE2 support) * Closes #244 (JSON output) * Closes #416 (Windows CRLF support) * Closes #917 (trim prefix whitespace) * Closes #993 (add --null-data flag) * Closes #997 (--passthru works with --replace) * Fixes #2 (memory maps and context handling work) * Fixes #200 (ripgrep stops when pipe is closed) * Fixes #389 (more intuitive `-w/--word-regexp`) * Fixes #643 (detection of stdin on Windows is better) * Fixes #441, Fixes #690, Fixes #980 (empty matching lines are weird) * Fixes #764 (coalesce color escapes) * Fixes #922 (memory maps failing is no big deal) * Fixes #937 (color escapes no longer used for empty matches) * Fixes #940 (--passthru does not impact exit status) * Fixes #1013 (show runtime CPU features in --version output)
2018-08-20tests: re-tool integration testsAndrew Gallant
This basically rewrites every integration test. We reduce the amount of magic involved here in terms of which arguments are being passed to ripgrep processes. To make up for the boiler plate saved by the magic, we make the Dir (formerly WorkDir) type a bit nicer to use, along with a new TestCommand that wraps a std::process::Command. In exchange, we get tests that are easier to read and write. We also run every test with the `--pcre2` flag to make sure that works, when PCRE2 is available.
2018-08-20ripgrep: migrate to libripgrepAndrew Gallant
This commit does the work to delete the old `grep` crate and effectively rewrite most of ripgrep core to use the new libripgrep crates. The new `grep` crate is now a facade that collects the various crates that make up libripgrep. The most complex part of ripgrep core is now arguably the translation between command line parameters and the library options, which is ultimately where we want to be.
2018-08-20libripgrep: initial commit introducing libripgrepAndrew Gallant
libripgrep is not any one library, but rather, a collection of libraries that roughly separate the following key distinct phases in a grep implementation: 1. Pattern matching (e.g., by a regex engine). 2. Searching a file using a pattern matcher. 3. Printing results. Ultimately, both (1) and (3) are defined by de-coupled interfaces, of which there may be multiple implementations. Namely, (1) is satisfied by the `Matcher` trait in the `grep-matcher` crate and (3) is satisfied by the `Sink` trait in the `grep2` crate. The searcher (2) ties everything together and finds results using a matcher and reports those results using a `Sink` implementation. Closes #162
2018-08-17readme: ripgrep is available in Debian BusterSylvestre Ledru
PR #1016
2018-08-15grep: remove senseless testAndrew Gallant
It was pulling in a sizable data file and doesn't appear to be testing anything meaningful that isn't covered by a variety of other tests.
2018-08-14ignore/types: add *.sbt to scala typewoky
Sbt is currently most used Scala build tool which uses *.sbt files, which are basically Scala. PR #1010
2018-08-07ignore/types: add Idris, Dhall and ATSVanessa McHale
And also improve Haskell detection. PR #1007
2018-08-07readme: update debian link to 0.9.0Jonatan Hamberg
PR #1006
2018-08-06deps: update bytecount to 0.3.2llogiq
PR #1003
2018-08-03pkg: update brew tap to 0.9.0Andrew Gallant
2018-08-03release: 0.9.00.9.0Andrew Gallant
2018-08-03grep-0.1.9grep-0.1.9Andrew Gallant
2018-08-03deps: update termcolor and encoding_rs_ioAndrew Gallant
2018-07-29tests: reduce reliance on state in testsAndrew Gallant
This commit improves the integration test setup by running tests inside the system's temporary directory instead of within ripgrep's `target` directory. The motivation here is to attempt to reduce the effect of unanticipated state on ripgrep's integration tests, such as the presence of `.gitignore` files in ripgrep's checkout directory hierarchy (including parent directories). This doesn't remove all possible state. For example, there's no guarantee that the system's temporary directory isn't itself within a git repository. Moreover, there may still be other ignore rules in the directory tree that might impact test behavior. Fixing this seems somewhat difficult. Conceptually, it seems like ripgrep should run each test in its own `chroot`-like environment, but doing this in a non-annoying and portable way (including Windows) doesn't appear to be possible. Another approach to take here might be to teach ripgrep itself that a particular directory should be treated as root, and therefore, never look at anything outside that directory. This also seems complex to implement, but tractable. Let's see how this approach works for now. Fixes #448, #996
2018-07-29tests/style: 80 columns, dammitAndrew Gallant
2018-07-29ignore: fix typoAndrew Gallant
2018-07-29ignore/style: 80 columns, dammitAndrew Gallant
2018-07-29ignore: fix bug in matched_path_or_any_parentsAndrew Gallant
This method was supposed to panic whenever the given path wasn't under the root of the gitignore patcher. Instead of using assert!, it was using debug_assert!. This actually caused tests to fail when running under release mode, because the debug_assert! wouldn't trip. Fixes #671
2018-07-28ignore-0.4.3ignore-0.4.3Andrew Gallant
2018-07-28globset-0.4.1globset-0.4.1Andrew Gallant
2018-07-28ignore: respect XDG_CONFIG_DIR/git/configAndrew Gallant
This commit updates the logic for finding the value of git's `core.excludesFile` configuration parameter. Namely, we now check `$XDG_CONFIG_DIR/git/config` in addition to `$HOME/.gitconfig` (where the latter overrules the former on a knob-by-knob basis). Fixes #995
2018-07-24complete: add --no-pre, improve --pre/--search-zip exclusivitydana
2018-07-22deps: update atty and winapiAndrew Gallant
This updates atty and winapi to their latest versions, including the bug fix in atty that allows it to work with winapi 0.3.5.
2018-07-22ripgrep: when given no patterns, don't matchAndrew Gallant
Generally speaking, ripgrep prevents the case of not having any patterns via its arg parsing. However, it is possible for users to provide a file of patterns via the `-f` flag. If that file is empty, then ripgrep has nothing to search for and therefore should not ever produce any match. One way of fixing this might be to replace the absence of patterns with a pattern that can never match, but this still requires opening and searching through every file, which is quite a waste. Instead, we detect this case explicitly and quit early. Fixes #900
2018-07-22tests: be looser with gzip failureAndrew Gallant
Don't expect the exact error message. Instead, just ask that the error message exist and be non-empty. Fixes #903
2018-07-22ripgrep: stop early when --files --quiet is usedAndrew Gallant
This commit tweaks the implementation of the --files flag to stop early when --quiet is provided. Fixes #907
2018-07-22ripgrep: don't skip tar archivesAndrew Gallant
This removes logic from the decompressor for skipping tar archives. This logic was originally added under the assumption that we probably want to avoid the cost of reading them. However, this is generally inconsistent with how ripgrep treats files like tar archives: it should search them and do binary detection like normal. Fixes #918
2018-07-22ripgrep: add --no-ignore-global flagAndrew Gallant
This commit adds a new --no-ignore-global flag that permits disabling the use of global gitignore filtering. Global gitignores are generally found in `$HOME/.config/git/ignore`, but its location can be configured via git's `core.excludesFile` option. Closes #934
2018-07-22ignore: only respect .gitignore in git reposAndrew Gallant
This commit fixes an interesting bug in the `ignore` crate where it would basically respect any `.gitignore` file anywhere (including global gitignores in `~/.config/git/ignore`), regardless of whether we were searching in a git repository or not. This commit rectifies that behavior to only respect gitignore rules when in a git repo. The key change here is to move the logic of whether to traverse parents into the directory matcher rather than putting the onus on the directory traverser. In particular, we now need to traverse parent directories in more cases than we previously did, since we need to determine whether we're in a git repository or not. Fixes #934
2018-07-22ripgrep: improve usage documentationAndrew Gallant
This shows an example for reading stdin. Fixes #951
2018-07-22ripgrep: better --path-separator error messageAndrew Gallant
This commit improves the error message when --path-separator fails. Namely, it prints the separator it got and also prints a notice for Windows users for common failure modes. Fixes #957
2018-07-22deps: pin winapi to 0.3.4Andrew Gallant
winapi 0.3.5 changed how it represents some of its structs, which caused a bug to surface in atty that prevents tty detection on Windows. atty has an open PR to fix this: https://github.com/softprops/atty/pull/28 Until a new release of atty, we pin winapi to a version that works.
2018-07-21ripgrep: add --no-pre switchAndrew Gallant
This switch explicitly disables the --pre behavior. An empty string will also disable --pre behavior, but actually utterring an empty flag value is quite awkward, so we provide an explicit switch to do the same thing. Thanks to @c-blake for pointing this out.
2018-07-21ripgrep: replace decoder with encoding_rs_ioAndrew Gallant
This commit mostly moves the transcoder implementation to its own crate: https://github.com/BurntSushi/encoding_rs_io The new crate adds clear documentation and cleans up the implementation to fully implement the contract of io::Read.
2018-07-21ripgrep: reformat --pre warningAndrew Gallant
2018-07-21ripgrep: add warning to --pre flagAndrew Gallant
The --pre flag can result in a pretty large performance penalty, so put a warning in the flag documentation. This warning is important because a flag like this could easily wind up in a user's configuration file.