Skip to content

Commit 177bfb7

Browse files
authored
Remove deleter attribute from pygetset (#5984)
1 parent 5309e8c commit 177bfb7

File tree

1 file changed

+26
-45
lines changed

1 file changed

+26
-45
lines changed

derive-impl/src/pyclass.rs

Lines changed: 26 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1032,14 +1032,13 @@ impl ToTokens for MethodNursery {
10321032
#[derive(Default)]
10331033
#[allow(clippy::type_complexity)]
10341034
struct GetSetNursery {
1035-
map: HashMap<(String, Vec<Attribute>), (Option<Ident>, Option<Ident>, Option<Ident>)>,
1035+
map: HashMap<(String, Vec<Attribute>), (Option<Ident>, Option<Ident>)>,
10361036
validated: bool,
10371037
}
10381038

10391039
enum GetSetItemKind {
10401040
Get,
10411041
Set,
1042-
Delete,
10431042
}
10441043

10451044
impl GetSetNursery {
@@ -1058,7 +1057,6 @@ impl GetSetNursery {
10581057
let func = match kind {
10591058
GetSetItemKind::Get => &mut entry.0,
10601059
GetSetItemKind::Set => &mut entry.1,
1061-
GetSetItemKind::Delete => &mut entry.2,
10621060
};
10631061
if func.is_some() {
10641062
bail_span!(
@@ -1073,10 +1071,10 @@ impl GetSetNursery {
10731071

10741072
fn validate(&mut self) -> Result<()> {
10751073
let mut errors = Vec::new();
1076-
for ((name, _cfgs), (getter, setter, deleter)) in &self.map {
1074+
for ((name, _cfgs), (getter, setter)) in &self.map {
10771075
if getter.is_none() {
10781076
errors.push(err_span!(
1079-
setter.as_ref().or(deleter.as_ref()).unwrap(),
1077+
setter.as_ref().unwrap(),
10801078
"GetSet '{}' is missing a getter",
10811079
name
10821080
));
@@ -1091,33 +1089,24 @@ impl GetSetNursery {
10911089
impl ToTokens for GetSetNursery {
10921090
fn to_tokens(&self, tokens: &mut TokenStream) {
10931091
assert!(self.validated, "Call `validate()` before token generation");
1094-
let properties = self
1095-
.map
1096-
.iter()
1097-
.map(|((name, cfgs), (getter, setter, deleter))| {
1098-
let setter = match setter {
1099-
Some(setter) => quote_spanned! { setter.span() => .with_set(Self::#setter)},
1100-
None => quote! {},
1101-
};
1102-
let deleter = match deleter {
1103-
Some(deleter) => {
1104-
quote_spanned! { deleter.span() => .with_delete(Self::#deleter)}
1105-
}
1106-
None => quote! {},
1107-
};
1108-
quote_spanned! { getter.span() =>
1109-
#( #cfgs )*
1110-
class.set_str_attr(
1111-
#name,
1112-
::rustpython_vm::PyRef::new_ref(
1113-
::rustpython_vm::builtins::PyGetSet::new(#name.into(), class)
1114-
.with_get(Self::#getter)
1115-
#setter #deleter,
1116-
ctx.types.getset_type.to_owned(), None),
1117-
ctx
1118-
);
1119-
}
1120-
});
1092+
let properties = self.map.iter().map(|((name, cfgs), (getter, setter))| {
1093+
let setter = match setter {
1094+
Some(setter) => quote_spanned! { setter.span() => .with_set(Self::#setter)},
1095+
None => quote! {},
1096+
};
1097+
quote_spanned! { getter.span() =>
1098+
#( #cfgs )*
1099+
class.set_str_attr(
1100+
#name,
1101+
::rustpython_vm::PyRef::new_ref(
1102+
::rustpython_vm::builtins::PyGetSet::new(#name.into(), class)
1103+
.with_get(Self::#getter)
1104+
#setter,
1105+
ctx.types.getset_type.to_owned(), None),
1106+
ctx
1107+
);
1108+
}
1109+
});
11211110
tokens.extend(properties);
11221111
}
11231112
}
@@ -1242,7 +1231,7 @@ impl MethodItemMeta {
12421231
struct GetSetItemMeta(ItemMetaInner);
12431232

12441233
impl ItemMeta for GetSetItemMeta {
1245-
const ALLOWED_NAMES: &'static [&'static str] = &["name", "setter", "deleter"];
1234+
const ALLOWED_NAMES: &'static [&'static str] = &["name", "setter"];
12461235

12471236
fn from_inner(inner: ItemMetaInner) -> Self {
12481237
Self(inner)
@@ -1256,17 +1245,10 @@ impl ItemMeta for GetSetItemMeta {
12561245
impl GetSetItemMeta {
12571246
fn getset_name(&self) -> Result<(String, GetSetItemKind)> {
12581247
let inner = self.inner();
1259-
let kind = match (inner._bool("setter")?, inner._bool("deleter")?) {
1260-
(false, false) => GetSetItemKind::Get,
1261-
(true, false) => GetSetItemKind::Set,
1262-
(false, true) => GetSetItemKind::Delete,
1263-
(true, true) => {
1264-
bail_span!(
1265-
&inner.meta_ident,
1266-
"can't have both setter and deleter on a #[{}] fn",
1267-
inner.meta_name()
1268-
)
1269-
}
1248+
let kind = if inner._bool("setter")? {
1249+
GetSetItemKind::Set
1250+
} else {
1251+
GetSetItemKind::Get
12701252
};
12711253
let name = inner._optional_str("name")?;
12721254
let py_name = if let Some(name) = name {
@@ -1299,7 +1281,6 @@ impl GetSetItemMeta {
12991281
match kind {
13001282
GetSetItemKind::Get => sig_name,
13011283
GetSetItemKind::Set => extract_prefix_name("set_", "setter")?,
1302-
GetSetItemKind::Delete => extract_prefix_name("del_", "deleter")?,
13031284
}
13041285
};
13051286
Ok((py_name, kind))

0 commit comments

Comments
 (0)