An open API service indexing awesome lists of open source software.

https://github.com/almarklein/commonast

A common AST description for Python
https://github.com/almarklein/commonast

Last synced: about 1 year ago
JSON representation

A common AST description for Python

Awesome Lists containing this project

README

          

# commonast

A common AST description for Python

The aim of this project is to define a common ast description, that is
the same for different Python versions and implementations. All code
is in [commonast.py](https://github.com/flexxui/pscript/blob/master/pscript/commonast.py).
It defines a function `parse()` to act as a replacement for
`ast.parse()`.

For a definition of the nodes see
[the nodes docs](https://github.com/almarklein/commonast/blob/master/nodes.md).

## Requirements / support

Commonast has been tested to work on:

* CPython 2.7
* CPython 3.3
* CPython 3.4
* CPython 3.5
* CPython 3.6
* CPython 3.7
* CPython 3.8
* pypy, pypy3, pypy4

## Installation

Copy the [commonast.py](https://github.com/flexxui/pscript/blob/master/pscript/commonast.py)
module to your own project or put it somewhere on your PYTHONPATH.

This module does not live on pypi and cannot be installed with pip. The
reason for this is that the ast definition may need to be changed if
new Python versions will be supported, which makes that we cannot
guarantee backward compatibility.

## Purpose

I'm using this in
[pscript](http://pscript.readthedocs.org)
so that the code there can be agnostic about Python version and
implementation. Also, if me or someone else creates a pure Python AST
parser that produces commonast, then we can easily use it in PScript
to allow it to compile itself (which would open up some awesome
possibilities).

The module is maintained from the Flexx project for now. That may change
if commonast becomes used in other projects.

Maybe this project can be useful to others as well. I'd be happy to
support making this more generally useful.

## Related projects

* https://greentreesnakes.readthedocs.org provide the missing docs on Python's ast module. I found this a crucial resource when implementing commonast
* https://github.com/Psycojoker/baron
* https://github.com/davidhalter/jedi
* Python's buildin ast module (a C implemantation)
* Pythons buildin `lib2to3` module (probably the easiest route for a
pure Python ast parser.
* Some people are [discussing a unified ast parser](https://github.com/davidhalter/jedi/issues/630)