neutron-engine 0.1.3

A lightweight markup parser for the Neutron styling language (.nt)
Documentation
use std::fmt;

#[derive(Debug, Clone, PartialEq)]
pub enum TokenType {
    // Single char tokens (legacy names kept for parser/lexer compatibility)
    LParen, RParen, LBrace, RBrace,
    LeftParen, RightParen, LeftBrace, RightBrace,
    Comma, Colon, Dot, Minus, Plus, Semicolon, Slash, Star,
    LBracket, RBracket,

    // One or two char tokens
    Bang, BangEqual,
    Equal, EqualEqual,
    Greater, GreaterEqual, Gt, Gte,
    Less, LessEqual, Lt, Lte,
    Percent,
    Arrow, FatArrow, Scope,
    AndAnd, OrOr,
    Assign,

    // Literals
    String(String),
    Number(f64),
    Identifier(String),

    True, False, Null,
    Bool(bool),

    // Helpers / parsing tokens
    Newline,
    Import,
    System,


    // Compound assignments
    PlusAssign, MinusAssign, StarAssign, SlashAssign,

    // Equality operators
    Eq, Neq,

    // Unary operator tokens
    Not,

    // Keywords
    And, Class, Else, Elif, Fn, For, If, In,
    Let, Const, Or, Print, Return,
    Super, This, Var, While, Break, Continue,

    Comment(String),

    Eof,
}

#[derive(Debug, Clone)]
pub struct Token {
    pub token_type: TokenType,
    pub lexeme: String,
    pub line: usize,
    // lexer provides column sometimes; parser/interp here don't need it.
    // Keeping compatible with existing lexer token struct usage elsewhere.
    pub column: usize,
}

impl fmt::Display for TokenType {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        match self {
            TokenType::String(s) => write!(f, "STRING({})", s),
            TokenType::Number(n) => write!(f, "NUMBER({})", n),
            TokenType::Comment(s) => write!(f, "COMMENT({})", s),
            TokenType::Identifier(_) => write!(f, "IDENTIFIER"),

            _ => write!(f, "{:?}", self),
        }
    }
}