Skip to content

Fix staticmethod and classmethod repr error propagation - #8371

Merged
youknowone merged 1 commit into
RustPython:mainfrom
YangSiJun528:fix-method-wrapper-repr-errors
Jul 26, 2026
Merged

youknowone merged 1 commit into
RustPython:mainfrom
YangSiJun528:fix-method-wrapper-repr-errors

Conversation

@YangSiJun528

@YangSiJun528 YangSiJun528 commented Jul 25, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Propagate exceptions from the repr() implementations of staticmethod and classmethod.
  • Add regression tests for both descriptor types.

staticmethod and classmethod used repr(vm).unwrap() in their repr_str() implementations, which turned exceptions raised by the wrapped object's __repr__() into Rust panics.

Since repr_str() already returns PyResult<String>, this change uses ? to propagate the original Python exception unchanged, matching CPython's behavior.

Testing

  • cargo run -- extra_tests/snippets/syntax_class.py

Regression tests were added for both descriptor types.
Before this change, both test cases triggered a Rust panic when the wrapped object's __repr__() raised an exception.

AI assistance

Codex (GPT-5.6 Sol) was used to investigate and implement this change.
I reviewed and validated all AI-assisted work.

Summary by CodeRabbit

  • Bug Fixes

    • Improved error handling when displaying staticmethod and classmethod objects.
    • Representation errors now propagate correctly instead of causing an unexpected application failure.
  • Tests

    • Added coverage confirming that errors raised while representing wrapped callbacks are reported correctly.

Assisted-by: Codex:gpt-5.6-sol
@coderabbitai

coderabbitai Bot commented Jul 25, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yml

Review profile: CHILL

Plan: Pro Plus

Run ID: 2189c7b4-ad06-4315-916d-de99d4dc20b6

📥 Commits

Reviewing files that changed from the base of the PR and between 003ebec and b9b219d.

📒 Files selected for processing (3)
  • crates/vm/src/builtins/classmethod.rs
  • crates/vm/src/builtins/staticmethod.rs
  • extra_tests/snippets/syntax_class.py

📝 Walkthrough

Walkthrough

Changes

Representation error propagation

Layer / File(s) Summary
Descriptor repr error handling
crates/vm/src/builtins/classmethod.rs, crates/vm/src/builtins/staticmethod.rs, extra_tests/snippets/syntax_class.py
classmethod and staticmethod now propagate callable repr failures instead of unwrapping and panicking; tests verify both raise the stored RuntimeError.

Estimated code review effort: 2 (Simple) | ~10 minutes

Suggested reviewers: shaharnaveh

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly matches the main change: fixing repr error propagation for staticmethod and classmethod.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@moreal moreal added the z-ca-2026 Tag to track Contribution Academy 2026 label Jul 25, 2026

@youknowone youknowone left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for working on it 👍 looks good!

@youknowone
youknowone merged commit 92fe3fd into RustPython:main Jul 26, 2026
26 checks passed
youknowone pushed a commit that referenced this pull request Sep 16, 2026
Assisted-by: Codex:gpt-5.6-sol
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

z-ca-2026 Tag to track Contribution Academy 2026

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants