◐ Shell
clean mode source ↗

Fix genericalias parameters by youknowone · Pull Request #5841 · RustPython/RustPython

Warning

Rate limit exceeded

@youknowone has exceeded the limit for the number of commits or files that can be reviewed per hour. Please wait 18 minutes and 5 seconds before requesting another review.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

📥 Commits

Reviewing files that changed from the base of the PR and between af2d36c and bd133fd.

📒 Files selected for processing (5)
  • Lib/_collections_abc.py (3 hunks)
  • Lib/test/test_exception_group.py (1 hunks)
  • Lib/test/test_functools.py (0 hunks)
  • Lib/test/test_typing.py (2 hunks)
  • vm/src/builtins/genericalias.rs (7 hunks)

"""

Walkthrough

This update removes expected failure decorators from several Python test methods, rewrites generic alias parameter handling in Rust to support default parameters and tuple expansion, and adds a new constant for __typing_subst__ in the VM context. The changes align parameter substitution logic with CPython's behavior and improve type parameter management.

Changes

File(s) Change Summary
Lib/test/test_genericalias.py, Removed @unittest.expectedFailure decorators and related comments from test methods.
Lib/test/test_dataclasses.py,
Lib/test/test_types.py,
Lib/test/test_typing.py, Removed @unittest.expectedFailure decorators and related comments from multiple typing-related test methods.
Lib/test/test_functools.py Removed @unittest.expectedFailure decorators and related comments from singledispatch generic alias registration tests.
vm/src/builtins/genericalias.rs Removed is_typevar; rewrote make_parameters; changed tuple_index to accept slices; updated subs_tvars and subs_parameters to handle default parameters, tuple expansion, and __typing_subst__ substitution.
vm/src/vm/context.rs Added __typing_subst__ constant to the ConstName struct.
vm/src/protocol/object.rs Added doc comment clarifying accepted types for get_attr parameter.
vm/src/stdlib/typing.rs Added Iterable implementation for TypeVarTuple; introduced helper to call typing module functions; modified Generic class methods to delegate to typing module functions.

Sequence Diagram(s)

sequenceDiagram
    participant PythonTest as Python Test
    participant RustVM as Rust VM (genericalias.rs)
    participant Context as VM Context

    PythonTest->>RustVM: Substitute generic alias parameters
    RustVM->>RustVM: Check for __typing_subst__ attribute
    alt Has __typing_subst__
        RustVM->>RustVM: Call __typing_subst__ on argument
    else No __typing_subst__
        RustVM->>RustVM: Use subs_tvars (with tuple expansion if needed)
    end
    RustVM->>Context: Access __typing_subst__ constant
    RustVM-->>PythonTest: Return substituted parameters tuple
Loading

Suggested reviewers

  • arihant2math

Poem

In fields of types where tuples grow,
A rabbit hops with code in tow.
No more failures marked in test,
Default params now handled best.
With __typing_subst__ in the mix,
Rust and Python’s types now click.
🐇✨
"""

✨ Finishing Touches
  • 📝 Generate Docstrings

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
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Explain this complex logic.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai explain this code block.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and explain its main purpose.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.