Polish `std::path::absolute` documentation. · model-checking/verify-rust-std@b509ed2

@@ -3345,65 +3345,76 @@ impl Error for StripPrefixError {

33453345

/// Makes the path absolute without accessing the filesystem.

33463346

///

33473347

/// If the path is relative, the current directory is used as the base directory.

3348-

/// All intermediate components will be resolved according to platforms-specific

3349-

/// rules but unlike [`canonicalize`][crate::fs::canonicalize] this does not

3348+

/// All intermediate components will be resolved according to platform-specific

3349+

/// rules, but unlike [`canonicalize`][crate::fs::canonicalize], this does not

33503350

/// resolve symlinks and may succeed even if the path does not exist.

33513351

///

33523352

/// If the `path` is empty or getting the

3353-

/// [current directory][crate::env::current_dir] fails then an error will be

3353+

/// [current directory][crate::env::current_dir] fails, then an error will be

33543354

/// returned.

33553355

///

3356+

/// # Platform-specific behavior

3357+

///

3358+

/// On POSIX platforms, the path is resolved using [POSIX semantics][posix-semantics],

3359+

/// except that it stops short of resolving symlinks. This means it will keep `..`

3360+

/// components and trailing slashes.

3361+

///

3362+

/// On Windows, for verbatim paths, this will simply return the path as given. For other

3363+

/// paths, this is currently equivalent to calling

3364+

/// [`GetFullPathNameW`][windows-path].

3365+

///

3366+

/// Note that these [may change in the future][changes].

3367+

///

3368+

/// # Errors

3369+

///

3370+

/// This function may return an error in the following situations:

3371+

///

3372+

/// * If `path` is syntactically invalid; in particular, if it is empty.

3373+

/// * If getting the [current directory][crate::env::current_dir] fails.

3374+

///

33563375

/// # Examples

33573376

///

33583377

/// ## POSIX paths

33593378

///

33603379

/// ```

33613380

/// # #[cfg(unix)]

33623381

/// fn main() -> std::io::Result<()> {

3363-

/// use std::path::{self, Path};

3382+

/// use std::path::{self, Path};

33643383

///

3365-

/// // Relative to absolute

3366-

/// let absolute = path::absolute("foo/./bar")?;

3367-

/// assert!(absolute.ends_with("foo/bar"));

3384+

/// // Relative to absolute

3385+

/// let absolute = path::absolute("foo/./bar")?;

3386+

/// assert!(absolute.ends_with("foo/bar"));

33683387

///

3369-

/// // Absolute to absolute

3370-

/// let absolute = path::absolute("/foo//test/.././bar.rs")?;

3371-

/// assert_eq!(absolute, Path::new("/foo/test/../bar.rs"));

3372-

/// Ok(())

3388+

/// // Absolute to absolute

3389+

/// let absolute = path::absolute("/foo//test/.././bar.rs")?;

3390+

/// assert_eq!(absolute, Path::new("/foo/test/../bar.rs"));

3391+

/// Ok(())

33733392

/// }

33743393

/// # #[cfg(not(unix))]

33753394

/// # fn main() {}

33763395

/// ```

33773396

///

3378-

/// The path is resolved using [POSIX semantics][posix-semantics] except that

3379-

/// it stops short of resolving symlinks. This means it will keep `..`

3380-

/// components and trailing slashes.

3381-

///

33823397

/// ## Windows paths

33833398

///

33843399

/// ```

33853400

/// # #[cfg(windows)]

33863401

/// fn main() -> std::io::Result<()> {

3387-

/// use std::path::{self, Path};

3402+

/// use std::path::{self, Path};

33883403

///

3389-

/// // Relative to absolute

3390-

/// let absolute = path::absolute("foo/./bar")?;

3391-

/// assert!(absolute.ends_with(r"foo\bar"));

3404+

/// // Relative to absolute

3405+

/// let absolute = path::absolute("foo/./bar")?;

3406+

/// assert!(absolute.ends_with(r"foo\bar"));

33923407

///

3393-

/// // Absolute to absolute

3394-

/// let absolute = path::absolute(r"C:\foo//test\..\./bar.rs")?;

3408+

/// // Absolute to absolute

3409+

/// let absolute = path::absolute(r"C:\foo//test\..\./bar.rs")?;

33953410

///

3396-

/// assert_eq!(absolute, Path::new(r"C:\foo\bar.rs"));

3397-

/// Ok(())

3411+

/// assert_eq!(absolute, Path::new(r"C:\foo\bar.rs"));

3412+

/// Ok(())

33983413

/// }

33993414

/// # #[cfg(not(windows))]

34003415

/// # fn main() {}

34013416

/// ```

34023417

///

3403-

/// For verbatim paths this will simply return the path as given. For other

3404-

/// paths this is currently equivalent to calling

3405-

/// [`GetFullPathNameW`][windows-path].

3406-

///

34073418

/// Note that this [may change in the future][changes].

34083419

///

34093420

/// [changes]: io#platform-specific-behavior