Merge pull request #1505 from scalexm/macro

Ignore `syn::Type::Group` in `is_python`
This commit is contained in:
David Hewitt 2021-03-20 11:09:04 +00:00 committed by GitHub
commit 246335bee2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 32 additions and 1 deletions

View File

@ -45,6 +45,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
- Fix incorrect `TypeError` raised when keyword-only argument passed along with a positional argument in `*args`. [#1440](https://github.com/PyO3/pyo3/pull/1440)
- Fix inability to use a named lifetime for `&PyTuple` of `*args` in `#[pyfunction]`. [#1440](https://github.com/PyO3/pyo3/pull/1440)
- Fix inability to add `#[text_signature]` to some `#[pyproto]` methods. [#1483](https://github.com/PyO3/pyo3/pull/1483)
- Fix use of Python argument for #[pymethods] inside macro expansions. [#1505](https://github.com/PyO3/pyo3/pull/1505)
## [0.13.2] - 2021-02-12
### Packaging

View File

@ -27,7 +27,11 @@ macro_rules! ensure_spanned {
}
/// Check if the given type `ty` is `pyo3::Python`.
pub fn is_python(ty: &syn::Type) -> bool {
pub fn is_python(mut ty: &syn::Type) -> bool {
while let syn::Type::Group(group) = ty {
// Macros can create invisible delimiters around types.
ty = &*group.elem;
}
match ty {
syn::Type::Path(typath) => typath
.path

View File

@ -727,3 +727,29 @@ fn test_raw_idents() {
);
})
}
// Regression test for issue 1505 - Python argument not detected correctly when inside a macro.
#[pyclass]
struct Issue1505 {}
macro_rules! issue_1505 {
(
#[pymethods]
impl $ty: ty {
fn $fn:ident (&self, $arg:ident : $arg_ty:ty) {}
}
) => {
#[pymethods]
impl $ty {
fn $fn(&self, $arg: $arg_ty) {}
}
};
}
issue_1505!(
#[pymethods]
impl Issue1505 {
fn issue_1505(&self, _py: Python<'_>) {}
}
);