48 lines
1.1 KiB
Rust
48 lines
1.1 KiB
Rust
use crate::syntax::content::{Parseable, parser::Lexeme};
|
|
|
|
#[derive(Debug, Clone, Eq, PartialEq)]
|
|
pub struct Literal {
|
|
text: String,
|
|
}
|
|
|
|
impl Parseable for Literal {
|
|
fn probe(lexeme: &Lexeme) -> bool {
|
|
!(lexeme.last() && lexeme.is_whitespace())
|
|
}
|
|
|
|
fn lex(lexeme: &Lexeme) -> Literal {
|
|
Literal {
|
|
text: lexeme.text(),
|
|
}
|
|
}
|
|
|
|
fn render(&self) -> String { self.text.clone() }
|
|
|
|
fn flatten(&self) -> String { self.text.clone() }
|
|
}
|
|
|
|
impl std::fmt::Display for Literal {
|
|
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
|
|
write!(f, "Literal {}", crate::dev::log::wrap(&self.text))
|
|
}
|
|
}
|
|
|
|
#[cfg(test)]
|
|
mod tests {
|
|
use super::*;
|
|
use crate::syntax::content::parser::Token;
|
|
|
|
#[test]
|
|
fn token_display() {
|
|
let mut literal = Literal {
|
|
text: String::from("MYpDT"),
|
|
};
|
|
assert_eq!(
|
|
format!("{}", Token::Literal(literal.clone())),
|
|
"Tk:Literal MYpDT"
|
|
);
|
|
|
|
literal.text = String::from("TjY02");
|
|
assert_eq!(format!("{}", Token::Literal(literal)), "Tk:Literal TjY02");
|
|
}
|
|
}
|