Preserve trailing semicolons when using fmt: off (#8275)

This commit is contained in:
Micha Reiser 2023-10-30 09:22:34 +09:00 committed by GitHub
parent 2c84f911c4
commit 3ccca332bd
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 108 additions and 8 deletions

View file

@ -395,14 +395,18 @@ fn write_suppressed_statements<'a>(
statement = SuiteChildStatement::Other(next_statement);
leading_node_comments = comments.leading(next_statement);
} else {
let mut nodes =
std::iter::successors(Some(AnyNodeRef::from(statement.statement())), |statement| {
statement.last_child_in_body()
});
let end = nodes
.find_map(|statement| comments.trailing(statement).last().map(Ranged::end))
.unwrap_or(statement.end());
let mut current = AnyNodeRef::from(statement.statement());
// Expand the range of the statement to include any trailing comments or semicolons.
let end = loop {
if let Some(comment) = comments.trailing(current).last() {
break comment.end();
} else if let Some(child) = current.last_child_in_body() {
current = child;
} else {
break trailing_semicolon(current, source)
.map_or(statement.end(), TextRange::end);
}
};
FormatVerbatimStatementRange {
verbatim_range: TextRange::new(format_off_comment.end(), end),