diff options
| author | bors <bors@rust-lang.org> | 2022-12-11 23:36:15 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2022-12-11 23:36:15 +0000 |
| commit | ee6533d7408f1447c028025c883a34c904d25ba4 (patch) | |
| tree | 1edb59886180eb42468ce0c9b818dfeb6145207c /compiler/rustc_parse/src | |
| parent | bdb07a8ec8e77aa10fb84fae1d4ff71c21180bb4 (diff) | |
| parent | 427ea68278099ef9bf7cd474f76bc6a519c9b3dc (diff) | |
| download | rust-ee6533d7408f1447c028025c883a34c904d25ba4.tar.gz rust-ee6533d7408f1447c028025c883a34c904d25ba4.zip | |
Auto merge of #105579 - matthiaskrgr:rollup-vw5dlqc, r=matthiaskrgr
Rollup of 7 pull requests Successful merges: - #101648 (Better documentation for env::home_dir()'s broken behaviour) - #105283 (Don't call `diagnostic_hir_wf_check` query if we have infer variables) - #105369 (Detect spurious ; before assoc fn body) - #105472 (Make encode_info_for_trait_item use queries instead of accessing the HIR) - #105521 (separate heading from body) - #105555 (llvm-wrapper: adapt for LLVM API changes) - #105560 (Extend rustdoc hashtag prepended line test) Failed merges: r? `@ghost` `@rustbot` modify labels: rollup
Diffstat (limited to 'compiler/rustc_parse/src')
| -rw-r--r-- | compiler/rustc_parse/src/parser/item.rs | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/compiler/rustc_parse/src/parser/item.rs b/compiler/rustc_parse/src/parser/item.rs index 7ebcda249e2..beb9d55d454 100644 --- a/compiler/rustc_parse/src/parser/item.rs +++ b/compiler/rustc_parse/src/parser/item.rs @@ -706,9 +706,9 @@ impl<'a> Parser<'a> { } match parse_item(self) { Ok(None) => { - let is_unnecessary_semicolon = !items.is_empty() + let mut is_unnecessary_semicolon = !items.is_empty() // When the close delim is `)` in a case like the following, `token.kind` is expected to be `token::CloseDelim(Delimiter::Parenthesis)`, - // but the actual `token.kind` is `token::CloseDelim(Delimiter::Bracket)`. + // but the actual `token.kind` is `token::CloseDelim(Delimiter::Brace)`. // This is because the `token.kind` of the close delim is treated as the same as // that of the open delim in `TokenTreesReader::parse_token_tree`, even if the delimiters of them are different. // Therefore, `token.kind` should not be compared here. @@ -727,7 +727,13 @@ impl<'a> Parser<'a> { .span_to_snippet(self.prev_token.span) .map_or(false, |snippet| snippet == "}") && self.token.kind == token::Semi; - let semicolon_span = self.token.span; + let mut semicolon_span = self.token.span; + if !is_unnecessary_semicolon { + // #105369, Detect spurious `;` before assoc fn body + is_unnecessary_semicolon = self.token == token::OpenDelim(Delimiter::Brace) + && self.prev_token.kind == token::Semi; + semicolon_span = self.prev_token.span; + } // We have to bail or we'll potentially never make progress. let non_item_span = self.token.span; let is_let = self.token.is_keyword(kw::Let); |
