summaryrefslogtreecommitdiffstats
path: root/src
AgeCommit message (Collapse)Author
2018-03-13grep: upgrade to regex-syntax 0.5Andrew Gallant
This update brings with it many bug fixes: * Better error messages are printed overall. We also include explicit call out for unsupported features like backreferences and look-around. * Regexes like `\s*{` no longer emit incomprehensible errors. * Unicode escape sequences, such as `\u{..}` are now supported. For the most part, this upgrade was done in a straight-forward way. We resist the urge to refactor the `grep` crate, in anticipation of it being rewritten anyway. Note that we removed the `--fixed-strings` suggestion whenever a regex syntax error occurs. In practice, I've found that it results in a lot of false positives, and I believe that its use is not as paramount now that regex parse errors are much more readable. Closes #268, Closes #395, Closes #702, Closes #853
2018-03-12deps: update regex crateAndrew Gallant
This update brings with it a new feature of the regex crate which will now use SIMD optimizations automatically at runtime with no necessary compile time flags. All that's needed is to enable the `unstable` feature. Other crates, such as bytecount and encoding_rs, are still using the old-style SIMD support, so we leave the simd-accel and avx-accel features. However, the binaries we distribute on Github no longer have those features enabled, which makes them truly portable. Fixes #135
2018-03-10output: add --stats flagBalaji Sivaraman
This commit provides basic support for a --stats flag, which will print various aggregate statistics about a search after all of the results have been printed. This is mostly intended to support a similar feature found in the Silver Searcher. Note though that we don't emit the total bytes searched; this is a first pass at an implementation and we can improve upon it later. Closes #411, Closes #799
2018-03-10args: treat --count --only-matching as --count-matchesAndrew Gallant
Namely, when ripgrep is asked to count things and is also asked to print every match on its own line, then we should just automatically count the matches and not the lines. This is a departure from how GNU grep behaves, but there is a compelling argument to be made that GNU grep's behavior doesn't make a lot of sense. Note that since this changes the behavior of combining two existing flags, this is a breaking change.
2018-03-10search: add a --count-matches flagBalaji Sivaraman
This commit introduces a new flag, --count-matches, which will cause ripgrep to report a total count of all matches instead of a count of total lines matched. Closes #566, Closes #814
2018-03-10cleanup: rename match_count to match_line_countBalaji Sivaraman
2018-03-10search: add -b/--byte-offset flagBalaji Sivaraman
This commit adds support for printing 0-based byte offset before each line. We handle corner cases such as `-o/--only-matching` and `-C/--context` as well. Closes #812
2018-03-10mmap: handle ENOMEM errorAndrew Gallant
This commit causes a memory map strategy to fall back to a file backed strategy if the mmap call fails with an `ENOMEM` error. Fixes #852
2018-02-23doc: use PATTERNFILE for -f/--file flagAndrew Gallant
Fixes #832
2018-02-20termcolor: add underline supportBalaji Sivaraman
This commit adds underline support to the termcolor crate, and exposes it through ripgrep. Fixes #798
2018-02-18doc: clarify --ignore-file flagCosmin Lehene
Fixes #684
2018-02-17doc: fix files-with-matches typoUwe Dauernheim
2018-02-10doc: fix asciidoc->man formattingAndrew Gallant
2018-02-10doc: add color FAQ entriesAndrew Gallant
This commit adds FAQ entries about how to configure ripgrep's coloring, and how to get true color support in Windows consoles.
2018-02-10termcolor: permit hex colorsAndrew Gallant
This commit adds support for specifying Ansi256 or RGB colors using hexadecimal notation.
2018-02-10doc: overhaul documentationAndrew Gallant
This commit cleans up the README and splits portions of it out into a user guide (GUIDE.md) and a FAQ (FAQ.md). The README now provides a small list of documentation "quick" links to various parts of the docs. This commit also does a few other minor touchups.
2018-02-10doc: clarify --files-without-matchAndrew Gallant
This adds a couple common keywords to the documentation. Fixes #779
2018-02-06argv: add several hidden flagsAndrew Gallant
This adds hidden counter-flags for the following: -L/--follow [--no-follow] --hidden [--no-hidden] --no-ignore [--ignore] --no-ignore-parent [--ignore-parent] --no-ignore-vcs [--ignore-vcs] --no-messages [--messages] --search-zip [--no-search-zip] --sort-files [--no-sort-files] --text [--no-text] In the above list, the counter-flags are in brackets. While these flags are hidden, we document the counter-flags in the documentation for the flags they are countering.
2018-02-06argv: support hidden flagsAndrew Gallant
This commit adds support for hidden flags. The purpose of hidden flags is for things that end users likely won't need unless they have a configuration file that disables ripgrep's defaults. These flags will provide a way to re-enable ripgrep's defaults.
2018-02-06doc: generate man pageAndrew Gallant
This commit uses the recent refactoring for defining flags to automatically generate a man page. This finally allows us to define the documentation for each flag in a single place. The man page is generated on every build, if and only if `asciidoc` is installed. When generated, it is placed in Cargo's `OUT_DIR` directory, which is the same place that shell completions live.
2018-02-06argv: tweak the meaning of zeroAndrew Gallant
This commit makes a small tweak to the --max-columns flag. Namely, if the value of the flag is 0, then ripgrep behaves as-if the flag were absent. This is useful in the context of ripgrep reading configuration from the environment. For example, an end user might set --max-columns=150, but we should permit the user to disable this setting when needed. Using -M0 is a nice way to do that. We do this because a zero value for --max-columns isn't particularly meaningful. We do leave the --max-count, --max-filesize and --maxdepth flags alone though, since a zero value for those flags is potentially meaningful. (--max-count even has tests for ripgrep's behavior when given a value of 0.)
2018-02-06argv: update clap to 2.29.4Andrew Gallant
We use the new AppSettings::AllArgsOverrideSelf to permit all flags to be specified multiple times. This removes the need for our previous work-around where we would enable `multiple` for every flag and then just extract the last value when consuming clap's matches. We also add a couple regression tests that ensure repeated switches and flags work as expected.
2018-02-05argv: fix PATTERN typoKevin K
When referencing the PATTERN positional argument, we should use `pattern` and not `PATTERN`. The former is the clap identifier name while the latter is the argument value name.
2018-02-04config: add persistent configurationAndrew Gallant
This commit adds support for reading configuration files that change ripgrep's default behavior. The format of the configuration file is an "rc" style and is very simple. It is defined by two rules: 1. Every line is a shell argument, after trimming ASCII whitespace. 2. Lines starting with '#' (optionally preceded by any amount of ASCII whitespace) are ignored. ripgrep will look for a single configuration file if and only if the RIPGREP_CONFIG_PATH environment variable is set and is non-empty. ripgrep will parse shell arguments from this file on startup and will behave as if the arguments in this file were prepended to any explicit arguments given to ripgrep on the command line. For example, if your ripgreprc file contained a single line: --smart-case then the following command RIPGREP_CONFIG_PATH=wherever/.ripgreprc rg foo would behave identically to the following command rg --smart-case foo This commit also adds a new flag, --no-config, that when present will suppress any and all support for configuration. This includes any future support for auto-loading configuration files from pre-determined paths (which this commit does not add). Conflicts between configuration files and explicit arguments are handled exactly like conflicts in the same command line invocation. That is, this command: RIPGREP_CONFIG_PATH=wherever/.ripgreprc rg foo --case-sensitive is exactly equivalent to rg --smart-case foo --case-sensitive in which case, the --case-sensitive flag would override the --smart-case flag. Closes #196
2018-02-04argv: permit repeated flagsAndrew Gallant
This commit builds on the previous argv refactor by being more principled about how we declared our flags. In particular, we now require that every clap argument is one of three things: a positional argument, a switch or a flag that accepts exactly one value. The latter two are always permitted to be repeated, and we modify the code that consumes a clap::ArgMatches to always use the *last* value of an argument. (clap by default always uses the first value of argument, if it has been repeated and is accessed via one of the singleton accessors.) Fixes #553
2018-02-04argv: refactor clap initializationAndrew Gallant
This commit refactors how we define flags. In theory, this commit should not result in any behavioral changes (other than perhaps more consistent rules for flag overrides). There are two important changes: Firstly, each flag (or tightly coupled group of flags) is defined in its own function. This function includes the documentation for that flag. This improves the locality for each flag; everything you need to know about it is self-contained in one small region of code. Secondly, each flag is defined in terms of a very small ripgrep-specific layer above clap. This permits us to have a set of structured arguments independent of clap. The intention here is that we can use this indirection to generate other documentation such as man pages. This commit lays the ground work for modifying our use of clap in principled way such that flags can be specified multiple times without conflict. This in turn will help us implement support for persistent configuration.
2018-02-04build: add git hashAndrew Gallant
This commit makes the git hash ripgrep was built with available for use in the version string. We also do a few minor touchups in build.rs and src/app.rs.
2018-02-04logger: drop env_loggerAndrew Gallant
This commit updates the `log` crate to 0.4 and drops the dependency on env_logger. In particular, the latest version of env_logger brings in additional non-optional dependencies such as chrono that I don't think is worth including into ripgrep. It turns out ripgrep doesn't need any fancy logging. We just need a concept of log levels and the ability to print to stderr. Therefore, we just roll our own super simple logger. This update is motivated by the persistent configuration task. In particular, we need the ability to toggle the global log level more than once, and this doesn't appear to be possible with older versions of the log crate.
2018-02-01windows: fix OneDrive traversalsAndrew Gallant
This commit fixes a bug on Windows where directory traversals were completely broken when attempting to scan OneDrive directories that use the "file on demand" strategy. The specific problem was that Rust's standard library treats OneDrive directories as reparse points instead of directories, which causes methods like `FileType::is_file` and `FileType::is_dir` to always return false, even when retrieved via methods like `metadata` that purport to follow symbolic links. We fix this by peppering our code with checks on the underlying file attributes exposed by Windows. We consider an entry a directory if and only if the directory bit is set on the attributes. We are careful to make sure that the code remains the same on non-Windows platforms. Note that we also bump the dependency on `walkdir`, which contains a similar fix for its traversals. This bug is recorded upstream: https://github.com/rust-lang/rust/issues/46484 Upstream also has a pending PR: https://github.com/rust-lang/rust/pull/47956 Fixes #705
2018-01-31worker: better error handling for memory mapsAndrew Gallant
Previously, we would bail out of using memory maps if we could detect ahead of time that opening a memory map would fail. The only case we checked was whether the file size was 0 or not. This is actually insufficient. The mmap call can return ENODEV errors when a file doesn't support memory maps. This is the case for new files exposed by Linux, for example, /sys/devices/system/cpu/vulnerabilities/meltdown. We fix this by checking the actual error codes returned by the mmap call. If ENODEV (or EOVERFLOW) is returned, then we fall back to regular `read` calls. If any other error occurs, we report it to the user. Fixes #760
2018-01-31style: remove eprintln macroAndrew Gallant
The eprintln! macro was added to Rust's standard library in Rust 1.19.0, which is below ripgrep's minimum Rust version. Therefore, we can rely on the standard library variant now.
2018-01-30search: add support for searching compressed filesBalaji Sivaraman
This commit adds opt-in support for searching compressed files during recursive search. This behavior is only enabled when the `-z/--search-zip` flag is passed to ripgrep. When enabled, a limited set of common compression formats are recognized via file extension, and a new process is spawned to perform the decompression. ripgrep then searches the stdout of that spawned process. Closes #539
2018-01-29termcolor: add extended color supportMarc Tiehuis
This commit adds 256-color and 24-bit truecolor support to ripgrep. This only provides output support on ANSI terminals. If the Windows console is used for coloring, then 256-color and 24-bit color settings are ignored.
2018-01-29ignore: support custom file namesptzz
This commit adds support for ignore files with custom names. This allows for application specific ignorefile names, e.g. using `.fdignore` for `fd`. See also: https://github.com/BurntSushi/ripgrep/issues/673 See also: https://github.com/sharkdp/fd/issues/156
2018-01-11printer: add --passthru flagdana
The --passthru flag causes ripgrep to print every line, even if the line does not contain a match. This is a response to the common pattern of `^|foo` to match every line, while still highlighting things like `foo`. Fixes #740
2018-01-11doc: various updatesdana
* Don't use 'smart typography' when generating man page * Document PATTERN and PATH * Capitalise place-holder names consistently * Add note about PATH overriding glob/ignore rules * Update args.rs for new PATH capitalisation Fixes #725
2018-01-01ux: suggest --fixed-strings flagBalaji Sivaraman
If a regex syntax error occurs, then ripgrep will suggest using the --fixed-strings flag. Fixes #727
2018-01-01cleanup: replace try! with ?Balaji Sivaraman
2018-01-01printer: add support for line number alignmentBalaji Sivaraman
Closes #544
2017-12-30couple of trivial fixes to make clippy a bit more happy (#704)Igor Gnatenko
clippy: fix a few lints The fixes are: * Use single quotes for single-character * Use ticks in documentation when necessary. * Just bow to clippy's wisdom.
2017-12-30Update app.rs (#707)flip111
docs: clarify --ignore-file Fixes #684
2017-11-29Omit context separators when using a contextless option like -c or -ldana
Fixes #693
2017-11-22clippy: fix warnings about useless format call and remove references that ↵Matthias Krüger
would be immediately dereferenced by the compiler.
2017-11-22clippy: main.rs: call Clone() on trait instead of ref-counted pointers and ↵Matthias Krüger
pass Arc<Args> by ref more often.
2017-11-22clippy: docs: put more relevant things into backticks.Matthias Krüger
2017-11-22clippy: string constants have static lifetime by default.Matthias Krüger
2017-11-22Update to memmap 0.6Dan Burkert
`memmap` 0.6.0 introduces major API changes in anticipation of a 1.0 release. See https://github.com/danburkert/memmap-rs/releases/tag/0.6.0 for more information. CC danburkert/memmap-rs#33.
2017-11-01fix some typosMartin Lindhe
2017-10-21printer: fix colors on empty matchesAndrew Gallant
This fixes a bug where a "match" color escape was erroneously emitted after the new line character. This is because `^` is actually allowed to match after the end of a trailing new line, which means `^$` matches both before and after the trailing new line when multiline mode is enabled. The trailing match was causing the phantom escape sequence to appear, which we don't want. Incidentally, this is the root cause of #441 as well, although this commit doesn't fix that issue, since the line itself is printed before we detect the phantom match. Fixes #599
2017-10-21styleAndrew Gallant