// }
//
// impl Trait<u32> for () {
-// $0fn foo(&self) -> u32 {
-// todo!()
+// fn foo(&self) -> u32 {
+// ${0:todo!()}
// }
//
// }
let original_range = impl_item_list.syntax().text_range();
match ctx.config.snippet_cap {
None => builder.replace(original_range, new_impl_item_list.to_string()),
- Some(cap) => builder.replace_snippet(
- cap,
- original_range,
- render_snippet(
+ Some(cap) => {
+ let mut cursor = Cursor::Before(first_new_item.syntax());
+ let placeholder;
+ if let ast::AssocItem::FnDef(func) = &first_new_item {
+ if let Some(m) = func.syntax().descendants().find_map(ast::MacroCall::cast) {
+ if m.syntax().text() == "todo!()" {
+ placeholder = m;
+ cursor = Cursor::Replace(placeholder.syntax());
+ }
+ }
+ }
+ builder.replace_snippet(
cap,
- new_impl_item_list.syntax(),
- Cursor::Before(first_new_item.syntax()),
- ),
- ),
+ original_range,
+ render_snippet(cap, new_impl_item_list.syntax(), cursor),
+ )
+ }
};
})
}
impl Foo for S {
fn bar(&self) {}
- $0fn foo(&self) {
- todo!()
+ fn foo(&self) {
+ ${0:todo!()}
}
}"#,
trait Foo { fn foo(&self); }
struct S;
impl Foo for S {
- $0fn foo(&self) {
- todo!()
+ fn foo(&self) {
+ ${0:todo!()}
}
}"#,
);
trait Foo<T> { fn foo(&self, t: T) -> &T; }
struct S;
impl Foo<u32> for S {
- $0fn foo(&self, t: u32) -> &u32 {
- todo!()
+ fn foo(&self, t: u32) -> &u32 {
+ ${0:todo!()}
}
}"#,
);
trait Foo<T> { fn foo(&self, t: T) -> &T; }
struct S;
impl<U> Foo<U> for S {
- $0fn foo(&self, t: U) -> &U {
- todo!()
+ fn foo(&self, t: U) -> &U {
+ ${0:todo!()}
}
}"#,
);
trait Foo { fn foo(&self); }
struct S;
impl Foo for S {
- $0fn foo(&self) {
- todo!()
+ fn foo(&self) {
+ ${0:todo!()}
}
}"#,
)
}
struct S;
impl foo::Foo for S {
- $0fn foo(&self, bar: foo::Bar) {
- todo!()
+ fn foo(&self, bar: foo::Bar) {
+ ${0:todo!()}
}
}"#,
);
}
struct S;
impl foo::Foo for S {
- $0fn foo(&self, bar: foo::Bar<u32>) {
- todo!()
+ fn foo(&self, bar: foo::Bar<u32>) {
+ ${0:todo!()}
}
}"#,
);
}
struct S;
impl foo::Foo<u32> for S {
- $0fn foo(&self, bar: foo::Bar<u32>) {
- todo!()
+ fn foo(&self, bar: foo::Bar<u32>) {
+ ${0:todo!()}
}
}"#,
);
struct Param;
struct S;
impl foo::Foo<Param> for S {
- $0fn foo(&self, bar: Param) {
- todo!()
+ fn foo(&self, bar: Param) {
+ ${0:todo!()}
}
}"#,
);
}
struct S;
impl foo::Foo for S {
- $0fn foo(&self, bar: foo::Bar<u32>::Assoc) {
- todo!()
+ fn foo(&self, bar: foo::Bar<u32>::Assoc) {
+ ${0:todo!()}
}
}"#,
);
}
struct S;
impl foo::Foo for S {
- $0fn foo(&self, bar: foo::Bar<foo::Baz>) {
- todo!()
+ fn foo(&self, bar: foo::Bar<foo::Baz>) {
+ ${0:todo!()}
}
}"#,
);
}
struct S;
impl foo::Foo for S {
- $0fn foo(&self, bar: dyn Fn(u32) -> i32) {
- todo!()
+ fn foo(&self, bar: dyn Fn(u32) -> i32) {
+ ${0:todo!()}
}
}"#,
);
struct S;
impl Foo for S {
- $0fn bar(&self, other: &Self) {
- todo!()
+ fn bar(&self, other: &Self) {
+ ${0:todo!()}
}
}"#,
)
struct S<T>;
impl Foo<T> for S<T> {
- $0fn bar(&self, this: &T, that: &Self) {
- todo!()
+ fn bar(&self, this: &T, that: &Self) {
+ ${0:todo!()}
}
}"#,
)