Skip to content
This repository was archived by the owner on May 28, 2025. It is now read-only.

Commit 2cf5d88

Browse files
UrhengulasVeykril
authored andcommitted
Raise edition one more level
1 parent 454e481 commit 2cf5d88

File tree

13 files changed

+61
-35
lines changed

13 files changed

+61
-35
lines changed

Cargo.lock

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/hir-def/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ cfg.workspace = true
4444
tt.workspace = true
4545
limit.workspace = true
4646
span.workspace = true
47+
parser.workspace = true
4748

4849

4950
[dev-dependencies]

crates/hir-def/src/macro_expansion_tests/mod.rs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -316,8 +316,11 @@ impl ProcMacroExpander for IdentityWhenValidProcMacroExpander {
316316
_: Span,
317317
_: Span,
318318
) -> Result<Subtree, ProcMacroExpansionError> {
319-
let (parse, _) =
320-
::mbe::token_tree_to_syntax_node(subtree, ::mbe::TopEntryPoint::MacroItems);
319+
let (parse, _) = ::mbe::token_tree_to_syntax_node(
320+
subtree,
321+
::mbe::TopEntryPoint::MacroItems,
322+
parser::Edition::Edition2021,
323+
);
321324
if parse.errors().is_empty() {
322325
Ok(subtree.clone())
323326
} else {

crates/hir-expand/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ tt.workspace = true
3232
mbe.workspace = true
3333
limit.workspace = true
3434
span.workspace = true
35+
parser.workspace = true
3536

3637
[dev-dependencies]
3738
expect-test = "1.4.0"

crates/hir-expand/src/builtin_derive_macro.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -204,7 +204,11 @@ struct BasicAdtInfo {
204204
}
205205

206206
fn parse_adt(tt: &tt::Subtree, call_site: Span) -> Result<BasicAdtInfo, ExpandError> {
207-
let (parsed, tm) = &mbe::token_tree_to_syntax_node(tt, mbe::TopEntryPoint::MacroItems);
207+
let (parsed, tm) = &mbe::token_tree_to_syntax_node(
208+
tt,
209+
mbe::TopEntryPoint::MacroItems,
210+
parser::Edition::Edition2021,
211+
);
208212
let macro_items = ast::MacroItems::cast(parsed.syntax_node())
209213
.ok_or_else(|| ExpandError::other("invalid item definition"))?;
210214
let item = macro_items.items().next().ok_or_else(|| ExpandError::other("no item found"))?;

crates/hir-expand/src/db.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -676,7 +676,7 @@ fn token_tree_to_syntax_node(
676676
ExpandTo::Type => mbe::TopEntryPoint::Type,
677677
ExpandTo::Expr => mbe::TopEntryPoint::Expr,
678678
};
679-
mbe::token_tree_to_syntax_node(tt, entry_point)
679+
mbe::token_tree_to_syntax_node(tt, entry_point, parser::Edition::Edition2021)
680680
}
681681

682682
fn check_tt_count(tt: &tt::Subtree) -> Result<(), ExpandResult<()>> {

crates/hir-expand/src/fixup.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -417,7 +417,11 @@ mod tests {
417417
expect.assert_eq(&actual);
418418

419419
// the fixed-up tree should be syntactically valid
420-
let (parse, _) = mbe::token_tree_to_syntax_node(&tt, ::mbe::TopEntryPoint::MacroItems);
420+
let (parse, _) = mbe::token_tree_to_syntax_node(
421+
&tt,
422+
::mbe::TopEntryPoint::MacroItems,
423+
parser::Edition::Edition2021,
424+
);
421425
assert!(
422426
parse.errors().is_empty(),
423427
"parse has syntax errors. parse tree:\n{:#?}",

crates/mbe/src/expander/matcher.rs

Lines changed: 22 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -743,9 +743,11 @@ fn match_meta_var(
743743
) -> ExpandResult<Option<Fragment>> {
744744
let fragment = match kind {
745745
MetaVarKind::Path => {
746-
return input.expect_fragment(parser::PrefixEntryPoint::Path).map(|it| {
747-
it.map(|it| tt::TokenTree::subtree_or_wrap(it, delim_span)).map(Fragment::Path)
748-
});
746+
return input
747+
.expect_fragment(parser::PrefixEntryPoint::Path, parser::Edition::Edition2021)
748+
.map(|it| {
749+
it.map(|it| tt::TokenTree::subtree_or_wrap(it, delim_span)).map(Fragment::Path)
750+
});
749751
}
750752
MetaVarKind::Ty => parser::PrefixEntryPoint::Ty,
751753
MetaVarKind::Pat => parser::PrefixEntryPoint::PatTop,
@@ -770,21 +772,23 @@ fn match_meta_var(
770772
}
771773
_ => {}
772774
};
773-
return input.expect_fragment(parser::PrefixEntryPoint::Expr).map(|tt| {
774-
tt.map(|tt| match tt {
775-
tt::TokenTree::Leaf(leaf) => tt::Subtree {
776-
delimiter: tt::Delimiter::invisible_spanned(*leaf.span()),
777-
token_trees: Box::new([leaf.into()]),
778-
},
779-
tt::TokenTree::Subtree(mut s) => {
780-
if s.delimiter.kind == tt::DelimiterKind::Invisible {
781-
s.delimiter.kind = tt::DelimiterKind::Parenthesis;
775+
return input
776+
.expect_fragment(parser::PrefixEntryPoint::Expr, parser::Edition::Edition2021)
777+
.map(|tt| {
778+
tt.map(|tt| match tt {
779+
tt::TokenTree::Leaf(leaf) => tt::Subtree {
780+
delimiter: tt::Delimiter::invisible_spanned(*leaf.span()),
781+
token_trees: Box::new([leaf.into()]),
782+
},
783+
tt::TokenTree::Subtree(mut s) => {
784+
if s.delimiter.kind == tt::DelimiterKind::Invisible {
785+
s.delimiter.kind = tt::DelimiterKind::Parenthesis;
786+
}
787+
s
782788
}
783-
s
784-
}
785-
})
786-
.map(Fragment::Expr)
787-
});
789+
})
790+
.map(Fragment::Expr)
791+
});
788792
}
789793
MetaVarKind::Ident | MetaVarKind::Tt | MetaVarKind::Lifetime | MetaVarKind::Literal => {
790794
let tt_result = match kind {
@@ -819,7 +823,7 @@ fn match_meta_var(
819823
return tt_result.map(|it| Some(Fragment::Tokens(it))).into();
820824
}
821825
};
822-
input.expect_fragment(fragment).map(|it| it.map(Fragment::Tokens))
826+
input.expect_fragment(fragment, parser::Edition::Edition2021).map(|it| it.map(Fragment::Tokens))
823827
}
824828

825829
fn collect_vars(collector_fun: &mut impl FnMut(SmolStr), pattern: &MetaTemplate) {

crates/mbe/src/syntax_bridge.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,7 @@ where
119119
pub fn token_tree_to_syntax_node<Ctx>(
120120
tt: &tt::Subtree<SpanData<Ctx>>,
121121
entry_point: parser::TopEntryPoint,
122+
edition: parser::Edition,
122123
) -> (Parse<SyntaxNode>, SpanMap<Ctx>)
123124
where
124125
SpanData<Ctx>: Copy + fmt::Debug,
@@ -131,7 +132,7 @@ where
131132
_ => TokenBuffer::from_subtree(tt),
132133
};
133134
let parser_input = to_parser_input(&buffer);
134-
let parser_output = entry_point.parse(&parser_input, parser::Edition::Edition2021);
135+
let parser_output = entry_point.parse(&parser_input, edition);
135136
let mut tree_sink = TtTreeSink::new(buffer.begin());
136137
for event in parser_output.iter() {
137138
match event {
@@ -194,7 +195,8 @@ where
194195
let mut res = Vec::new();
195196

196197
while iter.peek_n(0).is_some() {
197-
let expanded = iter.expect_fragment(parser::PrefixEntryPoint::Expr);
198+
let expanded =
199+
iter.expect_fragment(parser::PrefixEntryPoint::Expr, parser::Edition::Edition2021);
198200

199201
res.push(match expanded.value {
200202
None => break,

crates/mbe/src/tt_iter.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -140,10 +140,11 @@ impl<'a, S: Copy + fmt::Debug> TtIter<'a, S> {
140140
pub(crate) fn expect_fragment(
141141
&mut self,
142142
entry_point: parser::PrefixEntryPoint,
143+
edition: parser::Edition,
143144
) -> ExpandResult<Option<tt::TokenTree<S>>> {
144145
let buffer = tt::buffer::TokenBuffer::from_tokens(self.inner.as_slice());
145146
let parser_input = to_parser_input(&buffer);
146-
let tree_traversal = entry_point.parse(&parser_input, parser::Edition::Edition2021);
147+
let tree_traversal = entry_point.parse(&parser_input, edition);
147148
let mut cursor = buffer.begin();
148149
let mut error = false;
149150
for step in tree_traversal.iter() {

0 commit comments

Comments
 (0)