Nick Coghlan <ncogh...@gmail.com> added the comment:

https://github.com/ncoghlan/cpython/pull/9/commits/54940a3817df3046da3f9c51d4d426a73b2ec786
 implements Brandt's suggestion of disallowing NULL keys in MatchMapping and 
instead passing in an explicit "rest" identifier to capture the extra keys.

This did require moving to a multi-branch pattern definition in the grammar, 
similar to class patterns, in order to enforce the separating comma when both 
ordinary key:pattern pairs and a double-star target are present. I think it's a 
nice ergonomic improvement on the AST node itself though, as it makes it 
trivial to check if a mapping patterns captures extra keys or not (vs the 
relatively non-obvious check to see if the last key is NULL/None).

That just leaves updating the unparser to handle the new node types.

Capturing the latest node definitions from the draft PR:

    pattern = MatchAlways
         | MatchValue(expr value)
         | MatchSingleton(constant value)
         | MatchSequence(pattern* patterns)
         | MatchMapping(expr* keys, pattern* patterns, identifier? rest)
         | MatchClass(expr cls, pattern* patterns, identifier* kwd_attrs, 
pattern* kwd_patterns)

         | MatchStar(identifier? target)
         -- The optional "rest" MatchMapping parameter handles capturing extra 
mapping keys

         | MatchAs(pattern? pattern, identifier target)
         | MatchOr(pattern* patterns)
          attributes (int lineno, int col_offset, int end_lineno, int 
end_col_offset)

----------

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue43892>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to