Skip to content

[WIP] Introduce Structural Pattern Matching (Part1) - #3427

Closed
Snowapril wants to merge 11 commits into
RustPython:mainfrom
Snowapril:pattern-matching
Closed

Snowapril wants to merge 11 commits into
RustPython:mainfrom
Snowapril:pattern-matching

Conversation

@Snowapril

@Snowapril Snowapril commented Nov 8, 2021 •

Copy link
Copy Markdown
Contributor

This revision introduce structural pattern matching from cpython 3.10 which introduced in pep 634, 635, 636.

Simple example

(Syntax highlighting for it on github is not available yet 😂)

# point is an (x, y) tuple
match point:
    case (0, 0):
        print("Origin")
    case (0, y):
        print(f"Y={y}")
    case (x, 0):
        print(f"X={x}")
    case (x, y):
        print(f"X={x}, Y={y}")
    case _:
        raise ValueError("Not a point")

If possible, I want to separate PR to two PRs (syntax, semantic).

Python Documentation

@Snowapril
Snowapril marked this pull request as draft November 8, 2021 05:27
@Snowapril
Snowapril force-pushed the pattern-matching branch 3 times, most recently from 20d9885 to 8ccf1d6 Compare May 3, 2022 14:17
Snowapril added 11 commits May 13, 2022 22:06
Signed-off-by: snowapril <sinjihng@gmail.com>
Signed-off-by: snowapril <sinjihng@gmail.com>
Signed-off-by: snowapril <sinjihng@gmail.com>
Signed-off-by: snowapril <sinjihng@gmail.com>
Signed-off-by: snowapril <sinjihng@gmail.com>
Signed-off-by: snowapril <sinjihng@gmail.com>
Signed-off-by: snowapril <sinjihng@gmail.com>
Signed-off-by: snowapril <sinjihng@gmail.com>
Signed-off-by: snowapril <sinjihng@gmail.com>
Signed-off-by: snowapril <sinjihng@gmail.com>
Signed-off-by: snowapril <sinjihng@gmail.com>
@youknowone

Copy link
Copy Markdown
Member

This is blocker of astral-sh/ruff#282
I think adding an actual match implementation will not be an easy job,
but adding match expr to parser would be enough with this PR.

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants