aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_mbe/src/syntax_bridge.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_mbe/src/syntax_bridge.rs')
-rw-r--r--crates/ra_mbe/src/syntax_bridge.rs21
1 files changed, 14 insertions, 7 deletions
diff --git a/crates/ra_mbe/src/syntax_bridge.rs b/crates/ra_mbe/src/syntax_bridge.rs
index d8e344557..0a75305b4 100644
--- a/crates/ra_mbe/src/syntax_bridge.rs
+++ b/crates/ra_mbe/src/syntax_bridge.rs
@@ -47,7 +47,8 @@ pub fn syntax_node_to_token_tree(node: &SyntaxNode) -> Option<(tt::Subtree, Toke
47 47
48/// Parses the token tree (result of macro expansion) to an expression 48/// Parses the token tree (result of macro expansion) to an expression
49pub fn token_tree_to_expr(tt: &tt::Subtree) -> Result<TreeArc<ast::Expr>, ExpandError> { 49pub fn token_tree_to_expr(tt: &tt::Subtree) -> Result<TreeArc<ast::Expr>, ExpandError> {
50 let token_source = SubtreeTokenSource::new(tt); 50 let buffer = tt::buffer::TokenBuffer::new(&[tt.clone().into()]);
51 let token_source = SubtreeTokenSource::new(&buffer);
51 let mut tree_sink = TtTreeSink::new(token_source.querier()); 52 let mut tree_sink = TtTreeSink::new(token_source.querier());
52 ra_parser::parse_expr(&token_source, &mut tree_sink); 53 ra_parser::parse_expr(&token_source, &mut tree_sink);
53 if tree_sink.roots.len() != 1 { 54 if tree_sink.roots.len() != 1 {
@@ -62,7 +63,8 @@ pub fn token_tree_to_expr(tt: &tt::Subtree) -> Result<TreeArc<ast::Expr>, Expand
62 63
63/// Parses the token tree (result of macro expansion) to a Pattern 64/// Parses the token tree (result of macro expansion) to a Pattern
64pub fn token_tree_to_pat(tt: &tt::Subtree) -> Result<TreeArc<ast::Pat>, ExpandError> { 65pub fn token_tree_to_pat(tt: &tt::Subtree) -> Result<TreeArc<ast::Pat>, ExpandError> {
65 let token_source = SubtreeTokenSource::new(tt); 66 let buffer = tt::buffer::TokenBuffer::new(&[tt.clone().into()]);
67 let token_source = SubtreeTokenSource::new(&buffer);
66 let mut tree_sink = TtTreeSink::new(token_source.querier()); 68 let mut tree_sink = TtTreeSink::new(token_source.querier());
67 ra_parser::parse_pat(&token_source, &mut tree_sink); 69 ra_parser::parse_pat(&token_source, &mut tree_sink);
68 if tree_sink.roots.len() != 1 { 70 if tree_sink.roots.len() != 1 {
@@ -75,7 +77,8 @@ pub fn token_tree_to_pat(tt: &tt::Subtree) -> Result<TreeArc<ast::Pat>, ExpandEr
75 77
76/// Parses the token tree (result of macro expansion) to a Type 78/// Parses the token tree (result of macro expansion) to a Type
77pub fn token_tree_to_ty(tt: &tt::Subtree) -> Result<TreeArc<ast::TypeRef>, ExpandError> { 79pub fn token_tree_to_ty(tt: &tt::Subtree) -> Result<TreeArc<ast::TypeRef>, ExpandError> {
78 let token_source = SubtreeTokenSource::new(tt); 80 let buffer = tt::buffer::TokenBuffer::new(&[tt.clone().into()]);
81 let token_source = SubtreeTokenSource::new(&buffer);
79 let mut tree_sink = TtTreeSink::new(token_source.querier()); 82 let mut tree_sink = TtTreeSink::new(token_source.querier());
80 ra_parser::parse_ty(&token_source, &mut tree_sink); 83 ra_parser::parse_ty(&token_source, &mut tree_sink);
81 if tree_sink.roots.len() != 1 { 84 if tree_sink.roots.len() != 1 {
@@ -89,7 +92,8 @@ pub fn token_tree_to_ty(tt: &tt::Subtree) -> Result<TreeArc<ast::TypeRef>, Expan
89pub fn token_tree_to_macro_stmts( 92pub fn token_tree_to_macro_stmts(
90 tt: &tt::Subtree, 93 tt: &tt::Subtree,
91) -> Result<TreeArc<ast::MacroStmts>, ExpandError> { 94) -> Result<TreeArc<ast::MacroStmts>, ExpandError> {
92 let token_source = SubtreeTokenSource::new(tt); 95 let buffer = tt::buffer::TokenBuffer::new(&[tt.clone().into()]);
96 let token_source = SubtreeTokenSource::new(&buffer);
93 let mut tree_sink = TtTreeSink::new(token_source.querier()); 97 let mut tree_sink = TtTreeSink::new(token_source.querier());
94 ra_parser::parse_macro_stmts(&token_source, &mut tree_sink); 98 ra_parser::parse_macro_stmts(&token_source, &mut tree_sink);
95 if tree_sink.roots.len() != 1 { 99 if tree_sink.roots.len() != 1 {
@@ -103,7 +107,8 @@ pub fn token_tree_to_macro_stmts(
103pub fn token_tree_to_macro_items( 107pub fn token_tree_to_macro_items(
104 tt: &tt::Subtree, 108 tt: &tt::Subtree,
105) -> Result<TreeArc<ast::MacroItems>, ExpandError> { 109) -> Result<TreeArc<ast::MacroItems>, ExpandError> {
106 let token_source = SubtreeTokenSource::new(tt); 110 let buffer = tt::buffer::TokenBuffer::new(&[tt.clone().into()]);
111 let token_source = SubtreeTokenSource::new(&buffer);
107 let mut tree_sink = TtTreeSink::new(token_source.querier()); 112 let mut tree_sink = TtTreeSink::new(token_source.querier());
108 ra_parser::parse_macro_items(&token_source, &mut tree_sink); 113 ra_parser::parse_macro_items(&token_source, &mut tree_sink);
109 if tree_sink.roots.len() != 1 { 114 if tree_sink.roots.len() != 1 {
@@ -115,7 +120,8 @@ pub fn token_tree_to_macro_items(
115 120
116/// Parses the token tree (result of macro expansion) as a sequence of items 121/// Parses the token tree (result of macro expansion) as a sequence of items
117pub fn token_tree_to_ast_item_list(tt: &tt::Subtree) -> TreeArc<ast::SourceFile> { 122pub fn token_tree_to_ast_item_list(tt: &tt::Subtree) -> TreeArc<ast::SourceFile> {
118 let token_source = SubtreeTokenSource::new(tt); 123 let buffer = tt::buffer::TokenBuffer::new(&[tt.clone().into()]);
124 let token_source = SubtreeTokenSource::new(&buffer);
119 let mut tree_sink = TtTreeSink::new(token_source.querier()); 125 let mut tree_sink = TtTreeSink::new(token_source.querier());
120 ra_parser::parse(&token_source, &mut tree_sink); 126 ra_parser::parse(&token_source, &mut tree_sink);
121 let syntax = tree_sink.inner.finish(); 127 let syntax = tree_sink.inner.finish();
@@ -381,7 +387,8 @@ mod tests {
381 "#, 387 "#,
382 ); 388 );
383 let expansion = expand(&rules, "literals!(foo)"); 389 let expansion = expand(&rules, "literals!(foo)");
384 let tt_src = SubtreeTokenSource::new(&expansion); 390 let buffer = tt::buffer::TokenBuffer::new(&[expansion.clone().into()]);
391 let tt_src = SubtreeTokenSource::new(&buffer);
385 392
386 let query = tt_src.querier(); 393 let query = tt_src.querier();
387 394