yunruse / Astley

Extensions to Python's Abstract Syntax Tree

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Astley

Astley is a module designed for manipulating Python's Abstract Syntax tree. It features:

  • An extended node syntax, allowing for nodes to be created via (mostly) native syntax;
  • The ability to print out nodes as Python code - useful for transpilation.

Astley is more of a toy than anything – there are many ways it could be useful, but that would require a lot more time than I can afford. Still, it's functional, and should hopefully work on most versions of Python 3.

Usage

Create code with native syntax, fast:

>>> from astley import parse, f, x, y
>>> code = 'f(x**2 + y, end="!")'
>>> node1 = parse(code, mode='eval')
>>> node2 = f(x**2 + y, end="!")
>>> print(node1.as_python(), node2.as_python())
f(x ** 2 + y, end='!') f(x ** 2 + y, end='!')
>>> node1 == node2
True
>>> node2.eval(f=print, x=10, y=4)
104!

For the most part all operators 'just work' on any node. For certain operators, however – ., == and != – there's no easy way to realise this, so instead use ._., ._== and ._!= instead.

>>> from astley import x, y
>>> node = x._.y ._== 2
>>> print(node.as_python())
x.y == 2

Legal

Copyright (c) Mia Dobson (yunruse) 2018-2021.

This work is licensed under a Creative Commons Attribution 4.0 International license. In non-legal terms: do whatever you like, but credit me. The full license is available here: https://creativecommons.org/licenses/by/4.0/

About

Extensions to Python's Abstract Syntax Tree


Languages

Language:Python 100.0%