From 6482f3ac09673f52805cfea0b3640483dee7cf03 Mon Sep 17 00:00:00 2001 From: sharkdp Date: Fri, 12 May 2017 13:32:30 +0200 Subject: [PATCH] Implement smart-case, closes #7 --- README.md | 2 ++ src/main.rs | 10 +++++++--- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 639fe1b..d090095 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,8 @@ A modern, convenient and fast replacement for `find`. * Easy syntax: `fd PATTERN` instead of `find -iname '*PATTERN*'`. * Colored output. * Regular expressions. +* Smart case: the search is case-insensitive by default, but will be + case-sensitive if the pattern contains an uppercase character. * The command name is *50%* shorter than `find` :-). ## Examples diff --git a/src/main.rs b/src/main.rs index 9f3f14e..8288799 100644 --- a/src/main.rs +++ b/src/main.rs @@ -82,8 +82,6 @@ fn main() { process::exit(1); } - let case_insensitive = !matches.opt_present("s"); - let empty = String::new(); let pattern = matches.free.get(0).unwrap_or(&empty); @@ -93,8 +91,14 @@ fn main() { }; let current_dir = current_dir_buf.as_path(); + // The search will be case-sensitive if the command line flag is set or if + // the pattern has an uppercase character (smart case). + let case_sensitive = + matches.opt_present("s") || + pattern.chars().any(char::is_uppercase); + match RegexBuilder::new(pattern) - .case_insensitive(case_insensitive) + .case_insensitive(!case_sensitive) .build() { Ok(re) => scan(current_dir, &re), Err(err) => error(err.description())