From fd8622e1ec6371b7cef6fef50f312bc767b317df Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Wed, 7 Oct 2020 11:49:31 +0200 Subject: Cleanup --- crates/mbe/src/subtree_source.rs | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) (limited to 'crates/mbe/src') diff --git a/crates/mbe/src/subtree_source.rs b/crates/mbe/src/subtree_source.rs index 226dc3bec..396ce8b16 100644 --- a/crates/mbe/src/subtree_source.rs +++ b/crates/mbe/src/subtree_source.rs @@ -2,7 +2,7 @@ use parser::{Token, TokenSource}; use std::cell::{Cell, Ref, RefCell}; -use syntax::{tokenize, SmolStr, SyntaxKind, SyntaxKind::*, T}; +use syntax::{lex_single_syntax_kind, SmolStr, SyntaxKind, SyntaxKind::*, T}; use tt::buffer::{Cursor, TokenBuffer}; #[derive(Debug, Clone, Eq, PartialEq)] @@ -155,17 +155,15 @@ fn convert_delim(d: Option, closing: bool) -> TtToken { } fn convert_literal(l: &tt::Literal) -> TtToken { - let mut kinds = tokenize(&l.text).0.into_iter().map(|token| token.kind); - - let kind = match kinds.next() { - Some(kind) if kind.is_literal() => Some(kind), - Some(SyntaxKind::MINUS) => match kinds.next() { - Some(kind) if kind.is_literal() => Some(kind), - _ => None, - }, - _ => None, - } - .unwrap_or_else(|| panic!("Fail to convert given literal {:#?}", &l)); + let is_negated = l.text.starts_with('-'); + let inner_text = &l.text[if is_negated { 1 } else { 0 }..]; + + let kind = lex_single_syntax_kind(inner_text) + .map(|(kind, _error)| kind) + .filter(|kind| { + kind.is_literal() && (!is_negated || matches!(kind, FLOAT_NUMBER | INT_NUMBER)) + }) + .unwrap_or_else(|| panic!("Fail to convert given literal {:#?}", &l)); TtToken { kind, is_joint_to_next: false, text: l.text.clone() } } -- cgit v1.2.3