Skip to content

Commit

Permalink
feat(#230): parse numbers properly and add test for numbers
Browse files Browse the repository at this point in the history
  • Loading branch information
grantlemons committed Nov 27, 2024
1 parent 9798b8d commit ccab586
Showing 1 changed file with 52 additions and 2 deletions.
54 changes: 52 additions & 2 deletions harper-core/src/parsers/typst.rs
Original file line number Diff line number Diff line change
Expand Up @@ -116,8 +116,12 @@ fn map_token(
Expr::None(a) => constant_token!(doc, a, TokenKind::Word(WordMetadata::default())),
Expr::Auto(a) => constant_token!(doc, a, TokenKind::Word(WordMetadata::default())),
Expr::Bool(a) => constant_token!(doc, a, TokenKind::Word(WordMetadata::default())),
Expr::Int(int) => todo!(),
Expr::Float(float) => todo!(),
Expr::Int(int) => {
constant_token!(doc, int, TokenKind::Number((int.get() as f64).into(), None))
}
Expr::Float(float) => {
constant_token!(doc, float, TokenKind::Number(float.get().into(), None))
}
Expr::Numeric(a) => constant_token!(doc, a, TokenKind::Unlintable),
Expr::Str(text) => parse_english(text.get(), doc, parser, &text.span()),
Expr::Code(a) => constant_token!(doc, a, TokenKind::Unlintable),
Expand Down Expand Up @@ -216,6 +220,8 @@ impl Parser for Typst {

#[cfg(test)]
mod tests {
use ordered_float::OrderedFloat;

use super::Typst;
use crate::{parsers::StrParser, Punctuation, TokenKind};

Expand All @@ -232,6 +238,50 @@ mod tests {
assert!(matches!(token_kinds.as_slice(), &[TokenKind::Word(_),]))
}

#[test]
fn number() {
let source = r"The number 12 is larger than 11, but is much less than 11!";

let tokens = Typst.parse_str(source);

let token_kinds = tokens.iter().map(|t| t.kind).collect::<Vec<_>>();

dbg!(&token_kinds);

assert!(matches!(
token_kinds.as_slice(),
&[
TokenKind::Word(_),
TokenKind::Space(1),
TokenKind::Word(_),
TokenKind::Space(1),
TokenKind::Number(OrderedFloat(12.0), None),
TokenKind::Space(1),
TokenKind::Word(_),
TokenKind::Space(1),
TokenKind::Word(_),
TokenKind::Space(1),
TokenKind::Word(_),
TokenKind::Space(1),
TokenKind::Number(OrderedFloat(11.0), None),
TokenKind::Punctuation(Punctuation::Comma),
TokenKind::Space(1),
TokenKind::Word(_),
TokenKind::Space(1),
TokenKind::Word(_),
TokenKind::Space(1),
TokenKind::Word(_),
TokenKind::Space(1),
TokenKind::Word(_),
TokenKind::Space(1),
TokenKind::Word(_),
TokenKind::Space(1),
TokenKind::Number(OrderedFloat(11.0), None),
TokenKind::Punctuation(Punctuation::Bang),
]
))
}

#[test]
fn sentence() {
let source = r"This is a sentence, it does not have any particularly interesting elements of the typst syntax.";
Expand Down

0 comments on commit ccab586

Please sign in to comment.