# globfilter

Portable directory walking with includes and excludes.

Motivating example: You want to allow the user to select paths within a project.

```toml
include = ["src", "License.txt", "resources/icons/*.svg"]
exclude = ["target", "/dist", ".cache", "*.tmp"]
```

When traversing the directory, you can use
`GlobDirFilter::from_globs(...)?.match_directory(&relative)` skip directories that never match in
`WalkDir`s `filter_entry`.

## Syntax

This crate supports the cross-language, restricted glob syntax from
[PEP 639](https://packaging.python.org/en/latest/specifications/glob-patterns/):

- Alphanumeric characters, underscores (`_`), hyphens (`-`) and dots (`.`) are matched verbatim.
- The special glob characters are:
  - `*`: Matches any number of characters except path separators
  - `?`: Matches a single character except the path separator
  - `**`: Matches any number of characters including path separators
  - `[]`, containing only the verbatim matched characters: Matches a single of the characters
    contained. Within `[...]`, the hyphen indicates a locale-agnostic range (e.g., `a-z`, order
    based on Unicode code points). Hyphens at the start or end are matched literally.
- The path separator is the forward slash character (`/`). Patterns are relative to the given
  directory, a leading slash character for absolute paths is not supported.
- Parent directory indicators (`..`) are not allowed.

These rules mean that matching the backslash (`\`) is forbidden, which avoid collisions with the
windows path separator.
