diff --git a/grammars/MagicPython.cson b/grammars/MagicPython.cson
index afb32a6d..d837d6a3 100644
--- a/grammars/MagicPython.cson
+++ b/grammars/MagicPython.cson
@@ -308,6 +308,18 @@ repository:
name: "storage.type.class.python"
match: "\\b(?match
\b(?<!\.)(class)\b
+
+ match
+ (?x)
+ ^\s*(
+ case | match
+ )(?=\s*([-+\w\d(\[{'":#]|$))\b
+
+ captures
+
+ 1
+
+ name
+ keyword.control.flow.python
+
+
+
expression-bare
@@ -2852,14 +2868,14 @@ correctly identify the "in" as a control flow keyword.
match
(?x)
(?<!\.) \b(
- __import__ | abs | all | any | ascii | bin | breakpoint | callable
- | chr | compile | copyright | credits | delattr | dir | divmod
- | enumerate | eval | exec | exit | filter | format | getattr
- | globals | hasattr | hash | help | hex | id | input
- | isinstance | issubclass | iter | len | license | locals | map
- | max | memoryview | min | next | oct | open | ord | pow | print
- | quit | range | reload | repr | reversed | round
- | setattr | sorted | sum | vars | zip
+ __import__ | abs | aiter | all | any | anext | ascii | bin
+ | breakpoint | callable | chr | compile | copyright | credits
+ | delattr | dir | divmod | enumerate | eval | exec | exit
+ | filter | format | getattr | globals | hasattr | hash | help
+ | hex | id | input | isinstance | issubclass | iter | len
+ | license | locals | map | max | memoryview | min | next
+ | oct | open | ord | pow | print | quit | range | reload | repr
+ | reversed | round | setattr | sorted | sum | vars | zip
)\b
@@ -2904,24 +2920,29 @@ indirectly through syntactic constructs
(?x)
\b(
__(?:
- abs | add | aenter | aexit | aiter | and | anext | await
- | bool | call | ceil | cmp | coerce | complex | contains
- | copy | deepcopy | del | delattr | delete | delitem
- | delslice | dir | div | divmod | enter | eq | exit | float
- | floor | floordiv | format | ge | get | getattr
- | getattribute | getinitargs | getitem | getnewargs
- | getslice | getstate | gt | hash | hex | iadd | iand | idiv
- | ifloordiv | ilshift | imod | imul | index | init
- | instancecheck | int | invert | ior | ipow | irshift | isub
- | iter | itruediv | ixor | le | len | long | lshift | lt
- | missing | mod | mul | ne | neg | new | next | nonzero | oct | or
- | pos | pow | radd | rand | rdiv | rdivmod | reduce
- | reduce_ex | repr | reversed | rfloordiv | rlshift | rmod
- | rmul | ror | round | rpow | rrshift | rshift | rsub
- | rtruediv | rxor | set | setattr | setitem | setslice
- | setstate | sizeof | str | sub | subclasscheck | truediv
- | trunc | unicode | xor | matmul | rmatmul | imatmul
- | init_subclass | set_name | fspath | bytes | prepare
+ abs | add | aenter | aexit | aiter | and | anext
+ | await | bool | call | ceil | class_getitem
+ | cmp | coerce | complex | contains | copy
+ | deepcopy | del | delattr | delete | delitem
+ | delslice | dir | div | divmod | enter | eq
+ | exit | float | floor | floordiv | format | ge
+ | get | getattr | getattribute | getinitargs
+ | getitem | getnewargs | getslice | getstate | gt
+ | hash | hex | iadd | iand | idiv | ifloordiv |
+ | ilshift | imod | imul | index | init
+ | instancecheck | int | invert | ior | ipow
+ | irshift | isub | iter | itruediv | ixor | le
+ | len | long | lshift | lt | missing | mod | mul
+ | ne | neg | new | next | nonzero | oct | or | pos
+ | pow | radd | rand | rdiv | rdivmod | reduce
+ | reduce_ex | repr | reversed | rfloordiv |
+ | rlshift | rmod | rmul | ror | round | rpow
+ | rrshift | rshift | rsub | rtruediv | rxor | set
+ | setattr | setitem | set_name | setslice
+ | setstate | sizeof | str | sub | subclasscheck
+ | truediv | trunc | unicode | xor | matmul
+ | rmatmul | imatmul | init_subclass | set_name
+ | fspath | bytes | prepare | length_hint
)__
)\b
@@ -2942,12 +2963,12 @@ indirectly through syntactic constructs
(?x)
\b(
__(?:
- all | bases | builtins | class | class_getitem | code | debug
- | defaults | dict | doc | file | func | kwdefaults | members
- | metaclass | methods | module | mro | mro_entries | name
- | qualname | post_init | self | signature | slots | subclasses
- | version | weakref | wrapped | annotations | classcell
- | spec | path | package | future | traceback
+ all | annotations | bases | builtins | class
+ | closure | code | debug | defaults | dict | doc | file | func
+ | globals | kwdefaults | match_args | members | metaclass | methods
+ | module | mro | mro_entries | name | qualname | post_init | self
+ | signature | slots | subclasses | version | weakref | wrapped
+ | classcell | spec | path | package | future | traceback
)__
)\b
diff --git a/grammars/src/MagicPython.syntax.yaml b/grammars/src/MagicPython.syntax.yaml
index bd740829..ebfccdaf 100644
--- a/grammars/src/MagicPython.syntax.yaml
+++ b/grammars/src/MagicPython.syntax.yaml
@@ -313,6 +313,13 @@ repository:
)\b
- name: storage.type.class.python
match: \b(?