improve deprecation message on implicit trailing optionals (#4282)

This commit is contained in:
David Hewitt 2024-06-24 14:38:33 +01:00 committed by GitHub
parent 6a0221ba2c
commit 91d8683814
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 18 additions and 8 deletions

View File

@ -61,8 +61,9 @@ pub(crate) fn deprecate_trailing_option_default(spec: &FnSpec<'_>) -> TokenStrea
{ {
use std::fmt::Write; use std::fmt::Write;
let mut deprecation_msg = String::from( let mut deprecation_msg = String::from(
"This function has implicit defaults for the trailing `Option<T>` arguments. \ "this function has implicit defaults for the trailing `Option<T>` arguments \n\
These implicit defaults are being phased out. Add `#[pyo3(signature = (", = note: these implicit defaults are being phased out \n\
= help: add `#[pyo3(signature = (",
); );
spec.signature.arguments.iter().for_each(|arg| { spec.signature.arguments.iter().for_each(|arg| {
match arg { match arg {
@ -84,8 +85,9 @@ pub(crate) fn deprecate_trailing_option_default(spec: &FnSpec<'_>) -> TokenStrea
deprecation_msg.pop(); deprecation_msg.pop();
deprecation_msg.pop(); deprecation_msg.pop();
deprecation_msg deprecation_msg.push_str(
.push_str(")]` to this function to silence this warning and keep the current behavior"); "))]` to this function to silence this warning and keep the current behavior",
);
quote_spanned! { spec.name.span() => quote_spanned! { spec.name.span() =>
#[deprecated(note = #deprecation_msg)] #[deprecated(note = #deprecation_msg)]
#[allow(dead_code)] #[allow(dead_code)]

View File

@ -10,25 +10,33 @@ note: the lint level is defined here
1 | #![deny(deprecated)] 1 | #![deny(deprecated)]
| ^^^^^^^^^^ | ^^^^^^^^^^
error: use of deprecated constant `MyClass::__pymethod_set_set_option__::SIGNATURE`: This function has implicit defaults for the trailing `Option<T>` arguments. These implicit defaults are being phased out. Add `#[pyo3(signature = (_value=None)]` to this function to silence this warning and keep the current behavior error: use of deprecated constant `MyClass::__pymethod_set_set_option__::SIGNATURE`: this function has implicit defaults for the trailing `Option<T>` arguments
= note: these implicit defaults are being phased out
= help: add `#[pyo3(signature = (_value=None))]` to this function to silence this warning and keep the current behavior
--> tests/ui/deprecations.rs:43:8 --> tests/ui/deprecations.rs:43:8
| |
43 | fn set_option(&self, _value: Option<i32>) {} 43 | fn set_option(&self, _value: Option<i32>) {}
| ^^^^^^^^^^ | ^^^^^^^^^^
error: use of deprecated constant `__pyfunction_pyfunction_option_2::SIGNATURE`: This function has implicit defaults for the trailing `Option<T>` arguments. These implicit defaults are being phased out. Add `#[pyo3(signature = (_i, _any=None)]` to this function to silence this warning and keep the current behavior error: use of deprecated constant `__pyfunction_pyfunction_option_2::SIGNATURE`: this function has implicit defaults for the trailing `Option<T>` arguments
= note: these implicit defaults are being phased out
= help: add `#[pyo3(signature = (_i, _any=None))]` to this function to silence this warning and keep the current behavior
--> tests/ui/deprecations.rs:132:4 --> tests/ui/deprecations.rs:132:4
| |
132 | fn pyfunction_option_2(_i: u32, _any: Option<i32>) {} 132 | fn pyfunction_option_2(_i: u32, _any: Option<i32>) {}
| ^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^
error: use of deprecated constant `__pyfunction_pyfunction_option_3::SIGNATURE`: This function has implicit defaults for the trailing `Option<T>` arguments. These implicit defaults are being phased out. Add `#[pyo3(signature = (_i, _any=None, _foo=None)]` to this function to silence this warning and keep the current behavior error: use of deprecated constant `__pyfunction_pyfunction_option_3::SIGNATURE`: this function has implicit defaults for the trailing `Option<T>` arguments
= note: these implicit defaults are being phased out
= help: add `#[pyo3(signature = (_i, _any=None, _foo=None))]` to this function to silence this warning and keep the current behavior
--> tests/ui/deprecations.rs:135:4 --> tests/ui/deprecations.rs:135:4
| |
135 | fn pyfunction_option_3(_i: u32, _any: Option<i32>, _foo: Option<String>) {} 135 | fn pyfunction_option_3(_i: u32, _any: Option<i32>, _foo: Option<String>) {}
| ^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^
error: use of deprecated constant `__pyfunction_pyfunction_option_4::SIGNATURE`: This function has implicit defaults for the trailing `Option<T>` arguments. These implicit defaults are being phased out. Add `#[pyo3(signature = (_i, _any=None, _foo=None)]` to this function to silence this warning and keep the current behavior error: use of deprecated constant `__pyfunction_pyfunction_option_4::SIGNATURE`: this function has implicit defaults for the trailing `Option<T>` arguments
= note: these implicit defaults are being phased out
= help: add `#[pyo3(signature = (_i, _any=None, _foo=None))]` to this function to silence this warning and keep the current behavior
--> tests/ui/deprecations.rs:138:4 --> tests/ui/deprecations.rs:138:4
| |
138 | fn pyfunction_option_4( 138 | fn pyfunction_option_4(