Skip to content

Commit d94972c

Browse files
committed
more
1 parent 4f29fc8 commit d94972c

1 file changed

Lines changed: 73 additions & 0 deletions

File tree

test-data/unit/check-python310.test

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3238,3 +3238,76 @@ match config:
32383238
case {"a": 1, **rest}: # E: Incompatible types in capture pattern (pattern captures type "dict[str, object]", variable has type "list[int]")
32393239
...
32403240
[builtins fixtures/dict.pyi]
3241+
3242+
[case testMatchTypeNarrowing]
3243+
# flags: --warn-unreachable
3244+
import builtins
3245+
import typing
3246+
import types
3247+
3248+
def type_bare(field_type: type) -> str:
3249+
match field_type:
3250+
case builtins.int:
3251+
reveal_type(field_type) # N: Revealed type is "def () -> builtins.int"
3252+
ret = "foo"
3253+
case builtins.str:
3254+
reveal_type(field_type) # N: Revealed type is "def () -> builtins.str"
3255+
ret = "foo"
3256+
case builtins.bytes:
3257+
reveal_type(field_type) # N: Revealed type is "def () -> builtins.bytes"
3258+
ret = "foo"
3259+
case builtins.bool:
3260+
reveal_type(field_type) # N: Revealed type is "def () -> builtins.bool"
3261+
ret = "foo"
3262+
case types.NoneType:
3263+
reveal_type(field_type) # N: Revealed type is "type[None]"
3264+
ret = "foo"
3265+
case _:
3266+
reveal_type(field_type) # N: Revealed type is "builtins.type"
3267+
return "bar"
3268+
return ret
3269+
3270+
def type_any(field_type: type[typing.Any]) -> str:
3271+
match field_type:
3272+
case builtins.int:
3273+
reveal_type(field_type) # N: Revealed type is "type[Any]"
3274+
ret = "foo"
3275+
case builtins.str:
3276+
reveal_type(field_type) # N: Revealed type is "type[Any]"
3277+
ret = "foo"
3278+
case builtins.bytes:
3279+
reveal_type(field_type) # N: Revealed type is "type[Any]"
3280+
ret = "foo"
3281+
case builtins.bool:
3282+
reveal_type(field_type) # N: Revealed type is "type[Any]"
3283+
ret = "foo"
3284+
case types.NoneType:
3285+
reveal_type(field_type) # N: Revealed type is "type[None]"
3286+
ret = "foo"
3287+
case _:
3288+
reveal_type(field_type) # N: Revealed type is "type[Any]"
3289+
return "bar"
3290+
return ret
3291+
3292+
def type_object(field_type: type[object]) -> str:
3293+
match field_type:
3294+
case builtins.int:
3295+
reveal_type(field_type) # N: Revealed type is "def () -> builtins.int"
3296+
ret = "foo"
3297+
case builtins.str:
3298+
reveal_type(field_type) # N: Revealed type is "def () -> builtins.str"
3299+
ret = "foo"
3300+
case builtins.bytes:
3301+
reveal_type(field_type) # N: Revealed type is "def () -> builtins.bytes"
3302+
ret = "foo"
3303+
case builtins.bool:
3304+
reveal_type(field_type) # N: Revealed type is "def () -> builtins.bool"
3305+
ret = "foo"
3306+
case types.NoneType:
3307+
reveal_type(field_type) # N: Revealed type is "type[None]"
3308+
ret = "foo"
3309+
case _:
3310+
reveal_type(field_type) # N: Revealed type is "type[builtins.object]"
3311+
return "bar"
3312+
return ret
3313+
[builtins fixtures/dict.pyi]

0 commit comments

Comments
 (0)