Skip to content

Commit

Permalink
Add command to add word boundaries to search (#4322)
Browse files Browse the repository at this point in the history
* Add command to add word boundaries to search

* Calculate string capacity before building
  • Loading branch information
mitsuhiko authored Nov 15, 2022
1 parent 77be98c commit 392a018
Showing 1 changed file with 30 additions and 0 deletions.
30 changes: 30 additions & 0 deletions helix-term/src/commands.rs
Original file line number Diff line number Diff line change
Expand Up @@ -250,6 +250,7 @@ impl MappableCommand {
extend_search_next, "Add next search match to selection",
extend_search_prev, "Add previous search match to selection",
search_selection, "Use current selection as search pattern",
make_search_word_bounded, "Modify current search to make it word bounded",
global_search, "Global search in workspace folder",
extend_line, "Select current line, if already selected, extend to another line based on the anchor",
extend_line_below, "Select current line, if already selected, extend to next line",
Expand Down Expand Up @@ -1809,6 +1810,35 @@ fn search_selection(cx: &mut Context) {
cx.editor.set_status(msg);
}

fn make_search_word_bounded(cx: &mut Context) {
let regex = match cx.editor.registers.last('/') {
Some(regex) => regex,
None => return,
};
let start_anchored = regex.starts_with("\\b");
let end_anchored = regex.ends_with("\\b");

if start_anchored && end_anchored {
return;
}

let mut new_regex = String::with_capacity(
regex.len() + if start_anchored { 0 } else { 2 } + if end_anchored { 0 } else { 2 },
);

if !start_anchored {
new_regex.push_str("\\b");
}
new_regex.push_str(regex);
if !end_anchored {
new_regex.push_str("\\b");
}

let msg = format!("register '{}' set to '{}'", '/', &new_regex);
cx.editor.registers.get_mut('/').push(new_regex);
cx.editor.set_status(msg);
}

fn global_search(cx: &mut Context) {
#[derive(Debug)]
struct FileResult {
Expand Down

0 comments on commit 392a018

Please sign in to comment.