summaryrefslogtreecommitdiffstats
path: root/Cargo.toml
AgeCommit message (Collapse)Author
2023-11-2614.0.014.0.0Andrew Gallant
2023-11-26deps: bump grep to 0.2.13Andrew Gallant
2023-11-26deps: bump ignore to 0.4.21Andrew Gallant
2023-11-25ci: add Debian release buildAndrew Gallant
Previously, we were running 'cargo deb' locally. But the release process is a little simpler now thanks to GitHub Actions and the 'gh' tool, so I felt comfortable putting the 'deb' generation in CI. Now the only real manual part of release asset creation is the M2 release, but that should hopefully be automated once GitHub makes Apple silicon runners available for free.
2023-11-20cli: replace clap with lexopt and supporting codeAndrew Gallant
ripgrep began it's life with docopt for argument parsing. Then it moved to Clap and stayed there for a number of years. Clap has served ripgrep well, and it probably could continue to serve ripgrep well, but I ended up deciding to move off of it. Why? The first time I had the thought of moving off of Clap was during the 2->3->4 transition. I thought the 3.x and 4.x releases were great, but for me, it ended up moving a little too quickly. Since the release of 4.x was telegraphed around when 3.x came out, I decided to just hold off and wait to migrate to 4.x instead of doing a 3.x migration followed shortly by another 4.x migration. Of course, I just never ended up doing the migration at all. I never got around to it and there just wasn't a compelling reason for me to upgrade. While I never investigated it, I saw an upgrade as a non-trivial amount of work in part because I didn't encapsulate the usage of Clap enough. The above is just what got me started thinking about it. It wasn't enough to get me to move off of it on its own. What ended up pushing me over the edge was a combination of factors: * As mentioned above, I didn't want to run on the migration treadmill. This has proven to not be much of an issue, but at the time of the 2->3->4 releases, I didn't know how long Clap 4.x would be out before a 5.x would come out. * The release of lexopt[1] caught my eye. IMO, that crate demonstrates exactly how something new can arrive on the scene and just thoroughly solve a problem minimalistically. It has the docs, the reasoning, the simple API, the tests and good judgment. It gets all the weird corner cases right that Clap also gets right (and is part of why I was originally attracted to Clap). * I have an overall desire to reduce the size of my dependency tree. In part because a smaller dependency tree tends to correlate with better compile times, but also in part because it reduces my reliance and trust on others. It lets me be the "master" of ripgrep's destiny by reducing the amount of behavior that is the result of someone else's decision (whether good or bad). * I perceived that Clap solves a more general problem than what I actually need solved. Despite the vast number of flags that ripgrep has, its requirements are actually pretty simple. We just need simple switches and flags that support one value. No multi-value flags. No sub-commands. And probably a lot of other functionality that Clap has that makes it so flexible for so many different use cases. (I'm being hand wavy on the last point.) With all that said, perhaps most importantly, the future of ripgrep possibly demands a more flexible CLI argument parser. In today's world, I would really like, for example, flags like `--type` and `--type-not` to be able to accumulate their repeated values into a single sequence while respecting the order they appear on the CLI. For example, prior to this migration, `rg regex-automata -Tlock -ttoml` would not return results in `Cargo.lock` in this repository because the `-Tlock` always took priority even though `-ttoml` appeared after it. But with this migration, `-ttoml` now correctly overrides `-Tlock`. We would like to do similar things for `-g/--glob` and `--iglob` and potentially even now introduce a `-G/--glob-not` flag instead of requiring users to use `!` to negate a glob. (Which I had done originally to work-around this problem.) And some day, I'd like to add some kind of boolean matching to ripgrep perhaps similar to how `git grep` does it. (Although I haven't thought too carefully on a design yet.) In order to do that, I perceive it would be difficult to implement correctly in Clap. I believe that this last point is possible to implement correctly in Clap 2.x, although it is awkward to do so. I have not looked closely enough at the Clap 4.x API to know whether it's still possible there. In any case, these were enough reasons to move off of Clap and own more of the argument parsing process myself. This did require a few things: * I had to write my own logic for how arguments are combined into one single state object. Of course, I wanted this. This was part of the upside. But it's still code I didn't have to write for Clap. * I had to write my own shell completion generator. * I had to write my own `-h/--help` output generator. * I also had to write my own man page generator. Well, I had to do this with Clap 2.x too, although my understanding is that Clap 4.x supports this. With that said, without having tried it, my guess is that I probably wouldn't have liked the output it generated because I ultimately had to write most of the roff by hand myself to get the man page I wanted. (This also had the benefit of dropping the build dependency on asciidoc/asciidoctor.) While this is definitely a fair bit of extra work, it overall only cost me a couple days. IMO, that's a good trade off given that this code is unlikely to change again in any substantial way. And it should also allow for more flexible semantics going forward. Fixes #884, Fixes #1648, Fixes #1701, Fixes #1814, Fixes #1966 [1]: https://docs.rs/lexopt/0.3.0/lexopt/index.html
2023-11-20core: switch to anyhowAndrew Gallant
This commit adds `anyhow` as a dependency and switches over to it from Box<dyn Error>. It actually looks like I've kept all of my errors rather shallow, such that we don't get a huge benefit from anyhow at present. But now that anyhow is in use, I expect to use its "context" feature more going forward.
2023-10-09cargo: remove dependency patchesAndrew Gallant
I'm too lazy to fixup old commits.
2023-10-09progressAndrew Gallant
2023-10-09core: polish the core of ripgrepAndrew Gallant
This I believe finishes are quest to do mechanical updates to ripgrep's style, bringing it in line with my current practice (loosely speaking).
2023-10-09deps: drop thread_local, lazy_static and once_cellAndrew Gallant
This is largely made possible by the addition of std::sync::OnceLock to the standard library, and the memory pool available in regex-automata.
2023-07-08cargo: reduce the size of the .crate file published to crates.ioKevin Svetlitski
None of this stuff is needed for the main ripgrep crate. Closes #1940
2023-07-08doc: update rust-version in Cargo.tomlJonathan Schwender
The MSRV got bumped a little bit ago, so this is just catchup. Closes #2539
2023-07-05deps: drop temporary patch and move to bstr 1.6Andrew Gallant
Now that regex 1.9 is out, we can depend on it from crates.io.
2023-07-05regex: push more pattern handling to matcher constructionAndrew Gallant
Previously, ripgrep core was responsible for escaping regex patterns and implementing the --line-regexp flag. This commit moves that responsibility down into the matchers such that ripgrep just needs to hand the patterns it gets off to the matcher builder. The builder will then take care of escaping and all that. This was done to make pattern construction completely owned by the matcher builders. With the arrival regex-automata, this means we can move to the HIR very quickly and then never move back to the concrete syntax. We can then build our regex directly from the HIR. This overall can save quite a bit of time, especially when searching for large dictionaries. We still aren't quite as fast as GNU grep when searching something on the scale of /usr/share/dict/words, but we are basically within spitting distance. Prior to this, we were about an order of magnitude slower. This architecture in particular lets us write a pretty simple fast path that avoids AST parsing and HIR translation entirely: the case where one is just searching for a literal. In that case, we can hand construct the HIR directly.
2023-07-05deps: initial migration steps to regex 1.9Andrew Gallant
This leaves the grep-regex crate in tatters. Pretty much the entire thing needs to be re-worked. The upshot is that it should result in some big simplifications. I hope. The idea here is to drop down and actually use regex-automata 0.3 instead of the regex crate itself.
2023-05-16deps: update minimum version of grep crateAndrew Gallant
Ref #2516
2023-01-05deps: update to grep 0.2.11Andrew Gallant
2023-01-05deps: update to ignore 0.4.19Andrew Gallant
2023-01-05deps: upgrade to jemallocator 0.5Andrew Gallant
2023-01-05deps: upgrade bstr to 1.1Andrew Gallant
2023-01-05deps: remove 'num_cpus'Andrew Gallant
Now that std::thread::available_parallelism is a thing, we no longer need num_cpus.
2022-12-21cargo: set rust-versionAlex Touchet
This should hopefully make compilation errors from using an older-than-supported compiler more helpful. PR #2373
2021-06-1213.0.013.0.0Andrew Gallant
2021-06-12deps/grep: update minimal versionsAndrew Gallant
2021-06-12deps/ignore: update minimal versionsAndrew Gallant
2021-05-31cargo: remove "readme" fieldMarco Ieni
It is apparently no longer required since a README.md file is automatically detected: https://doc.rust-lang.org/cargo/reference/manifest.html#the-readme-field Closes #1770
2021-05-31doc: improve wordingVarik Valefor
This tightens up the wording in ripgrep's opening description. It's used in several places, so we update all of them. Closes #1881
2020-09-22spelling: fix various misspellingsJosh Soref
These were found by the check spelling action[1] and reported here[2]. PR #1685 [1] - https://github.com/marketplace/actions/check-spelling [2] - https://github.com/jsoref/ripgrep/commit/6f02d056716a116b643da1de4b53c6f15118fc38#commitcomment-42625778
2020-05-2912.1.112.1.1Andrew Gallant
2020-05-29core: update minimal dependency versionsAndrew Gallant
2020-05-0912.1.012.1.0Andrew Gallant
2020-05-09deps: update minimal versions for dependenciesAndrew Gallant
2020-03-2912.0.112.0.1Andrew Gallant
2020-03-17crates.io: remove badgesAndrew Gallant
... and don't replace them with anything because crates.io does not support GitHub Actions yet. But it's almost there: https://github.com/rust-lang/crates.io/pull/1838 Thanks @atouchet for noticing this.
2020-03-15ripgrep: release 12.0.0ignore-0.4.12grep-searcher-0.1.7grep-regex-0.1.6grep-printer-0.1.4grep-pcre2-0.1.4grep-matcher-0.1.4grep-cli-0.1.4grep-0.2.5globset-0.4.5Andrew Gallant
2020-03-15ci: make script names consistentAndrew Gallant
2020-02-20tests: add debugging outputAndrew Gallant
The transient failures appear to be persisting and they are quite difficult to debug. So include a full directory listing in the output of every test failure.
2020-02-17repo: make ripgrep build with the new organizationAndrew Gallant
2020-02-17deb: fix fish completion install locationAndrew Gallant
It looks like `completions` is owned by Fish itself. Third party completions should go in `vendor_completions.d`. Fixes #1485
2019-08-01ripgrep: release 11.0.2Andrew Gallant
2019-06-26bstr: update everything to bstr 0.2Andrew Gallant
2019-04-25ci: use cross for musl x86_64 buildsAndrew Gallant
This is necessary because jemalloc + musl + Ubuntu 16.04 is apparently broken. Moreover, jemalloc doesn't support i686, so we accept the performance regression there. See also: https://github.com/gnzlbg/jemallocator/issues/124
2019-04-24alloc: use jemalloc when building with muslAndrew Gallant
It turns out that musl's allocator is slow enough to cause a fairly noticeable performance regression when ripgrep is built as a static binary with musl. We fix this by using jemalloc when building with musl. We continue to use the default system allocator in all other scenarios. Namely, glibc's allocator doesn't noticeably regress performance compared to jemalloc. But we could add more targets to this logic if other system allocators (macOS, Windows) prove to be slow. This wasn't necessary before because rustc recently stopped using jemalloc by default. Fixes #1268
2019-04-16ripgrep: release 11.0.1Andrew Gallant
2019-04-15ripgrep: release 11.0.011.0.0Andrew Gallant
2019-04-15grep: release 0.2.4grep-0.2.4Andrew Gallant
2019-04-15ignore: release 0.4.7ignore-0.4.7Andrew Gallant
2019-04-05config: switch to using bstrsAndrew Gallant
This lets us implement correct Unicode trimming and also simplifies the parsing logic a bit. This also removes the last platform specific bits of code in ripgrep core.
2019-01-19edition: move core ripgrep to Rust 2018Andrew Gallant
2019-01-19deps: update to bytecount 0.5Andrew Gallant
bytecount now uses runtime dispatch for enabling SIMD, which means we can no longer need the avx-accel features. We remove it from ripgrep since the next release will be a minor version bump, but leave them as no-ops for the crates that previously used it.