printer: support previews for long lines

This commit adds support for showing a preview of long lines. While the
default still remains as completely suppressing the entire line, this
new functionality will show the first N graphemes of a matching line,
including the number of matches that are suppressed.

This was unfortunately a fairly invasive change to the printer that
required a bit of refactoring. On the bright side, the single line
and multi-line coloring are now more unified than they were before.

Closes #1078
This commit is contained in:
Andrew Gallant
2019-04-13 18:35:24 -04:00
parent a7d26c8f14
commit ece1f50cfe
8 changed files with 520 additions and 111 deletions

View File

@@ -582,6 +582,7 @@ pub fn all_args_and_flags() -> Vec<RGArg> {
flag_line_number(&mut args);
flag_line_regexp(&mut args);
flag_max_columns(&mut args);
flag_max_column_preview(&mut args);
flag_max_count(&mut args);
flag_max_depth(&mut args);
flag_max_filesize(&mut args);
@@ -1443,6 +1444,30 @@ When this flag is omitted or is set to 0, then it has no effect.
args.push(arg);
}
fn flag_max_column_preview(args: &mut Vec<RGArg>) {
const SHORT: &str = "Print a preview for lines exceeding the limit.";
const LONG: &str = long!("\
When the '--max-columns' flag is used, ripgrep will by default completely
replace any line that is too long with a message indicating that a matching
line was removed. When this flag is combined with '--max-columns', a preview
of the line (corresponding to the limit size) is shown instead, where the part
of the line exceeding the limit is not shown.
If the '--max-columns' flag is not set, then this has no effect.
This flag can be disabled with '--no-max-column-preview'.
");
let arg = RGArg::switch("max-column-preview")
.help(SHORT).long_help(LONG)
.overrides("no-max-column-preview");
args.push(arg);
let arg = RGArg::switch("no-max-column-preview")
.hidden()
.overrides("max-column-preview");
args.push(arg);
}
fn flag_max_count(args: &mut Vec<RGArg>) {
const SHORT: &str = "Limit the number of matches.";
const LONG: &str = long!("\