Uh oh!
There was an error while loading. Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork 34k
gh-90953: Emit deprecation warnings for deprecated ast features#31432
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
gh-90953: Emit deprecation warnings for deprecated ast features #31432
Uh oh!
There was an error while loading. Please reload this page.
Conversation
serhiy-storchaka commented Feb 19, 2022 • edited by bedevere-bot
Loading Uh oh!
There was an error while loading. Please reload this page.
edited by bedevere-bot
Uh oh!
There was an error while loading. Please reload this page.
AlexWaygood commented Feb 19, 2022 • edited
Loading Uh oh!
There was an error while loading. Please reload this page.
edited
Uh oh!
There was an error while loading. Please reload this page.
Could we hold off doing this until 3.7 is EOL? It is quite hard to write version-compatible code otherwise, at least if you want to avoid deprecation warnings. (I'm speaking as a maintainer of https://github.com/PyCQA/flake8-pyi, which makes heavy use of the |
serhiy-storchaka commented Feb 19, 2022
Yes, this is my intention. |
serhiy-storchaka commented Jun 1, 2022
3.7 will be EOL at 2023-06, before the release of 3.12. I think this PR can already be merged in 3.12. Or wait for 3.13? |
AlexWaygood commented Jun 1, 2022 • edited
Loading Uh oh!
There was an error while loading. Please reload this page.
edited
Uh oh!
There was an error while loading. Please reload this page.
|
This comment was marked as outdated.
This comment was marked as outdated.
serhiy-storchaka commented Dec 7, 2022
Well, I am going to merge it. Note, that it does not remove previously deprecated feature. It only adds runtime warnings for already long deprecated (3 or more releases ago) features. It is much much more smoother than standard practice of adding runtime warnings at the moment of deprecation. |
AlexWaygood commented Dec 7, 2022 • edited
Loading Uh oh!
There was an error while loading. Please reload this page.
edited
Uh oh!
There was an error while loading. Please reload this page.
I support merging this before 3.12 is released, but I would still leave the deprecation warning for |
hugovk commented May 4, 2023 • edited
Loading Uh oh!
There was an error while loading. Please reload this page.
edited
Uh oh!
There was an error while loading. Please reload this page.
(Merge conflict resolved) There's about a week until the 3.12 cutoff. I think it's okay to include ❯ python3 ~/github/misc/cpython/search_pypi_top.py -q ."ast.*ExtSlice"./pyre-check-nightly-0.0.101680433836.tar.gz: pyre-check-nightly-0.0.101680433836/typeshed/stubs/pyflakes/pyflakes/checker.pyi: def EXTSLICE(self, tree: ast.ExtSlice, omit: _OmitType = ...) -> None: ..../reportlab-3.6.12.tar.gz: reportlab-3.6.12/src/reportlab/lib/rl_safe_eval.py: elif isinstance(slice_, ast.ExtSlice):./typed_ast-1.5.4.tar.gz: typed_ast-1.5.4/ast27/Python/Python-ast.c: value = ast2obj_list(o->v.ExtSlice.dims, ast2obj_slice);./typed_ast-1.5.4.tar.gz: typed_ast-1.5.4/ast3/Python/Python-ast.c: value = ast2obj_list(o->v.ExtSlice.dims, ast2obj_slice);./mypy-1.1.1.tar.gz: mypy-1.1.1/mypy/fastparse.py: is_py38_or_earlier and isinstance(n.slice, ast3.ExtSlice)./mypy-1.1.1.tar.gz: mypy-1.1.1/mypy/fastparse.py: def visit_ExtSlice(self, n: ast3.ExtSlice) -> TupleExpr:./mypy-1.1.1.tar.gz: mypy-1.1.1/mypy/fastparse.py: assert isinstance(n.slice, ast3.ExtSlice)./pure_eval-0.2.2.tar.gz: pure_eval-0.2.2/pure_eval/core.py: elif isinstance(index, ast.ExtSlice):./gast-0.5.3.tar.gz: gast-0.5.3/gast/ast3.py: new_slice = ast.ExtSlice(./gast-0.5.3.tar.gz: gast-0.5.3/gast/ast2.py: new_slice = ast.ExtSlice([adjust_slice(self._visit(elt))./ipython-8.12.0.tar.gz: ipython-8.12.0/IPython/core/guarded_eval.py: if isinstance(node, ast.ExtSlice):./flake8_expression_complexity-0.0.11.tar.gz: flake8_expression_complexity-0.0.11/flake8_expression_complexity/utils/complexity.py: (ast.ExtSlice, 'ext_slice'),./astroid-2.15.1.tar.gz: astroid-2.15.1/astroid/nodes/node_classes.py: """Class representing an :class:`ast.ExtSlice` node../astroid-2.15.1.tar.gz: astroid-2.15.1/astroid/rebuilder.py: def visit(self, node: ast.ExtSlice, parent: nodes.Subscript) -> nodes.Tuple:./astroid-2.15.1.tar.gz: astroid-2.15.1/astroid/rebuilder.py: self, node: ast.ExtSlice, parent: nodes.Subscript./asttokens-2.2.1.tar.gz: asttokens-2.2.1/asttokens/asttokens.py: ast.Slice, ast.ExtSlice, ast.Index, ast.keyword,./asttokens-2.2.1.tar.gz: asttokens-2.2.1/asttokens/asttokens.py: - ``ast.ExtSlice``./griffe-0.25.5.tar.gz: griffe-0.25.5/src/griffe/agents/nodes.py: from ast import ExtSlice as NodeExtSlice./numba-0.56.4.tar.gz: numba-0.56.4/numba/tests/test_stencils.py: slice=ast.ExtSlice(./numba-0.56.4.tar.gz: numba-0.56.4/numba/tests/test_stencils.py: if isinstance(node.slice, ast.ExtSlice):./pytype-2023.3.31.tar.gz: pytype-2023.3.31/pytype/typeshed/stubs/pyflakes/pyflakes/checker.pyi: def EXTSLICE(self, tree: ast.ExtSlice, omit: _OmitType = ...) -> None: ..../RestrictedPython-6.0.tar.gz: RestrictedPython-6.0/src/RestrictedPython/transformer.py: elif isinstance(slice_, ast.ExtSlice):Time: 0:00:17.604108Found 22 matching lines in 14 projectsBut I'm also okay to splitting it into another PR and merging it after the 3.13 branch in about a week and a few days. In any case, let's add this to What's New. |
Uh oh!
There was an error while loading. Please reload this page.
hugovk commented May 4, 2023 • edited
Loading Uh oh!
There was an error while loading. Please reload this page.
edited
Uh oh!
There was an error while loading. Please reload this page.
A suggested What's New entry: * The following :mod:`ast` features have been deprecated in documentation since Python 3.8 and now raise a proper :exc:`DeprecationWarning`: :class:`!ast.Num`, :class:`!ast.Str`, :class:`!ast.Bytes`, :class:`!ast.NameConstant` and :class:`!ast.Ellipsis`; use :class:`ast.Constant` instead. Similarly since 3.9, instead of :class:`!ast.Index` use the index value directly; and instead of :class:`!ast.ExtSlice` use :class:`ast.Tuple`. (Contributed by Serhiy Storchaka in :gh:`90953`.) |
Co-authored-by: Hugo van Kemenade <[email protected]>
AlexWaygood commented May 4, 2023 • edited
Loading Uh oh!
There was an error while loading. Please reload this page.
edited
Uh oh!
There was an error while loading. Please reload this page.
Well, my position remains the same: I'd love to see this get into 3.12, but I'd really rather we excluded Life's already complicated enough as it is, with how frequently the Python AST changes from version to version :) |
hugovk commented May 4, 2023
Okay, would you like to create a new PR with just the 3.8 ones and we can merge that into 3.12 before the cutoff? Then we can merge this with the 3.9 ones into 3.13 after the cutoff? |
AlexWaygood commented May 4, 2023
Sounds good. I'll list @serhiy-storchaka as a co-author. |
8c949f3 to fdefe87CompareAlexWaygood commented May 5, 2023
(Accidentally pushed to this PR instead of #104199. Force-pushed to undo that.) |
furkanonder commented May 11, 2023
cc: @isidentical |
hugovk commented May 23, 2023
Python 3.12 beta is out, this can now be updated to be included in main/3.13. |
serhiy-storchaka commented Aug 9, 2023
Closed in favor of #104199. @AlexWaygood, do you mind to create a new PR for ExtSlice and Index? |
AlexWaygood commented Aug 9, 2023
Sure, I'm working on it now |
I am not sure that it is worth to include it in 3.11. It may be better to wait for 3.12 or 3.13.
https://bugs.python.org/issue46797