diff options
Diffstat (limited to 'crates/ra_mbe/src/syntax_bridge.rs')
-rw-r--r-- | crates/ra_mbe/src/syntax_bridge.rs | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/crates/ra_mbe/src/syntax_bridge.rs b/crates/ra_mbe/src/syntax_bridge.rs index 9664280b5..139a0fd33 100644 --- a/crates/ra_mbe/src/syntax_bridge.rs +++ b/crates/ra_mbe/src/syntax_bridge.rs | |||
@@ -103,10 +103,12 @@ fn convert_tt( | |||
103 | Some(res) | 103 | Some(res) |
104 | } | 104 | } |
105 | 105 | ||
106 | #[derive(Debug)] | ||
106 | struct TtTokenSource { | 107 | struct TtTokenSource { |
107 | tokens: Vec<TtToken>, | 108 | tokens: Vec<TtToken>, |
108 | } | 109 | } |
109 | 110 | ||
111 | #[derive(Debug)] | ||
110 | struct TtToken { | 112 | struct TtToken { |
111 | kind: SyntaxKind, | 113 | kind: SyntaxKind, |
112 | is_joint_to_next: bool, | 114 | is_joint_to_next: bool, |
@@ -355,3 +357,44 @@ impl<'a> TreeSink for TtTreeSink<'a> { | |||
355 | self.inner.error(error, self.text_pos) | 357 | self.inner.error(error, self.text_pos) |
356 | } | 358 | } |
357 | } | 359 | } |
360 | |||
361 | #[cfg(test)] | ||
362 | mod tests { | ||
363 | use super::*; | ||
364 | use crate::tests::{expand, create_rules}; | ||
365 | |||
366 | #[test] | ||
367 | fn convert_tt_token_source() { | ||
368 | let rules = create_rules( | ||
369 | r#" | ||
370 | macro_rules! literals { | ||
371 | ($i:ident) => { | ||
372 | { | ||
373 | let a = 'c'; | ||
374 | let c = 1000; | ||
375 | let f = 12E+99_f64; | ||
376 | let s = "rust1"; | ||
377 | } | ||
378 | } | ||
379 | } | ||
380 | "#, | ||
381 | ); | ||
382 | let expansion = expand(&rules, "literals!(foo)"); | ||
383 | let tt_src = TtTokenSource::new(&expansion); | ||
384 | |||
385 | // [{] | ||
386 | // [let] [a] [=] ['c'] [;] | ||
387 | assert_eq!(tt_src.tokens[1 + 3].text, "'c'"); | ||
388 | assert_eq!(tt_src.tokens[1 + 3].kind, CHAR); | ||
389 | // [let] [c] [=] [1000] [;] | ||
390 | assert_eq!(tt_src.tokens[1 + 5 + 3].text, "1000"); | ||
391 | assert_eq!(tt_src.tokens[1 + 5 + 3].kind, INT_NUMBER); | ||
392 | // [let] [f] [=] [12E+99_f64] [;] | ||
393 | assert_eq!(tt_src.tokens[1 + 10 + 3].text, "12E+99_f64"); | ||
394 | assert_eq!(tt_src.tokens[1 + 10 + 3].kind, FLOAT_NUMBER); | ||
395 | |||
396 | // [let] [s] [=] ["rust1"] [;] | ||
397 | assert_eq!(tt_src.tokens[1 + 15 + 3].text, "\"rust1\""); | ||
398 | assert_eq!(tt_src.tokens[1 + 15 + 3].kind, STRING); | ||
399 | } | ||
400 | } | ||