Skip to content
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

Add Documentation for Python 3.9 AST changes #201

Merged
merged 7 commits into from
Oct 12, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
Expand Up @@ -34,3 +34,10 @@ indent_size = 2
indent_style = tab
indent_size = unset
tab_width = unset

[*.bat]
indent_style = tab
end_of_line = crlf

[LICENSE]
insert_final_newline = false
9 changes: 3 additions & 6 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ matrix:
- name: "coding-conventions & docs"
python: "3.6"
env: TOXENV=docs,lint
before_install:
after_success:
- python: "2.7"
env: TOXENV=py27,py27-datetime
Expand All @@ -19,13 +18,11 @@ matrix:
env: TOXENV=py38,py38-datetime
- python: "3.9-dev"
env: TOXENV=py39,py39-datetime

before_install:
- travis_retry pip install -U -c constraints.txt coveralls coverage
# - python: "3.10-dev"
# env: TOXENV=py310,py310-datetime

install:
- travis_retry pip install -U pip setuptools
- travis_retry pip install -U -c constraints.txt tox
- travis_retry pip install -U -c constraints.txt pip setuptools coveralls coverage tox

script:
- travis_retry tox
Expand Down
165 changes: 165 additions & 0 deletions docs/contributing/ast/python3_9.ast
Original file line number Diff line number Diff line change
@@ -0,0 +1,165 @@
-- Python 3.9 AST
-- ASDL's 4 builtin types are:
-- identifier, int, string, constant

module Python version "3.9"
{
mod = Module(stmt* body, type_ignore* type_ignores)
| Interactive(stmt* body)
| Expression(expr body)
| FunctionType(expr* argtypes, expr returns)

stmt = FunctionDef(identifier name,
arguments args,
stmt* body,
expr* decorator_list,
expr? returns,
string? type_comment)
| AsyncFunctionDef(identifier name,
arguments args,
stmt* body,
expr* decorator_list,
expr? returns,
string? type_comment)

| ClassDef(identifier name,
expr* bases,
keyword* keywords,
stmt* body,
expr* decorator_list)
| Return(expr? value)

| Delete(expr* targets)
| Assign(expr* targets, expr value, string? type_comment)
| AugAssign(expr target, operator op, expr value)
-- 'simple' indicates that we annotate simple name without parens
| AnnAssign(expr target, expr annotation, expr? value, int simple)

-- use 'orelse' because else is a keyword in target languages
| For(expr target, expr iter, stmt* body, stmt* orelse, string? type_comment)
| AsyncFor(expr target, expr iter, stmt* body, stmt* orelse, string? type_comment)
| While(expr test, stmt* body, stmt* orelse)
| If(expr test, stmt* body, stmt* orelse)
| With(withitem* items, stmt* body, string? type_comment)
| AsyncWith(withitem* items, stmt* body, string? type_comment)

| Raise(expr? exc, expr? cause)
| Try(stmt* body, excepthandler* handlers, stmt* orelse, stmt* finalbody)
| Assert(expr test, expr? msg)

| Import(alias* names)
| ImportFrom(identifier? module, alias* names, int? level)

| Global(identifier* names)
| Nonlocal(identifier* names)
| Expr(expr value)
| Pass
| Break
| Continue

-- col_offset is the byte offset in the utf8 string the parser uses
attributes (int lineno, int col_offset, int? end_lineno, int? end_col_offset)

-- BoolOp() can use left & right?
expr = BoolOp(boolop op, expr* values)
| NamedExpr(expr target, expr value)
| BinOp(expr left, operator op, expr right)
| UnaryOp(unaryop op, expr operand)
| Lambda(arguments args, expr body)
| IfExp(expr test, expr body, expr orelse)
| Dict(expr* keys, expr* values)
| Set(expr* elts)
| ListComp(expr elt, comprehension* generators)
| SetComp(expr elt, comprehension* generators)
| DictComp(expr key, expr value, comprehension* generators)
| GeneratorExp(expr elt, comprehension* generators)
-- the grammar constrains where yield expressions can occur
| Await(expr value)
| Yield(expr? value)
| YieldFrom(expr value)
-- need sequences for compare to distinguish between
-- x < 4 < 3 and (x < 4) < 3
| Compare(expr left, cmpop* ops, expr* comparators)
| Call(expr func, expr* args, keyword* keywords)
| FormattedValue(expr value, int? conversion, expr? format_spec)
| JoinedStr(expr* values)
| Constant(constant value, string? kind)

-- the following expression can appear in assignment context
| Attribute(expr value, identifier attr, expr_context ctx)
| Subscript(expr value, expr slice, expr_context ctx)
| Starred(expr value, expr_context ctx)
| Name(identifier id, expr_context ctx)
| List(expr* elts, expr_context ctx)
| Tuple(expr* elts, expr_context ctx)

-- can appear only in Subscript
| Slice(expr? lower, expr? upper, expr? step)

-- col_offset is the byte offset in the utf8 string the parser uses
attributes (int lineno, int col_offset, int? end_lineno, int? end_col_offset)

expr_context = Load
| Store
| Del

boolop = And
| Or

operator = Add
| Sub
| Mult
| MatMult
| Div
| Mod
| Pow
| LShift
| RShift
| BitOr
| BitXor
| BitAnd
| FloorDiv

unaryop = Invert
| Not
| UAdd
| USub

cmpop = Eq
| NotEq
| Lt
| LtE
| Gt
| GtE
| Is
| IsNot
| In
| NotIn

comprehension = (expr target, expr iter, expr* ifs, int is_async)

excepthandler = ExceptHandler(expr? type, identifier? name, stmt* body)
attributes (int lineno, int col_offset, int? end_lineno, int? end_col_offset)

arguments = (arg* posonlyargs,
arg* args,
arg? vararg,
arg* kwonlyargs,
expr* kw_defaults,
arg? kwarg,
expr* defaults)

arg = (identifier arg, expr? annotation, string? type_comment)
attributes (int lineno, int col_offset, int? end_lineno, int? end_col_offset)

-- keyword arguments supplied to call (NULL identifier for **kwargs)
keyword = (identifier? arg, expr value)
attributes (int lineno, int col_offset, int? end_lineno, int? end_col_offset)

-- import name with optional 'as' alias.
alias = (identifier name, identifier? asname)

withitem = (expr context_expr, expr? optional_vars)

type_ignore = TypeIgnore(int lineno, string tag)
}
5 changes: 5 additions & 0 deletions docs/contributing/changes_from38to39.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
Changes from Python 3.8 to Python 3.9
-------------------------------------

