diff options
Diffstat (limited to 'crates/ra_mbe/src/syntax_bridge.rs')
-rw-r--r-- | crates/ra_mbe/src/syntax_bridge.rs | 42 |
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 |
49 | pub fn token_tree_to_expr(tt: &tt::Subtree) -> Result<TreeArc<ast::Expr>, ExpandError> { | 49 | pub 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 |
65 | pub fn token_tree_to_pat(tt: &tt::Subtree) -> Result<TreeArc<ast::Pat>, ExpandError> { | 66 | pub 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 |
79 | pub fn token_tree_to_ty(tt: &tt::Subtree) -> Result<TreeArc<ast::TypeRef>, ExpandError> { | 81 | pub 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 |
122 | pub fn token_tree_to_ast_item_list(tt: &tt::Subtree) -> TreeArc<ast::SourceFile> { | 127 | pub 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 | } |