From 2e2e0dfc1acfb69be9575d320418d04f3caf64a7 Mon Sep 17 00:00:00 2001 From: SOFe Date: Tue, 26 Nov 2019 17:42:43 +0800 Subject: [PATCH] Improved comments to clarify sasumptions in str::strip_prefix --- src/libcore/str/mod.rs | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/libcore/str/mod.rs b/src/libcore/str/mod.rs index 2527aee58cd..4367cc54e70 100644 --- a/src/libcore/str/mod.rs +++ b/src/libcore/str/mod.rs @@ -3797,7 +3797,7 @@ pub fn trim_start_matches<'a, P: Pattern<'a>>(&'a self, pat: P) -> &'a str { /// the prefix is removed. Unlike `trim_start_matches`, this method removes the prefix exactly /// once. /// - /// If the string does not start with `prefix`, it is removed. + /// If the string does not start with `prefix`, `None` is returned. /// /// # Examples /// @@ -3814,8 +3814,9 @@ pub fn trim_start_matches<'a, P: Pattern<'a>>(&'a self, pat: P) -> &'a str { pub fn strip_prefix<'a, P: Pattern<'a>>(&'a self, prefix: P) -> Option<&'a str> { let mut matcher = prefix.into_searcher(self); if let SearchStep::Match(start, len) = matcher.next() { - debug_assert_eq!(start, 0); + debug_assert_eq!(start, 0, "The first search step from Searcher must start from the front"); unsafe { + // Searcher is known to return valid indices. Some(self.get_unchecked(len..)) } } else { @@ -3825,11 +3826,11 @@ pub fn strip_prefix<'a, P: Pattern<'a>>(&'a self, prefix: P) -> Option<&'a str> /// Returns a string slice with the suffix removed. /// - /// If the string starts with the pattern `suffix`, `Some` is returned with the substring where + /// If the string ends with the pattern `suffix`, `Some` is returned with the substring where /// the suffix is removed. Unlike `trim_end_matches`, this method removes the suffix exactly /// once. /// - /// If the string does not start with `suffix`, it is removed. + /// If the string does not end with `suffix`, `None` is returned. /// /// # Examples /// @@ -3849,8 +3850,9 @@ pub fn strip_suffix<'a, P>(&'a self, suffix: P) -> Option<&'a str> { let mut matcher = suffix.into_searcher(self); if let SearchStep::Match(start, end) = matcher.next_back() { - debug_assert_eq!(end, self.len()); + debug_assert_eq!(end, self.len(), "The first search step from ReverseSearcher must include the last character"); unsafe { + // Searcher is known to return valid indices. Some(self.get_unchecked(..start)) } } else { -- 2.44.0