Auto merge of #13891 - bvanjoi:reverse-whitespace-in-assists, r=Veykril
fix: keep whitespace in extract function handler Fixed #13874
This commit is contained in:
commit
938a39ab89
@ -1799,7 +1799,8 @@ fn make_body(
|
||||
})
|
||||
.collect::<Vec<SyntaxElement>>();
|
||||
let tail_expr = tail_expr.map(|expr| expr.dedent(old_indent).indent(body_indent));
|
||||
make::hacky_block_expr_with_comments(elements, tail_expr)
|
||||
|
||||
make::hacky_block_expr(elements, tail_expr)
|
||||
}
|
||||
};
|
||||
|
||||
@ -1881,7 +1882,7 @@ fn with_tail_expr(block: ast::BlockExpr, tail_expr: ast::Expr) -> ast::BlockExpr
|
||||
elements.push(syntax::NodeOrToken::Node(stmt_tail.syntax().clone()));
|
||||
}
|
||||
|
||||
make::hacky_block_expr_with_comments(elements, Some(tail_expr))
|
||||
make::hacky_block_expr(elements, Some(tail_expr))
|
||||
}
|
||||
|
||||
fn format_type(ty: &hir::Type, ctx: &AssistContext<'_>, module: hir::Module) -> String {
|
||||
@ -4978,9 +4979,8 @@ fn $0fun_name() {
|
||||
);
|
||||
}
|
||||
|
||||
// FIXME: we do want to preserve whitespace
|
||||
#[test]
|
||||
fn extract_function_does_not_preserve_whitespace() {
|
||||
fn extract_function_does_preserve_whitespace() {
|
||||
check_assist(
|
||||
extract_function,
|
||||
r#"
|
||||
@ -4999,6 +4999,7 @@ fn func() {
|
||||
|
||||
fn $0fun_name() {
|
||||
let a = 0;
|
||||
|
||||
let x = 0;
|
||||
}
|
||||
"#,
|
||||
|
@ -339,10 +339,10 @@ pub fn tail_only_block_expr(tail_expr: ast::Expr) -> ast::BlockExpr {
|
||||
}
|
||||
|
||||
/// Ideally this function wouldn't exist since it involves manual indenting.
|
||||
/// It differs from `make::block_expr` by also supporting comments.
|
||||
/// It differs from `make::block_expr` by also supporting comments and whitespace.
|
||||
///
|
||||
/// FIXME: replace usages of this with the mutable syntax tree API
|
||||
pub fn hacky_block_expr_with_comments(
|
||||
pub fn hacky_block_expr(
|
||||
elements: impl IntoIterator<Item = crate::SyntaxElement>,
|
||||
tail_expr: Option<ast::Expr>,
|
||||
) -> ast::BlockExpr {
|
||||
@ -350,10 +350,17 @@ pub fn hacky_block_expr_with_comments(
|
||||
for node_or_token in elements.into_iter() {
|
||||
match node_or_token {
|
||||
rowan::NodeOrToken::Node(n) => format_to!(buf, " {n}\n"),
|
||||
rowan::NodeOrToken::Token(t) if t.kind() == SyntaxKind::COMMENT => {
|
||||
format_to!(buf, " {t}\n")
|
||||
rowan::NodeOrToken::Token(t) => {
|
||||
let kind = t.kind();
|
||||
if kind == SyntaxKind::COMMENT {
|
||||
format_to!(buf, " {t}\n")
|
||||
} else if kind == SyntaxKind::WHITESPACE {
|
||||
let content = t.text().trim_matches(|c| c != '\n');
|
||||
if content.len() >= 1 {
|
||||
format_to!(buf, "{}", &content[1..])
|
||||
}
|
||||
}
|
||||
}
|
||||
_ => (),
|
||||
}
|
||||
}
|
||||
if let Some(tail_expr) = tail_expr {
|
||||
|
Loading…
x
Reference in New Issue
Block a user