MCPcopy Index your code
hub / github.com/RustPython/RustPython / slot_name

Method slot_name

crates/derive-impl/src/pyclass.rs:1648–1685  ·  view source on GitHub ↗
(&self)

Source from the content-addressed store, hash-verified

1646
1647impl SlotItemMeta {
1648 fn slot_name(&self) -> Result<Ident> {
1649 let inner = self.inner();
1650 let method_name = if let Some((_, meta)) = inner.meta_map.get("name") {
1651 match meta {
1652 Meta::Path(path) => path.get_ident().cloned(),
1653 _ => None,
1654 }
1655 } else {
1656 let ident_str = self.inner().item_name();
1657 // Convert to lowercase to handle both SLOT_NEW and slot_new
1658 let ident_lower = ident_str.to_lowercase();
1659 let name = if let Some(stripped) = ident_lower.strip_prefix("slot_") {
1660 proc_macro2::Ident::new(stripped, inner.item_ident.span())
1661 } else {
1662 inner.item_ident.clone()
1663 };
1664 Some(name)
1665 };
1666 let method_name = method_name.ok_or_else(|| {
1667 err_span!(
1668 inner.meta_ident,
1669 "#[pyslot] must be of the form #[pyslot] or #[pyslot(slot_name)]",
1670 )
1671 })?;
1672
1673 // Strip double underscores from slot names like __init__ -> init
1674 let method_name_str = method_name.to_string();
1675 let slot_name = if method_name_str.starts_with("__")
1676 && method_name_str.ends_with("__")
1677 && method_name_str.len() > 4
1678 {
1679 &method_name_str[2..method_name_str.len() - 2]
1680 } else {
1681 &method_name_str
1682 };
1683
1684 Ok(proc_macro2::Ident::new(slot_name, slot_name.span()))
1685 }
1686}
1687
1688struct MemberItemMeta(ItemMetaInner);

Callers 1

gen_impl_itemMethod · 0.45

Calls 14

newFunction · 0.85
item_nameMethod · 0.80
to_lowercaseMethod · 0.80
strip_prefixMethod · 0.80
spanMethod · 0.80
ok_or_elseMethod · 0.80
to_stringMethod · 0.80
starts_withMethod · 0.80
ends_withMethod · 0.80
SomeClass · 0.50
innerMethod · 0.45
getMethod · 0.45

Tested by

no test coverage detected