Skip to content

python: wildcard case is not default case - #22526

Open
yoff wants to merge 1 commit into
github:mainfrom
yoff:python/wildcard-is-not-default-case
Open

python: wildcard case is not default case#22526
yoff wants to merge 1 commit into
github:mainfrom
yoff:python/wildcard-is-not-default-case

Conversation

@yoff

@yoff yoff commented Sep 8, 2026

Copy link
Copy Markdown
Contributor

A wildcard case (case _:) should not be considered default as the CFG library will then order it last.
Instead it is a matchAll. Revealed by #22510.

Comment thread python/ql/lib/semmle/python/controlflow/internal/AstNodeImpl.qll Fixed
@github-actions github-actions Bot added the Python label Sep 8, 2026
@yoff
yoff force-pushed the python/wildcard-is-not-default-case branch from c7fda0c to 61e01d6 Compare September 10, 2026 17:45
A wildcard case (`case _:`) should not be considered default
as the CFG library will then order it last.
Instead it is a `matchAll`
@yoff
yoff force-pushed the python/wildcard-is-not-default-case branch from 61e01d6 to 495b637 Compare September 10, 2026 19:53
@yoff
yoff marked this pull request as ready for review September 10, 2026 21:25
@yoff
yoff requested a review from a team as a code owner September 10, 2026 21:25
Copilot AI balanced review requested due to automatic review settings September 10, 2026 21:25

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Copilot review overview

🟡 Changes recommended

Regression coverage is needed for a guarded wildcard followed by another case.

Once you've addressed the issues Copilot identified, you can request another Copilot review.

Review tier: Balanced
Findings: 1 Medium severity

New issues introduced by this change (1)
Severity Finding
Medium severity python/​ql/​lib/​semmle/​python/​controlflow/​internal/​AstNodeImpl.qll — Add regression coverage for guarded wildcard ordering
What changed in this PR

Corrects Python wildcard-case CFG ordering by treating case _: as match-all rather than default.

Changes:

  • Makes DefaultCase empty.
  • Classifies wildcard cases through matchAll.
File Description
python/​ql/​lib/​semmle/​python/​controlflow/​internal/​AstNodeImpl.qll Corrects wildcard-case CFG classification.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

/** A wildcard case (`case _:`). */
class DefaultCase extends Case {
DefaultCase() { this.isWildcard() }
DefaultCase() { none() }

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Reclassifying should be caught by the consistency checks. The test code you propose would leave dead code. Still, it is a valid suggestion, perhaps case _ if cond: then case _: would be even better.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants