compare-changes 0.10.3

Reimplementation of GitHub file paths pattern matcher
Documentation
#[cfg(test)]
use super::{BracketContent, Path, Segment, parse};

#[test]
fn parse_literal() {
    assert_eq!(
        parse("foo"),
        Ok(Path {
            segments: vec![Segment::Literal("foo")]
        })
    );
}

#[test]
fn parse_single_star() {
    assert_eq!(
        parse("bar*"),
        Ok(Path {
            segments: vec![Segment::Literal("bar"), Segment::SingleStar]
        })
    );
}

#[test]
fn parse_double_star() {
    assert_eq!(
        parse("baz/**"),
        Ok(Path {
            segments: vec![Segment::Literal("baz/"), Segment::DoubleStar]
        })
    );
}

#[test]
fn parse_question_mark() {
    assert_eq!(
        parse("*.abc?"),
        Ok(Path {
            segments: vec![Segment::SingleStar, Segment::Literal(".ab"), Segment::QuestionMark('c')]
        })
    );
}

#[test]
fn parse_plus() {
    assert_eq!(
        parse("xyz+"),
        Ok(Path {
            segments: vec![Segment::Literal("xy"), Segment::Plus('z')]
        })
    );
}

#[test]
fn parse_bracket() {
    assert_eq!(
        parse("[CB]at"),
        Ok(Path {
            segments: vec![
                Segment::Bracket(BracketContent {
                    singles: vec!['C', 'B'],
                    ranges: vec![]
                }),
                Segment::Literal("at")
            ]
        })
    );
}

#[test]
fn parse_exclamation_point() {
    assert_eq!(
        parse("important!"),
        Ok(Path {
            segments: vec![Segment::Literal("important!")]
        })
    );
}

#[test]
fn parse_emoji() {
    assert_eq!(
        parse("🗒️.md"),
        Ok(Path {
            segments: vec![Segment::Literal("🗒️.md")]
        })
    );
}

#[test]
fn parse_bracket_with_hyphen() {
    assert_eq!(
        parse("[A-]"),
        Ok(Path {
            segments: vec![Segment::Bracket(BracketContent {
                singles: vec!['A', '-'],
                ranges: vec![],
            })]
        })
    );
}