ruby-parser 0.0.0-dev1

A parser for the Ruby language
use crate::*;
use nom::branch::alt;
use nom::bytes::complete::tag;
use nom::character::complete::one_of;
use nom::combinator::recognize;

pub(crate) fn punctuator(i: Input) -> TokenResult {
    let (i, res) = alt((
        tag("..."),
        tag(".."),
        tag("::"),
        tag("=>"),
        recognize(one_of("[](){},;:?")),
    ))(i)?;
    let token = match *res {
        "[" => Token::LeftBracket,
        "]" => Token::RightBracket,
        "(" => Token::LeftParen,
        ")" => Token::RightParen,
        "," => Token::Comma,
        ";" => Token::Semicolon,
        ":" => Token::Colon,
        "?" => Token::QuestionMark,
        ".." => Token::DotDot,
        "..." => Token::DotDotDot,
        "=>" => Token::Arrow,
        "::" => Token::DoubleColon,
        _ => unreachable!(),
    };
    Ok((i, token))
}