about summary refs log tree commit diff
diff options
context:
space:
mode:
authorManish Goregaokar <manishsmail@gmail.com>2022-11-13 21:49:27 -0500
committerGitHub <noreply@github.com>2022-11-13 21:49:27 -0500
commitc7004f934f13e792c7af7204335c5f19cec31780 (patch)
tree269548187e9969b7838f93afdbcf8411f9ab40da
parentcc96cdd6969fdf4f043d713420c059567d89b35c (diff)
parent461d14724934f7a05fabfe74e8e51f801fa6993a (diff)
downloadrust-c7004f934f13e792c7af7204335c5f19cec31780.tar.gz
rust-c7004f934f13e792c7af7204335c5f19cec31780.zip
Rollup merge of #104300 - tbu-:pr_path_parent_caveats, r=Mark-Simulacrum
Document `Path::parent` behavior around relative paths

A relative path with just one component will return `Some("")` as its parent, which wasn't clear to me from the documentation.

The parent of `""` is `None`, which was missing from the documentation as well.
-rw-r--r--library/std/src/path.rs13
1 files changed, 12 insertions, 1 deletions
diff --git a/library/std/src/path.rs b/library/std/src/path.rs
index 9d63281627d..af88b9070c1 100644
--- a/library/std/src/path.rs
+++ b/library/std/src/path.rs
@@ -2142,7 +2142,10 @@ impl Path {
 
     /// Returns the `Path` without its final component, if there is one.
     ///
-    /// Returns [`None`] if the path terminates in a root or prefix.
+    /// This means it returns `Some("")` for relative paths with one component.
+    ///
+    /// Returns [`None`] if the path terminates in a root or prefix, or if it's
+    /// the empty string.
     ///
     /// # Examples
     ///
@@ -2156,6 +2159,14 @@ impl Path {
     /// let grand_parent = parent.parent().unwrap();
     /// assert_eq!(grand_parent, Path::new("/"));
     /// assert_eq!(grand_parent.parent(), None);
+    ///
+    /// let relative_path = Path::new("foo/bar");
+    /// let parent = relative_path.parent();
+    /// assert_eq!(parent, Some(Path::new("foo")));
+    /// let grand_parent = parent.and_then(Path::parent);
+    /// assert_eq!(grand_parent, Some(Path::new("")));
+    /// let great_grand_parent = grand_parent.and_then(Path::parent);
+    /// assert_eq!(great_grand_parent, None);
     /// ```
     #[stable(feature = "rust1", since = "1.0.0")]
     #[doc(alias = "dirname")]