classification
Title: Fix some issues with AST node classes
Type: enhancement Stage: resolved
Components: Library (Lib) Versions: Python 3.9
process
Status: closed Resolution: fixed
Dependencies: Superseder:
Assigned To: Nosy List: BTaskaya, serhiy.storchaka
Priority: normal Keywords: patch

Created on 2020-03-18 09:38 by serhiy.storchaka, last changed 2020-03-22 18:35 by serhiy.storchaka. This issue is now closed.

Pull Requests
URL Status Linked Edit
PR 19056 merged serhiy.storchaka, 2020-03-18 09:59
Messages (5)
msg364504 - (view) Author: Serhiy Storchaka (serhiy.storchaka) * (Python committer) Date: 2020-03-18 09:38
The proposed PR fixes some issues related to recent changes in the AST node classes.

1. Re-add removed classes Suite, Param, AugLoad and AugStore. They are not used in Python 3, are not created by the parser and are not accepted by the compiler. Param was used in 2.7, other classes were not used longer time. But some third-party projects (e.g. pyflakes) use them for isinstance checks.

2. Add docstrings for all dummy AST classes (Constant subclasses, Index, ExtTuple and the above four classes). Otherwise they inherited docstrings from the parent class.

3. Add docstrings for all attribute aliases.

4. Set __module__ = "ast" instead of "_ast" for all classes defined in the _ast module. Otherwise the help for the ast module would show only dummy classes, not actual AST node classes. It also makes pickles more compatible between versions.
msg364507 - (view) Author: Batuhan Taskaya (BTaskaya) * (Python committer) Date: 2020-03-18 09:51
> 1. Re-add removed classes Suite, Param, AugLoad and AugStore. They are not used in Python 3, are not created by the parser and are not accepted by the compiler. Param was used in 2.7, other classes were not used longer time. But some third-party projects (e.g. pyflakes) use them for isinstance checks.

I dont think Suite used in anywhere related to CPython, and for others (Param and AugXXXX contexts, which both used in pyflakes) I dont think it is necessary to have them. For most of the part they can just do this

if not PY27:
     class Param(ast.expr_context): pass

and looks like pyflakes already have a PR about this (not this way, but it is common to have version-specific conditions in AST tools).
msg364508 - (view) Author: Serhiy Storchaka (serhiy.storchaka) * (Python committer) Date: 2020-03-18 10:05
Yes, and this what PR 19056 does. It is not difficult, and if we can avoid a breakage, why not do this? We have kept all other deprecated classes, like Num and ExtSlice. In 3.10 we can add runtime warnings, and remove them in some future releases.

We alreade got a benefit of simplifying the compiler. Maintaining dummy classes does not cost much.
msg364510 - (view) Author: Batuhan Taskaya (BTaskaya) * (Python committer) Date: 2020-03-18 10:13
I see, thanks for the explanation.
msg364814 - (view) Author: Serhiy Storchaka (serhiy.storchaka) * (Python committer) Date: 2020-03-22 18:33
New changeset bace59d8b8e38f5c779ff6296ebdc0527f6db14a by Serhiy Storchaka in branch 'master':
bpo-39999: Improve compatibility of the ast module. (GH-19056)
https://github.com/python/cpython/commit/bace59d8b8e38f5c779ff6296ebdc0527f6db14a
History
Date User Action Args
2020-03-22 18:35:56serhiy.storchakasetstatus: open -> closed
resolution: fixed
stage: patch review -> resolved
2020-03-22 18:33:41serhiy.storchakasetmessages: + msg364814
2020-03-18 10:13:08BTaskayasetmessages: + msg364510
2020-03-18 10:05:11serhiy.storchakasetmessages: + msg364508
2020-03-18 09:59:36serhiy.storchakasetkeywords: + patch
stage: patch review
pull_requests: + pull_request18408
2020-03-18 09:51:01BTaskayasetnosy: + BTaskaya
messages: + msg364507
2020-03-18 09:38:50serhiy.storchakacreate