This is a small quality-of-life feature, the addition of `--compute-indices` to the CLI, which, if enabled, will compute and set the `indices` field for each `FileMatch` returned by `run()`. Note we only bother to compute `indices` once we have the top N results because there could be a lot of intermediate "top N" results during the search that are ultimately discarded. When set, the indices are included in the JSON output when `--json` is specified and the matching indices are displayed in bold when `--json` is not specified.
43 lines
1.3 KiB
Rust
43 lines
1.3 KiB
Rust
use std::num::NonZero;
|
|
use std::path::PathBuf;
|
|
|
|
use clap::ArgAction;
|
|
use clap::Parser;
|
|
|
|
/// Fuzzy matches filenames under a directory.
|
|
#[derive(Parser)]
|
|
#[command(version)]
|
|
pub struct Cli {
|
|
/// Whether to output results in JSON format.
|
|
#[clap(long, default_value = "false")]
|
|
pub json: bool,
|
|
|
|
/// Maximum number of results to return.
|
|
#[clap(long, short = 'l', default_value = "64")]
|
|
pub limit: NonZero<usize>,
|
|
|
|
/// Directory to search.
|
|
#[clap(long, short = 'C')]
|
|
pub cwd: Option<PathBuf>,
|
|
|
|
/// Include matching file indices in the output.
|
|
#[arg(long, default_value = "false")]
|
|
pub compute_indices: bool,
|
|
|
|
// While it is common to default to the number of logical CPUs when creating
|
|
// a thread pool, empirically, the I/O of the filetree traversal offers
|
|
// limited parallelism and is the bottleneck, so using a smaller number of
|
|
// threads is more efficient. (Empirically, using more than 2 threads doesn't seem to provide much benefit.)
|
|
//
|
|
/// Number of worker threads to use.
|
|
#[clap(long, default_value = "2")]
|
|
pub threads: NonZero<usize>,
|
|
|
|
/// Exclude patterns
|
|
#[arg(short, long, action = ArgAction::Append)]
|
|
pub exclude: Vec<String>,
|
|
|
|
/// Search pattern.
|
|
pub pattern: Option<String>,
|
|
}
|