Merge pull request #1696 from scalexm/unwrap
Unwrap `syn::*::Group` in a few places
This commit is contained in:
commit
542a6124b1
|
@ -4,6 +4,7 @@ use crate::{
|
||||||
attributes::FromPyWithAttribute,
|
attributes::FromPyWithAttribute,
|
||||||
method::{FnArg, FnSpec},
|
method::{FnArg, FnSpec},
|
||||||
pyfunction::Argument,
|
pyfunction::Argument,
|
||||||
|
utils::unwrap_ty_group,
|
||||||
};
|
};
|
||||||
use proc_macro2::{Span, TokenStream};
|
use proc_macro2::{Span, TokenStream};
|
||||||
use quote::{quote, quote_spanned};
|
use quote::{quote, quote_spanned};
|
||||||
|
@ -258,7 +259,7 @@ fn impl_arg_param(
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
return if let syn::Type::Reference(tref) = arg.optional.as_ref().unwrap_or(&ty) {
|
return if let syn::Type::Reference(tref) = unwrap_ty_group(arg.optional.unwrap_or(&ty)) {
|
||||||
let (tref, mut_) = preprocess_tref(tref, self_);
|
let (tref, mut_) = preprocess_tref(tref, self_);
|
||||||
let (target_ty, borrow_tmp) = if arg.optional.is_some() {
|
let (target_ty, borrow_tmp) = if arg.optional.is_some() {
|
||||||
// Get Option<&T> from Option<PyRef<T>>
|
// Get Option<&T> from Option<PyRef<T>>
|
||||||
|
|
|
@ -29,12 +29,8 @@ macro_rules! ensure_spanned {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Check if the given type `ty` is `pyo3::Python`.
|
/// Check if the given type `ty` is `pyo3::Python`.
|
||||||
pub fn is_python(mut ty: &syn::Type) -> bool {
|
pub fn is_python(ty: &syn::Type) -> bool {
|
||||||
while let syn::Type::Group(group) = ty {
|
match unwrap_ty_group(ty) {
|
||||||
// Macros can create invisible delimiters around types.
|
|
||||||
ty = &*group.elem;
|
|
||||||
}
|
|
||||||
match ty {
|
|
||||||
syn::Type::Path(typath) => typath
|
syn::Type::Path(typath) => typath
|
||||||
.path
|
.path
|
||||||
.segments
|
.segments
|
||||||
|
@ -124,3 +120,10 @@ pub fn unwrap_group(mut expr: &syn::Expr) -> &syn::Expr {
|
||||||
}
|
}
|
||||||
expr
|
expr
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn unwrap_ty_group(mut ty: &syn::Type) -> &syn::Type {
|
||||||
|
while let syn::Type::Group(g) = ty {
|
||||||
|
ty = &*g.elem;
|
||||||
|
}
|
||||||
|
ty
|
||||||
|
}
|
||||||
|
|
|
@ -733,7 +733,7 @@ fn test_raw_idents() {
|
||||||
#[pyclass]
|
#[pyclass]
|
||||||
struct Issue1505 {}
|
struct Issue1505 {}
|
||||||
|
|
||||||
macro_rules! issue_1505 {
|
macro_rules! pymethods {
|
||||||
(
|
(
|
||||||
#[pymethods]
|
#[pymethods]
|
||||||
impl $ty: ty {
|
impl $ty: ty {
|
||||||
|
@ -747,7 +747,7 @@ macro_rules! issue_1505 {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
issue_1505!(
|
pymethods!(
|
||||||
#[pymethods]
|
#[pymethods]
|
||||||
impl Issue1505 {
|
impl Issue1505 {
|
||||||
fn issue_1505(&self, _py: Python<'_>) {}
|
fn issue_1505(&self, _py: Python<'_>) {}
|
||||||
|
@ -819,3 +819,13 @@ issue_1506!(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
#[pyclass]
|
||||||
|
struct Issue1696 {}
|
||||||
|
|
||||||
|
pymethods!(
|
||||||
|
#[pymethods]
|
||||||
|
impl Issue1696 {
|
||||||
|
fn issue_1696(&self, _x: &InstanceMethod) {}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
Loading…
Reference in New Issue