Skip to content

A Rust implementation of `cleanname` or `path.Clean`

License

Apache-2.0, Unknown licenses found

Licenses found

Apache-2.0
LICENSE-APACHE
Unknown
LICENSE-MIT
Notifications You must be signed in to change notification settings

danreeves/path-clean

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

23 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

path-clean

crates.io version build status docs.rs docs license

Installation

cargo add path-clean

Usage

use std::path::PathBuf;
use path_clean::{clean, PathClean};
assert_eq!(clean("hello/world/.."), PathBuf::from("hello"));
assert_eq!(
  PathBuf::from("/test/../path/").clean(),
  PathBuf::from("/path")
);

About

path-clean is a Rust port of the the cleanname procedure from the Plan 9 C library, and is similar to path.Clean from the Go standard library. It works as follows:

  1. Reduce multiple slashes to a single slash.
  2. Eliminate . path name elements (the current directory).
  3. Eliminate .. path name elements (the parent directory) and the non-. non-.., element that precedes them.
  4. Eliminate .. elements that begin a rooted path, that is, replace /.. by / at the beginning of a path.
  5. Leave intact .. elements that begin a non-rooted path.

If the result of this process is an empty string, return the string ".", representing the current directory.

It performs this transform lexically, without touching the filesystem. Therefore it doesn't do any symlink resolution or absolute path resolution. For more information you can see "Getting Dot-Dot Right".

For convenience, the [PathClean] trait is exposed and comes implemented for [std::path::PathBuf].

License

MIT OR Apache-2.0

About

A Rust implementation of `cleanname` or `path.Clean`

Resources

License

Apache-2.0, Unknown licenses found

Licenses found

Apache-2.0
LICENSE-APACHE
Unknown
LICENSE-MIT

Stars

Watchers

Forks

Packages

No packages published

Languages