Added support for const generics in impl generation
This commit is contained in:
parent
4cb3ecce3f
commit
5a2ef8d0ca
@ -69,6 +69,17 @@ fn test_add_impl() {
|
|||||||
"struct Foo<'a, T: Foo<'a>> {$0}",
|
"struct Foo<'a, T: Foo<'a>> {$0}",
|
||||||
"struct Foo<'a, T: Foo<'a>> {}\n\nimpl<'a, T: Foo<'a>> Foo<'a, T> {\n $0\n}",
|
"struct Foo<'a, T: Foo<'a>> {}\n\nimpl<'a, T: Foo<'a>> Foo<'a, T> {\n $0\n}",
|
||||||
);
|
);
|
||||||
|
check_assist(
|
||||||
|
generate_impl,
|
||||||
|
r#"
|
||||||
|
struct MyOwnArray<T, const S: usize> {}$0"#,
|
||||||
|
r#"
|
||||||
|
struct MyOwnArray<T, const S: usize> {}
|
||||||
|
|
||||||
|
impl<T, const S: usize> MyOwnArray<T, S> {
|
||||||
|
$0
|
||||||
|
}"#,
|
||||||
|
);
|
||||||
check_assist(
|
check_assist(
|
||||||
generate_impl,
|
generate_impl,
|
||||||
r#"
|
r#"
|
||||||
@ -114,11 +125,11 @@ impl<T> Defaulted<T> {
|
|||||||
check_assist(
|
check_assist(
|
||||||
generate_impl,
|
generate_impl,
|
||||||
r#"
|
r#"
|
||||||
struct Defaulted<'a, 'b: 'a, T: Debug + Clone + 'a + 'b = String> {}$0"#,
|
struct Defaulted<'a, 'b: 'a, T: Debug + Clone + 'a + 'b = String, const S: usize> {}$0"#,
|
||||||
r#"
|
r#"
|
||||||
struct Defaulted<'a, 'b: 'a, T: Debug + Clone + 'a + 'b = String> {}
|
struct Defaulted<'a, 'b: 'a, T: Debug + Clone + 'a + 'b = String, const S: usize> {}
|
||||||
|
|
||||||
impl<'a, 'b: 'a, T: Debug + Clone + 'a + 'b> Defaulted<'a, 'b, T> {
|
impl<'a, 'b: 'a, T: Debug + Clone + 'a + 'b, const S: usize> Defaulted<'a, 'b, T, S> {
|
||||||
$0
|
$0
|
||||||
}"#,
|
}"#,
|
||||||
);
|
);
|
||||||
|
@ -434,7 +434,8 @@ fn generate_impl_text_inner(adt: &ast::Adt, trait_text: Option<&str>, code: &str
|
|||||||
}
|
}
|
||||||
buf
|
buf
|
||||||
});
|
});
|
||||||
let generics = lifetimes.chain(type_params).format(", ");
|
let const_params = generic_params.const_params().map(|t| t.syntax().to_string());
|
||||||
|
let generics = lifetimes.chain(type_params).chain(const_params).format(", ");
|
||||||
format_to!(buf, "<{}>", generics);
|
format_to!(buf, "<{}>", generics);
|
||||||
}
|
}
|
||||||
buf.push(' ');
|
buf.push(' ');
|
||||||
@ -452,7 +453,11 @@ fn generate_impl_text_inner(adt: &ast::Adt, trait_text: Option<&str>, code: &str
|
|||||||
.type_params()
|
.type_params()
|
||||||
.filter_map(|it| it.name())
|
.filter_map(|it| it.name())
|
||||||
.map(|it| SmolStr::from(it.text()));
|
.map(|it| SmolStr::from(it.text()));
|
||||||
format_to!(buf, "<{}>", lifetime_params.chain(type_params).format(", "))
|
let const_params = generic_params
|
||||||
|
.const_params()
|
||||||
|
.filter_map(|it| it.name())
|
||||||
|
.map(|it| SmolStr::from(it.text()));
|
||||||
|
format_to!(buf, "<{}>", lifetime_params.chain(type_params).chain(const_params).format(", "))
|
||||||
}
|
}
|
||||||
|
|
||||||
match adt.where_clause() {
|
match adt.where_clause() {
|
||||||
|
Loading…
Reference in New Issue
Block a user