slex 0.2.4

A simple lexer for Rust
Documentation
#[test]
fn simple() {
    use crate::lexer::Lexer;
    use crate::tokens::Token;
    let mut lexer = Lexer::new("1 + 2".to_string());
    let tokens = lexer.lex().unwrap();
    assert_eq!(tokens.len(), 3);
    assert_eq!(tokens[0].value, Token::Int(1));
    assert_eq!(tokens[1].value, Token::Symbol('+'));
    assert_eq!(tokens[2].value, Token::Int(2));
}
#[test]
fn symbols() {
    use crate::lexer::Lexer;
    use crate::tokens::Token;
    let mut lexer = Lexer::new("1 + 2 ++ ".to_string()).symbols(&["+", "++"]);
    let tokens = lexer.lex().unwrap();
    assert_eq!(tokens.len(), 4);
    assert_eq!(tokens[0].value, Token::Int(1));
    assert_eq!(tokens[1].value, Token::Symbol('+'));
    assert_eq!(tokens[2].value, Token::Int(2));
    assert_eq!(tokens[3].value, Token::LongSymbol("++".to_string()));
}
#[test]
fn string() {
    use crate::lexer::Lexer;
    use crate::tokens::Token;
    let mut lexer = Lexer::new(" \"hello\"".to_string());
    let tokens = lexer.lex().unwrap();
    assert_eq!(tokens.len(), 1);
    assert_eq!(tokens[0].value, Token::String("hello".to_string()));
}
#[test]
fn string_indent() {
    use crate::indent_lexer::Lexer;
    use crate::tokens::Token;
    let mut lexer = Lexer::new(" \"hello\"".to_string());
    let lines = lexer.lex().unwrap();
    assert_eq!(lines[0].len(), 1);
    assert_eq!(lines[0].tokens[0].value, Token::String("hello".to_string()));
}
#[test]
fn strings() {
    use crate::lexer::Lexer;
    use crate::tokens::Token;
    let mut lexer = Lexer::new(" \"hello\"\"there\" ".to_string());
    let tokens = lexer.lex().unwrap();
    assert_eq!(tokens.len(), 2);
    assert_eq!(tokens[0].value, Token::String("hello".to_string()));
    assert_eq!(tokens[1].value, Token::String("there".to_string()));
}
#[test]
fn strings_indent() {
    use crate::indent_lexer::Lexer;
    use crate::tokens::Token;
    let mut lexer = Lexer::new(" \"hello\"\"there\" ".to_string());
    let lines = lexer.lex().unwrap();
    assert_eq!(lines[0].len(), 2);
    assert_eq!(lines[0].tokens[0].value, Token::String("hello".to_string()));
    assert_eq!(lines[0].tokens[1].value, Token::String("there".to_string()));
}
#[test]
fn chars() {
    use crate::lexer::Lexer;
    use crate::tokens::Token;
    let mut lexer = Lexer::new(" 'h''e' ".to_string());
    let tokens = lexer.lex().unwrap();
    assert_eq!(tokens.len(), 2);
    assert_eq!(tokens[0].value, Token::Char('h'));
    assert_eq!(tokens[1].value, Token::Char('e'));
}
#[test]
fn chars_indent() {
    use crate::indent_lexer::Lexer;
    use crate::tokens::Token;
    let mut lexer = Lexer::new(" 'h''e' ".to_string());
    let lines = lexer.lex().unwrap();
    assert_eq!(lines[0].len(), 2);
    assert_eq!(lines[0].tokens[0].value, Token::Char('h'));
    assert_eq!(lines[0].tokens[1].value, Token::Char('e'));
}
#[test]
fn keywords() {
    use crate::lexer::Lexer;
    use crate::tokens::Token;
    let mut lexer = Lexer::new("local a = 1".to_string())
        .symbols(&["="])
        .keywords(&["local"]);
    let tokens = lexer.lex().unwrap();
    assert_eq!(tokens.len(), 4);
    assert_eq!(tokens[0].value, Token::Keyword("local".to_string()));
    assert_eq!(tokens[1].value, Token::Ident("a".to_string()));
    assert_eq!(tokens[2].value, Token::Symbol('='));
    assert_eq!(tokens[3].value, Token::Int(1));
}
#[test]
fn simple_indent() {
    use crate::indent_lexer::Lexer;
    use crate::tokens::Token;
    let mut lexer = Lexer::new("    1 + 2\n2 3 4".to_string());
    let lines = lexer.lex().unwrap();
    assert_eq!(lines.len(), 2);

    assert_eq!(lines[0].len(), 3);
    assert_eq!(lines[0].indent, 4);
    assert_eq!(lines[0].tokens[0].value, Token::Int(1));
    assert_eq!(lines[0].tokens[1].value, Token::Symbol('+'));
    assert_eq!(lines[0].tokens[2].value, Token::Int(2));

    assert_eq!(lines[1].len(), 3);
    assert_eq!(lines[1].indent, 0);
    assert_eq!(lines[1].tokens[0].value, Token::Int(2));
    assert_eq!(lines[1].tokens[1].value, Token::Int(3));
    assert_eq!(lines[1].tokens[2].value, Token::Int(4));
}