Change tabstop to method tail_expr

This commit is contained in:
A4-Tacks 2025-06-28 15:43:04 +08:00
parent 0b9114fdfc
commit 6b8e927654
No known key found for this signature in database
GPG key ID: 86AC1F526BA06668
2 changed files with 25 additions and 16 deletions

View file

@ -141,8 +141,8 @@ pub(crate) fn generate_trait_impl(acc: &mut Assists, ctx: &AssistContext<'_>) ->
// } // }
// //
// impl Foo for ${1:_} { // impl Foo for ${1:_} {
// $0fn foo(&self) -> i32 { // fn foo(&self) -> i32 {
// todo!() // $0todo!()
// } // }
// } // }
// ``` // ```
@ -206,8 +206,10 @@ pub(crate) fn generate_impl_trait(acc: &mut Assists, ctx: &AssistContext<'_>) ->
edit.add_placeholder_snippet(cap, ty); edit.add_placeholder_snippet(cap, ty);
} }
if let Some(item) = impl_.assoc_item_list().and_then(|it| it.assoc_items().next()) { if let Some(expr) =
edit.add_tabstop_before(cap, item); impl_.assoc_item_list().and_then(|it| it.assoc_items().find_map(extract_expr))
{
edit.add_tabstop_before(cap, expr);
} else if let Some(l_curly) = } else if let Some(l_curly) =
impl_.assoc_item_list().and_then(|it| it.l_curly_token()) impl_.assoc_item_list().and_then(|it| it.l_curly_token())
{ {
@ -220,6 +222,13 @@ pub(crate) fn generate_impl_trait(acc: &mut Assists, ctx: &AssistContext<'_>) ->
) )
} }
fn extract_expr(item: ast::AssocItem) -> Option<ast::Expr> {
let ast::AssocItem::Fn(f) = item else {
return None;
};
f.body()?.tail_expr()
}
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use crate::tests::{check_assist, check_assist_target}; use crate::tests::{check_assist, check_assist_target};
@ -616,8 +625,8 @@ mod tests {
} }
impl Foo for ${1:_} { impl Foo for ${1:_} {
$0fn foo(&self) -> i32 { fn foo(&self) -> i32 {
todo!() $0todo!()
} }
} }
"#, "#,
@ -647,8 +656,8 @@ mod tests {
} }
impl Foo<${1:_}> for ${2:_} { impl Foo<${1:_}> for ${2:_} {
$0fn foo(&self) -> _ { fn foo(&self) -> _ {
todo!() $0todo!()
} }
} }
"#, "#,
@ -674,8 +683,8 @@ mod tests {
} }
impl Foo<${1:_}, ${2:_}> for ${3:_} { impl Foo<${1:_}, ${2:_}> for ${3:_} {
$0fn foo(&self) -> _ { fn foo(&self) -> _ {
todo!() $0todo!()
} }
} }
"#, "#,
@ -709,8 +718,8 @@ mod tests {
} }
impl Foo for ${1:_} { impl Foo for ${1:_} {
$0fn foo(&self) -> i32 { fn foo(&self) -> i32 {
todo!() $0todo!()
} }
} }
"#, "#,
@ -736,10 +745,10 @@ mod tests {
} }
impl Foo for ${1:_} { impl Foo for ${1:_} {
$0type Output; type Output;
fn foo(&self) -> Self::Output { fn foo(&self) -> Self::Output {
todo!() $0todo!()
} }
} }
"#, "#,

View file

@ -1895,8 +1895,8 @@ trait Foo {
} }
impl Foo for ${1:_} { impl Foo for ${1:_} {
$0fn foo(&self) -> i32 { fn foo(&self) -> i32 {
todo!() $0todo!()
} }
} }
"#####, "#####,