aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir/src/macros.rs
diff options
context:
space:
mode:
authorAleksey Kladov <[email protected]>2019-01-31 14:16:02 +0000
committerAleksey Kladov <[email protected]>2019-01-31 20:23:30 +0000
commit59347388541388347e86de9718bd69994c113203 (patch)
treea0d1a61062a0e247526ee3b44545cd20df26fc91 /crates/ra_hir/src/macros.rs
parentbe03aa5ee79241a6d22a79625e37f2ce5559a345 (diff)
first test sort-of passes
Diffstat (limited to 'crates/ra_hir/src/macros.rs')
-rw-r--r--crates/ra_hir/src/macros.rs31
1 files changed, 25 insertions, 6 deletions
diff --git a/crates/ra_hir/src/macros.rs b/crates/ra_hir/src/macros.rs
index 7e9aba3f2..059543bf2 100644
--- a/crates/ra_hir/src/macros.rs
+++ b/crates/ra_hir/src/macros.rs
@@ -254,7 +254,7 @@ fn convert_tt(tt: &SyntaxNode) -> Option<tt::Subtree> {
254 254
255#[test] 255#[test]
256fn test_convert_tt() { 256fn test_convert_tt() {
257 let text = r#" 257 let macro_defenition = r#"
258macro_rules! impl_froms { 258macro_rules! impl_froms {
259 ($e:ident: $($v:ident),*) => { 259 ($e:ident: $($v:ident),*) => {
260 $( 260 $(
@@ -267,13 +267,32 @@ macro_rules! impl_froms {
267 } 267 }
268} 268}
269"#; 269"#;
270 let source_file = ast::SourceFile::parse(text); 270
271 let maco_call = source_file 271 let macro_invocation = r#"
272impl_froms!(TokenTree: Leaf, Subtree);
273"#;
274
275 let source_file = ast::SourceFile::parse(macro_defenition);
276 let macro_defenition = source_file
272 .syntax() 277 .syntax()
273 .descendants() 278 .descendants()
274 .find_map(ast::MacroCall::cast) 279 .find_map(ast::MacroCall::cast)
275 .unwrap(); 280 .unwrap();
276 let tt = macro_call_to_tt(maco_call).unwrap(); 281
277 let tt = mbe::parse(&tt); 282 let source_file = ast::SourceFile::parse(macro_invocation);
278 assert!(tt.is_some()); 283 let macro_invocation = source_file
284 .syntax()
285 .descendants()
286 .find_map(ast::MacroCall::cast)
287 .unwrap();
288
289 let defenition_tt = macro_call_to_tt(macro_defenition).unwrap();
290 let invocation_tt = macro_call_to_tt(macro_invocation).unwrap();
291 let mbe = mbe::parse(&defenition_tt).unwrap();
292 let expansion = mbe::exapnd(&mbe, &invocation_tt).unwrap();
293 assert_eq!(
294 expansion.to_string(),
295 "{(impl From < Leaf > for TokenTree {fn from (it : Leaf) - > TokenTree {TokenTree : : Leaf (it)}}) \
296 (impl From < Subtree > for TokenTree {fn from (it : Subtree) - > TokenTree {TokenTree : : Subtree (it)}})}"
297 )
279} 298}