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.rs42
1 files changed, 24 insertions, 18 deletions
diff --git a/crates/ra_mbe/src/syntax_bridge.rs b/crates/ra_mbe/src/syntax_bridge.rs
index 0a75305b4..0aab5ea8b 100644
--- a/crates/ra_mbe/src/syntax_bridge.rs
+++ b/crates/ra_mbe/src/syntax_bridge.rs
@@ -48,9 +48,10 @@ pub fn syntax_node_to_token_tree(node: &SyntaxNode) -> Option<(tt::Subtree, Toke
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 buffer = tt::buffer::TokenBuffer::new(&[tt.clone().into()]); 50 let buffer = tt::buffer::TokenBuffer::new(&[tt.clone().into()]);
51 let token_source = SubtreeTokenSource::new(&buffer); 51 let mut token_source = SubtreeTokenSource::new(&buffer);
52 let mut tree_sink = TtTreeSink::new(token_source.querier()); 52 let querier = token_source.querier();
53 ra_parser::parse_expr(&token_source, &mut tree_sink); 53 let mut tree_sink = TtTreeSink::new(querier.as_ref());
54 ra_parser::parse_expr(&mut token_source, &mut tree_sink);
54 if tree_sink.roots.len() != 1 { 55 if tree_sink.roots.len() != 1 {
55 return Err(ExpandError::ConversionError); 56 return Err(ExpandError::ConversionError);
56 } 57 }
@@ -64,9 +65,10 @@ pub fn token_tree_to_expr(tt: &tt::Subtree) -> Result<TreeArc<ast::Expr>, Expand
64/// Parses the token tree (result of macro expansion) to a Pattern 65/// Parses the token tree (result of macro expansion) to a Pattern
65pub fn token_tree_to_pat(tt: &tt::Subtree) -> Result<TreeArc<ast::Pat>, ExpandError> { 66pub fn token_tree_to_pat(tt: &tt::Subtree) -> Result<TreeArc<ast::Pat>, ExpandError> {
66 let buffer = tt::buffer::TokenBuffer::new(&[tt.clone().into()]); 67 let buffer = tt::buffer::TokenBuffer::new(&[tt.clone().into()]);
67 let token_source = SubtreeTokenSource::new(&buffer); 68 let mut token_source = SubtreeTokenSource::new(&buffer);
68 let mut tree_sink = TtTreeSink::new(token_source.querier()); 69 let querier = token_source.querier();
69 ra_parser::parse_pat(&token_source, &mut tree_sink); 70 let mut tree_sink = TtTreeSink::new(querier.as_ref());
71 ra_parser::parse_pat(&mut token_source, &mut tree_sink);
70 if tree_sink.roots.len() != 1 { 72 if tree_sink.roots.len() != 1 {
71 return Err(ExpandError::ConversionError); 73 return Err(ExpandError::ConversionError);
72 } 74 }
@@ -78,9 +80,10 @@ pub fn token_tree_to_pat(tt: &tt::Subtree) -> Result<TreeArc<ast::Pat>, ExpandEr
78/// Parses the token tree (result of macro expansion) to a Type 80/// Parses the token tree (result of macro expansion) to a Type
79pub fn token_tree_to_ty(tt: &tt::Subtree) -> Result<TreeArc<ast::TypeRef>, ExpandError> { 81pub fn token_tree_to_ty(tt: &tt::Subtree) -> Result<TreeArc<ast::TypeRef>, ExpandError> {
80 let buffer = tt::buffer::TokenBuffer::new(&[tt.clone().into()]); 82 let buffer = tt::buffer::TokenBuffer::new(&[tt.clone().into()]);
81 let token_source = SubtreeTokenSource::new(&buffer); 83 let mut token_source = SubtreeTokenSource::new(&buffer);
82 let mut tree_sink = TtTreeSink::new(token_source.querier()); 84 let querier = token_source.querier();
83 ra_parser::parse_ty(&token_source, &mut tree_sink); 85 let mut tree_sink = TtTreeSink::new(querier.as_ref());
86 ra_parser::parse_ty(&mut token_source, &mut tree_sink);
84 if tree_sink.roots.len() != 1 { 87 if tree_sink.roots.len() != 1 {
85 return Err(ExpandError::ConversionError); 88 return Err(ExpandError::ConversionError);
86 } 89 }
@@ -93,9 +96,10 @@ pub fn token_tree_to_macro_stmts(
93 tt: &tt::Subtree, 96 tt: &tt::Subtree,
94) -> Result<TreeArc<ast::MacroStmts>, ExpandError> { 97) -> Result<TreeArc<ast::MacroStmts>, ExpandError> {
95 let buffer = tt::buffer::TokenBuffer::new(&[tt.clone().into()]); 98 let buffer = tt::buffer::TokenBuffer::new(&[tt.clone().into()]);
96 let token_source = SubtreeTokenSource::new(&buffer); 99 let mut token_source = SubtreeTokenSource::new(&buffer);
97 let mut tree_sink = TtTreeSink::new(token_source.querier()); 100 let querier = token_source.querier();
98 ra_parser::parse_macro_stmts(&token_source, &mut tree_sink); 101 let mut tree_sink = TtTreeSink::new(querier.as_ref());
102 ra_parser::parse_macro_stmts(&mut token_source, &mut tree_sink);
99 if tree_sink.roots.len() != 1 { 103 if tree_sink.roots.len() != 1 {
100 return Err(ExpandError::ConversionError); 104 return Err(ExpandError::ConversionError);
101 } 105 }
@@ -108,9 +112,10 @@ pub fn token_tree_to_macro_items(
108 tt: &tt::Subtree, 112 tt: &tt::Subtree,
109) -> Result<TreeArc<ast::MacroItems>, ExpandError> { 113) -> Result<TreeArc<ast::MacroItems>, ExpandError> {
110 let buffer = tt::buffer::TokenBuffer::new(&[tt.clone().into()]); 114 let buffer = tt::buffer::TokenBuffer::new(&[tt.clone().into()]);
111 let token_source = SubtreeTokenSource::new(&buffer); 115 let mut token_source = SubtreeTokenSource::new(&buffer);
112 let mut tree_sink = TtTreeSink::new(token_source.querier()); 116 let querier = token_source.querier();
113 ra_parser::parse_macro_items(&token_source, &mut tree_sink); 117 let mut tree_sink = TtTreeSink::new(querier.as_ref());
118 ra_parser::parse_macro_items(&mut token_source, &mut tree_sink);
114 if tree_sink.roots.len() != 1 { 119 if tree_sink.roots.len() != 1 {
115 return Err(ExpandError::ConversionError); 120 return Err(ExpandError::ConversionError);
116 } 121 }
@@ -121,9 +126,10 @@ pub fn token_tree_to_macro_items(
121/// Parses the token tree (result of macro expansion) as a sequence of items 126/// Parses the token tree (result of macro expansion) as a sequence of items
122pub fn token_tree_to_ast_item_list(tt: &tt::Subtree) -> TreeArc<ast::SourceFile> { 127pub fn token_tree_to_ast_item_list(tt: &tt::Subtree) -> TreeArc<ast::SourceFile> {
123 let buffer = tt::buffer::TokenBuffer::new(&[tt.clone().into()]); 128 let buffer = tt::buffer::TokenBuffer::new(&[tt.clone().into()]);
124 let token_source = SubtreeTokenSource::new(&buffer); 129 let mut token_source = SubtreeTokenSource::new(&buffer);
125 let mut tree_sink = TtTreeSink::new(token_source.querier()); 130 let querier = token_source.querier();
126 ra_parser::parse(&token_source, &mut tree_sink); 131 let mut tree_sink = TtTreeSink::new(querier.as_ref());
132 ra_parser::parse(&mut token_source, &mut tree_sink);
127 let syntax = tree_sink.inner.finish(); 133 let syntax = tree_sink.inner.finish();
128 ast::SourceFile::cast(&syntax).unwrap().to_owned() 134 ast::SourceFile::cast(&syntax).unwrap().to_owned()
129} 135}