.. literalinclude:: ast/python3_9.ast
:diff: ast/python3_8.ast
11 changes: 6 additions & 5 deletions docs/contributing/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -61,10 +61,11 @@ Technical Backgrounds - Links to External Documentation

* AST Grammar of Python

* `Python 3.9 AST`_
* `Python 3.8 AST`_
* `Python 3.7 AST`_
* `Python 3.6 AST`_
* `Python 3.5 AST`_
* `Python 3.5 AST`_ (becoming obsolete)
* `Python 3.4 AST`_ (obsolete)
* `Python 3.3 AST`_ (obsolete)
* `Python 3.2 AST`_ (obsolete)
Expand All @@ -73,9 +74,9 @@ Technical Backgrounds - Links to External Documentation
* `Python 2.7 AST`_
* `Python 2.6 AST`_ (obsolete)

* `AST NodeVistiors Class`_ (https://docs.python.org/3.5/library/ast.html#ast.NodeVisitor)
* `AST NodeTransformer Class`_ (https://docs.python.org/3.5/library/ast.html#ast.NodeTransformer)
* `AST dump method`_ (https://docs.python.org/3.5/library/ast.html#ast.dump)
* `AST NodeVistiors Class`_ (https://docs.python.org/3.9/library/ast.html#ast.NodeVisitor)
* `AST NodeTransformer Class`_ (https://docs.python.org/3.9/library/ast.html#ast.NodeTransformer)
* `AST dump method`_ (https://docs.python.org/3.9/library/ast.html#ast.dump)

* `In detail Documentation on the Python AST module (Green Tree Snakes)`_
* `Example how to Instrumenting the Python AST`_
Expand All @@ -97,7 +98,7 @@ A (modified style) Copy of all Abstract Grammar Definitions for the Python versi
changes_from35to36
changes_from36to37
changes_from37to38

changes_from38to39

.. Links

Expand Down
1 change: 1 addition & 0 deletions tox.ini
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ envlist =
py37,
py38,
py39,
#py310,
docs,
lint,
coverage,
Expand Down