Skip to content

Commit 9b2d98c

Browse files
committed
rename keyword to constructor
1 parent fd0d8dc commit 9b2d98c

File tree

7 files changed

+33
-19
lines changed

7 files changed

+33
-19
lines changed

pyo3-macros-backend/src/attributes.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ pub mod kw {
1212
syn::custom_keyword!(annotation);
1313
syn::custom_keyword!(attribute);
1414
syn::custom_keyword!(cancel_handle);
15+
syn::custom_keyword!(constructor);
1516
syn::custom_keyword!(dict);
1617
syn::custom_keyword!(extends);
1718
syn::custom_keyword!(freelist);

pyo3-macros-backend/src/pyclass.rs

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ use crate::attributes::{
88
use crate::deprecations::Deprecations;
99
use crate::konst::{ConstAttributes, ConstSpec};
1010
use crate::method::{FnArg, FnSpec, PyArg, RegularArg};
11-
use crate::pyfunction::SignatureAttribute;
11+
use crate::pyfunction::ConstructorAttribute;
1212
use crate::pyimpl::{gen_py_const, PyClassMethodsType};
1313
use crate::pymethod::{
1414
impl_py_getter_def, impl_py_setter_def, MethodAndMethodDef, MethodAndSlotDef, PropertyType,
@@ -623,21 +623,21 @@ struct PyClassEnumVariantNamedField<'a> {
623623
/// `#[pyo3()]` options for pyclass enum variants
624624
struct EnumVariantPyO3Options {
625625
name: Option<NameAttribute>,
626-
signature: Option<SignatureAttribute>,
626+
constructor: Option<ConstructorAttribute>,
627627
}
628628

629629
enum EnumVariantPyO3Option {
630630
Name(NameAttribute),
631-
Signature(SignatureAttribute),
631+
Constructor(ConstructorAttribute),
632632
}
633633

634634
impl Parse for EnumVariantPyO3Option {
635635
fn parse(input: ParseStream<'_>) -> Result<Self> {
636636
let lookahead = input.lookahead1();
637637
if lookahead.peek(attributes::kw::name) {
638638
input.parse().map(EnumVariantPyO3Option::Name)
639-
} else if lookahead.peek(attributes::kw::signature) {
640-
input.parse().map(EnumVariantPyO3Option::Signature)
639+
} else if lookahead.peek(attributes::kw::constructor) {
640+
input.parse().map(EnumVariantPyO3Option::Constructor)
641641
} else {
642642
Err(lookahead.error())
643643
}
@@ -648,7 +648,7 @@ impl EnumVariantPyO3Options {
648648
fn take_pyo3_options(attrs: &mut Vec<syn::Attribute>) -> Result<Self> {
649649
let mut options = EnumVariantPyO3Options {
650650
name: None,
651-
signature: None,
651+
constructor: None,
652652
};
653653

654654
for option in take_pyo3_options(attrs)? {
@@ -660,12 +660,12 @@ impl EnumVariantPyO3Options {
660660
);
661661
options.name = Some(name);
662662
}
663-
EnumVariantPyO3Option::Signature(signature) => {
663+
EnumVariantPyO3Option::Constructor(constructor) => {
664664
ensure_spanned!(
665-
options.signature.is_none(),
666-
signature.span() => "`signature` may only be specified once"
665+
options.constructor.is_none(),
666+
constructor.span() => "`constructor` may only be specified once"
667667
);
668-
options.signature = Some(signature);
668+
options.constructor = Some(constructor);
669669
}
670670
}
671671
}
@@ -706,7 +706,7 @@ fn impl_simple_enum(
706706

707707
let (default_repr, default_repr_slot) = {
708708
let variants_repr = variants.iter().map(|variant| {
709-
ensure_spanned!(variant.options.signature.is_none(), variant.options.signature.span() => "`signature` can't be used on a simple enum variant");
709+
ensure_spanned!(variant.options.constructor.is_none(), variant.options.constructor.span() => "`constructor` can't be used on a simple enum variant");
710710
let variant_name = variant.ident;
711711
// Assuming all variants are unit variants because they are the only type we support.
712712
let repr = format!(
@@ -1179,8 +1179,11 @@ fn complex_enum_struct_variant_new<'a>(
11791179
args
11801180
};
11811181

1182-
let signature = if let Some(signature) = variant.options.signature {
1183-
crate::pyfunction::FunctionSignature::from_arguments_and_attribute(args, signature)?
1182+
let signature = if let Some(constructor) = variant.options.constructor {
1183+
crate::pyfunction::FunctionSignature::from_arguments_and_attribute(
1184+
args,
1185+
constructor.into_signature(),
1186+
)?
11841187
} else {
11851188
crate::pyfunction::FunctionSignature::from_arguments(args)?
11861189
};

pyo3-macros-backend/src/pyfunction.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ use syn::{
1818

1919
mod signature;
2020

21-
pub use self::signature::{FunctionSignature, SignatureAttribute};
21+
pub use self::signature::{ConstructorAttribute, FunctionSignature, SignatureAttribute};
2222

2323
#[derive(Clone, Debug)]
2424
pub struct PyFunctionArgPyO3Attributes {

pyo3-macros-backend/src/pyfunction/signature.rs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,16 @@ impl ToTokens for SignatureItemPosargsSep {
195195
}
196196

197197
pub type SignatureAttribute = KeywordAttribute<kw::signature, Signature>;
198+
pub type ConstructorAttribute = KeywordAttribute<kw::constructor, Signature>;
199+
200+
impl ConstructorAttribute {
201+
pub fn into_signature(self) -> SignatureAttribute {
202+
SignatureAttribute {
203+
kw: kw::signature(self.kw.span),
204+
value: self.value,
205+
}
206+
}
207+
}
198208

199209
#[derive(Default)]
200210
pub struct PythonSignature {

pytests/src/enums.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ pub enum ComplexEnum {
5454
b: f64,
5555
c: bool,
5656
},
57-
#[pyo3(signature = (a = 42, b = None))]
57+
#[pyo3(constructor = (a = 42, b = None))]
5858
VariantWithDefault {
5959
a: i32,
6060
b: Option<String>,

tests/ui/invalid_pyclass_enum.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ enum NoTupleVariants {
2929

3030
#[pyclass]
3131
enum SimpleNoSignature {
32-
#[pyo3(signature = (a, b))]
32+
#[pyo3(constructor = (a, b))]
3333
A,
3434
B,
3535
}

tests/ui/invalid_pyclass_enum.stderr

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,8 @@ error: Tuple variant `TupleVariant` is not yet supported in a complex enum
3232
27 | TupleVariant(i32),
3333
| ^^^^^^^^^^^^
3434

35-
error: `signature` can't be used on a simple enum variant
35+
error: `constructor` can't be used on a simple enum variant
3636
--> tests/ui/invalid_pyclass_enum.rs:32:12
3737
|
38-
32 | #[pyo3(signature = (a, b))]
39-
| ^^^^^^^^^
38+
32 | #[pyo3(constructor = (a, b))]
39+
| ^^^^^^^^^^^

0 commit comments

Comments
 (0)