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

Method gen_impl_item

crates/derive-impl/src/pyclass.rs:900–1047  ·  view source on GitHub ↗
(&self, args: ImplItemArgs<'_, Item>)

Source from the content-addressed store, hash-verified

898 Item: ItemLike + ToTokens + GetIdent,
899{
900 fn gen_impl_item(&self, args: ImplItemArgs<'_, Item>) -> Result<()> {
901 let func = args
902 .item
903 .function_or_method()
904 .map_err(|_| self.new_syn_error(args.item.span(), "can only be on a method"))?;
905 let ident = &func.sig().ident;
906
907 let item_attr = args.attrs.remove(self.index());
908 let item_meta = MethodItemMeta::from_attr(ident.clone(), &item_attr)?;
909
910 let py_name = item_meta.method_name()?;
911
912 // Disallow slot methods - they should be defined via trait implementations
913 // These are exposed as wrapper_descriptor via add_operators from SLOT_DEFS
914 if !args.context.is_trait {
915 const FORBIDDEN_SLOT_METHODS: &[(&str, &str)] = &[
916 // Constructor/Initializer traits
917 ("__new__", "Constructor"),
918 ("__init__", "Initializer"),
919 // Representable trait
920 ("__repr__", "Representable"),
921 // ("__str__", "???"), // allow __str__
922 // Hashable trait
923 ("__hash__", "Hashable"),
924 // Callable trait
925 ("__call__", "Callable"),
926 // GetAttr/SetAttr traits
927 // NOTE: __getattribute__, __setattr__, __delattr__ are intentionally NOT forbidden
928 // because they need pymethod for subclass override mechanism to work properly.
929 // GetDescriptor/SetDescriptor traits
930 ("__get__", "GetDescriptor"),
931 ("__set__", "SetDescriptor"),
932 ("__delete__", "SetDescriptor"),
933 // AsNumber trait
934 ("__add__", "AsNumber"),
935 ("__radd__", "AsNumber"),
936 ("__iadd__", "AsNumber"),
937 ("__sub__", "AsNumber"),
938 ("__rsub__", "AsNumber"),
939 ("__isub__", "AsNumber"),
940 ("__mul__", "AsNumber"),
941 ("__rmul__", "AsNumber"),
942 ("__imul__", "AsNumber"),
943 ("__truediv__", "AsNumber"),
944 ("__rtruediv__", "AsNumber"),
945 ("__itruediv__", "AsNumber"),
946 ("__floordiv__", "AsNumber"),
947 ("__rfloordiv__", "AsNumber"),
948 ("__ifloordiv__", "AsNumber"),
949 ("__mod__", "AsNumber"),
950 ("__rmod__", "AsNumber"),
951 ("__imod__", "AsNumber"),
952 ("__pow__", "AsNumber"),
953 ("__rpow__", "AsNumber"),
954 ("__ipow__", "AsNumber"),
955 ("__divmod__", "AsNumber"),
956 ("__rdivmod__", "AsNumber"),
957 ("__matmul__", "AsNumber"),

Callers 1

Calls 15

newFunction · 0.85
text_signatureFunction · 0.85
infer_native_call_flagsFunction · 0.85
format_docFunction · 0.85
new_syn_errorMethod · 0.80
spanMethod · 0.80
to_stringMethod · 0.80
starts_withMethod · 0.80
docMethod · 0.80
to_vecMethod · 0.80
getset_nameMethod · 0.80
to_lowercaseMethod · 0.80

Tested by

no test coverage detected