diff --git a/src/completion.rs b/src/completion.rs index 0c9ebbd416b34a1e78e31f6a402b49e7860e5fb4..9b656354b0be8febbafa53c775f5a70ab08e1818 100644 --- a/src/completion.rs +++ b/src/completion.rs @@ -159,11 +159,11 @@ pub fn extract_word<'l>(line: &'l str, } } -pub fn longest_common_prefix(candidates: &[String]) -> Option<String> { +pub fn longest_common_prefix(candidates: &[String]) -> Option<&str> { if candidates.is_empty() { return None; } else if candidates.len() == 1 { - return Some(candidates[0].clone()); + return Some(&candidates[0]); } let mut longest_common_prefix = 0; 'o: loop { @@ -183,7 +183,7 @@ pub fn longest_common_prefix(candidates: &[String]) -> Option<String> { if longest_common_prefix == 0 { return None; } - Some(String::from(&candidates[0][0..longest_common_prefix])) + Some(&candidates[0][0..longest_common_prefix]) } #[cfg(test)] @@ -201,22 +201,31 @@ mod tests { #[test] pub fn longest_common_prefix() { let mut candidates = vec![]; - let lcp = super::longest_common_prefix(&candidates); - assert!(lcp.is_none()); + { + let lcp = super::longest_common_prefix(&candidates); + assert!(lcp.is_none()); + } - let c1 = String::from("User"); + let s = "User"; + let c1 = String::from(s); candidates.push(c1.clone()); - let lcp = super::longest_common_prefix(&candidates); - assert_eq!(Some(c1.clone()), lcp); + { + let lcp = super::longest_common_prefix(&candidates); + assert_eq!(Some(s), lcp); + } let c2 = String::from("Users"); candidates.push(c2.clone()); - let lcp = super::longest_common_prefix(&candidates); - assert_eq!(Some(c1), lcp); + { + let lcp = super::longest_common_prefix(&candidates); + assert_eq!(Some(s), lcp); + } let c3 = String::from(""); candidates.push(c3.clone()); - let lcp = super::longest_common_prefix(&candidates); - assert!(lcp.is_none()); + { + let lcp = super::longest_common_prefix(&candidates); + assert!(lcp.is_none()); + } } } diff --git a/src/lib.rs b/src/lib.rs index 1dca7924e4b67826a0f529302f47d0a437de3b43..661be724790c22424312e961cbdb0fa153bf82b5 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -595,7 +595,7 @@ fn complete_line<R: Read>(rdr: &mut tty::RawReader<R>, if let Some(lcp) = longest_common_prefix(&candidates) { // if we can extend the item, extend it and return to main loop if lcp.len() > s.line.pos() - start { - completer.update(&mut s.line, start, &lcp); + completer.update(&mut s.line, start, lcp); try!(s.refresh_line()); return Ok(None); }