Function scolapasta_path::is_explicit_relative

source ·
pub fn is_explicit_relative<P: AsRef<Path>>(path: P) -> bool
Expand description

Return whether the given path starts with an explicit relative path.

Explicit relative paths start with . or .. followed immediately by a directory separator.

Some Ruby source loaders have special handling for explicit relative paths where explicit relative paths are resolved relative to the process’s current working directory rather than the load path.

§Compatibility

On Windows, if the given path contains invalid Unicode code points and cannot be converted to &str, this function will correctly identify these paths as explicit relative if their prefixes allow.

On platforms that are neither Windows nor Unix, this function may return incorrect results for paths that do not contain valid UTF-8. See Path::to_str.

§Examples

assert!(is_explicit_relative("./test/loader"));
assert!(is_explicit_relative("../rake/test_task"));

assert!(!is_explicit_relative("json/pure"));
assert!(!is_explicit_relative("/artichoke/src/json/pure"));

§MRI C Declaration

This routine is derived from the reference implementation in MRI Ruby:

static int
is_explicit_relative(const char *path)
{
    if (*path++ != '.') return 0;
    if (*path == '.') path++;
    return isdirsep(*path);
}