Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions mypy/nativeparse.py
Original file line number Diff line number Diff line change
Expand Up @@ -130,9 +130,9 @@
from mypy.patterns import (
AsPattern,
ClassPattern,
ConcretePattern,
MappingPattern,
OrPattern,
Pattern,
SequencePattern,
SingletonPattern,
StarredPattern,
Expand Down Expand Up @@ -1186,7 +1186,7 @@ def read_call_type(state: State, data: ReadBuffer) -> Type:
return call_arg


def read_pattern(state: State, data: ReadBuffer) -> Pattern:
def read_pattern(state: State, data: ReadBuffer) -> ConcretePattern:
tag = read_tag(data)
if tag == nodes.AS_PATTERN:
has_pattern = read_bool(data)
Expand Down
6 changes: 3 additions & 3 deletions mypy/nodes.py
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@
from mypy.visitor import ExpressionVisitor, NodeVisitor, StatementVisitor

if TYPE_CHECKING:
from mypy.patterns import Pattern
from mypy.patterns import ConcretePattern


@unique
Expand Down Expand Up @@ -2200,14 +2200,14 @@ class MatchStmt(Statement):

subject: Expression
subject_dummy: NameExpr | None
patterns: list[Pattern]
patterns: list[ConcretePattern]
guards: list[Expression | None]
bodies: list[Block]

def __init__(
self,
subject: Expression,
patterns: list[Pattern],
patterns: list[ConcretePattern],
guards: list[Expression | None],
bodies: list[Block],
) -> None:
Expand Down
38 changes: 25 additions & 13 deletions mypy/patterns.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

from __future__ import annotations

from typing import TypeVar
from typing import TypeAlias, TypeVar

from mypy_extensions import trait

Expand Down Expand Up @@ -30,10 +30,10 @@ class AsPattern(Pattern):
# If pattern is None this is a capture pattern. If name and pattern are both none this is a
# wildcard pattern.
# Only name being None should not happen but also won't break anything.
pattern: Pattern | None
pattern: ConcretePattern | None
name: NameExpr | None

def __init__(self, pattern: Pattern | None, name: NameExpr | None) -> None:
def __init__(self, pattern: ConcretePattern | None, name: NameExpr | None) -> None:
super().__init__()
self.pattern = pattern
self.name = name
Expand All @@ -45,9 +45,9 @@ def accept(self, visitor: PatternVisitor[T]) -> T:
class OrPattern(Pattern):
"""The pattern <pattern> | <pattern> | ..."""

patterns: list[Pattern]
patterns: list[ConcretePattern]

def __init__(self, patterns: list[Pattern]) -> None:
def __init__(self, patterns: list[ConcretePattern]) -> None:
super().__init__()
self.patterns = patterns

Expand Down Expand Up @@ -83,9 +83,9 @@ def accept(self, visitor: PatternVisitor[T]) -> T:
class SequencePattern(Pattern):
"""The pattern [<pattern>, ...]"""

patterns: list[Pattern]
patterns: list[ConcretePattern]

def __init__(self, patterns: list[Pattern]) -> None:
def __init__(self, patterns: list[ConcretePattern]) -> None:
super().__init__()
self.patterns = patterns

Expand All @@ -108,11 +108,11 @@ def accept(self, visitor: PatternVisitor[T]) -> T:

class MappingPattern(Pattern):
keys: list[Expression]
values: list[Pattern]
values: list[ConcretePattern]
rest: NameExpr | None

def __init__(
self, keys: list[Expression], values: list[Pattern], rest: NameExpr | None
self, keys: list[Expression], values: list[ConcretePattern], rest: NameExpr | None
) -> None:
super().__init__()
assert len(keys) == len(values)
Expand All @@ -128,16 +128,16 @@ class ClassPattern(Pattern):
"""The pattern Cls(...)"""

class_ref: RefExpr
positionals: list[Pattern]
positionals: list[ConcretePattern]
keyword_keys: list[str]
keyword_values: list[Pattern]
keyword_values: list[ConcretePattern]

def __init__(
self,
class_ref: RefExpr,
positionals: list[Pattern],
positionals: list[ConcretePattern],
keyword_keys: list[str],
keyword_values: list[Pattern],
keyword_values: list[ConcretePattern],
) -> None:
super().__init__()
assert len(keyword_keys) == len(keyword_values)
Expand All @@ -148,3 +148,15 @@ def __init__(

def accept(self, visitor: PatternVisitor[T]) -> T:
return visitor.visit_class_pattern(self)


ConcretePattern: TypeAlias = (
AsPattern
| OrPattern
| ValuePattern
| SingletonPattern
| SequencePattern
| StarredPattern
| MappingPattern
| ClassPattern
)
6 changes: 3 additions & 3 deletions mypy/treetransform.py
Original file line number Diff line number Diff line change
Expand Up @@ -97,9 +97,9 @@
from mypy.patterns import (
AsPattern,
ClassPattern,
ConcretePattern,
MappingPattern,
OrPattern,
Pattern,
SequencePattern,
SingletonPattern,
StarredPattern,
Expand Down Expand Up @@ -735,9 +735,9 @@ def stmt(self, stmt: Statement) -> Statement:
new.set_line(stmt)
return new

def pattern(self, pattern: Pattern) -> Pattern:
def pattern(self, pattern: ConcretePattern) -> ConcretePattern:
new = pattern.accept(self)
assert isinstance(new, Pattern)
assert isinstance(new, ConcretePattern)
new.set_line(pattern)
return new

Expand Down
Loading