Skip to content

bpo-42128: Add 'missing :' syntax error message to match statements #24733

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Mar 18, 2021

Conversation

pablogsal
Copy link
Member

@pablogsal pablogsal commented Mar 3, 2021

Copy link
Member

@gvanrossum gvanrossum left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this safe? While match x is invalid, match (x) should be a function call.

@pablogsal
Copy link
Member Author

Is this safe? While match x is invalid, match (x) should be a function call.

Hummmm, that's a good point. if match(x) is by itself this will probably fail. Let me think how can we workaround that

@pablogsal
Copy link
Member Author

I will add also a test for that case

@pablogsal
Copy link
Member Author

Fixed in the last ammend

@brandtbucher
Copy link
Member

brandtbucher commented Mar 3, 2021

For my own understanding... does double-ampersand raise a SyntaxError at that token's location suggesting it if it doesn't exist? That's really nice.

@pablogsal
Copy link
Member Author

For my own understanding... does double-ampersand raise a SyntaxError at that token's location suggesting it if it doesn't exist? That's really nice.

Yeah, is a "forced token" operator. Notice that it also hard-stops the parsing: no other alternative will be considered.

@pablogsal pablogsal requested a review from gvanrossum March 3, 2021 21:30
Copy link
Member

@gvanrossum gvanrossum left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't understand why e.g. match(1) doesn't reach invalid_match_stmt, so I'm still concerned.

@pablogsal
Copy link
Member Author

pablogsal commented Mar 4, 2021

I don't understand why e.g. match(1) doesn't reach invalid_match_stmt, so I'm still concerned.

The invalid_* rules are now only checked in a second pass of the parser if the first one fails. This was done mainly for speed, but allows to introduce these kind of error messages with early failures.

Copy link
Member

@gvanrossum gvanrossum left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ehh! I totally forgot about that!

@brandtbucher
Copy link
Member

brandtbucher commented Mar 4, 2021

Does invalid_match still need to be guarded with CHECK_VERSION?

@pablogsal
Copy link
Member Author

Does invalid_match still need to be guarded with CHECK_VERSION?

Not really because is a syntax error, but it certainly won't hurt.

Copy link
Member

@brandtbucher brandtbucher left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks!

@pablogsal pablogsal merged commit 08fb8ac into python:master Mar 18, 2021
@pablogsal pablogsal deleted the match-colon branch March 18, 2021 01:03
jab added a commit to jab/cpython that referenced this pull request Mar 20, 2021
* master: (129 commits)
  bpo-43452: Micro-optimizations to PyType_Lookup (pythonGH-24804)
  bpo-43517: Fix false positive in detection of circular imports (python#24895)
  bpo-43494: Make some minor changes to lnotab notes (pythonGH-24861)
  Mention that code.co_lnotab is deprecated in what's new for 3.10. (python#24902)
  bpo-43244: Remove symtable.h header file (pythonGH-24910)
  bpo-43466: Add --with-openssl-rpath configure option (pythonGH-24820)
  Fix a typo in c-analyzer (pythonGH-24468)
  bpo-41561: Add workaround for Ubuntu's custom security level (pythonGH-24915)
  bpo-43521: Allow ast.unparse with empty sets and NaN (pythonGH-24897)
  bpo-43244: Remove the PyAST_Validate() function (pythonGH-24911)
  bpo-43541: Fix PyEval_EvalCodeEx() regression (pythonGH-24918)
  bpo-43244: Fix test_peg_generators on Windows (pythonGH-24913)
  bpo-39342: Expose X509_V_FLAG_ALLOW_PROXY_CERTS in ssl module (pythonGH-18011)
  bpo-43244: Fix test_peg_generator for PyAST_Validate() (pythonGH-24912)
  bpo-42128: Add 'missing :' syntax error message to match statements (pythonGH-24733)
  bpo-43244: Add pycore_ast.h header file (pythonGH-24908)
  bpo-43244: Rename pycore_ast.h to pycore_ast_state.h (pythonGH-24907)
  Remove unnecessary imports in the grammar parser (pythonGH-24904)
  bpo-35883: Py_DecodeLocale() escapes invalid Unicode characters (pythonGH-24843)
  Add PEP 626 to what's new in 3.10. (python#24892)
  ...
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants