Merge branch 'develop' into feature/lambda-list-keyword

This commit is contained in:
James King 2013-04-10 15:14:45 -04:00
commit 160eaaa543
3 changed files with 45 additions and 1 deletions

View File

@ -18,6 +18,8 @@
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
# DEALINGS IN THE SOFTWARE.
import ast
def flatten_literal_list(entry):
for e in entry:
@ -26,3 +28,42 @@ def flatten_literal_list(entry):
yield x # needs more yield-from
else:
yield e
def dump(node, annotate_fields=True, include_attributes=False, indent=' '):
"""
Return a formatted dump of the tree in *node*. This is mainly useful for
debugging purposes. The returned string will show the names and the values
for fields. This makes the code impossible to evaluate, so if evaluation is
wanted *annotate_fields* must be set to False. Attributes such as line
numbers and column offsets are not dumped by default. If this is wanted,
*include_attributes* can be set to True.
Original author: Alex Leone (acleone ~AT~ gmail.com), 2010-01-30
"""
def _format(node, level=0):
if isinstance(node, ast.AST):
fields = [(a, _format(b, level)) for a, b in ast.iter_fields(node)]
if include_attributes and node._attributes:
fields.extend([(a, _format(getattr(node, a), level))
for a in node._attributes])
return ''.join([
node.__class__.__name__,
'(',
', '.join(('%s=%s' % field for field in fields)
if annotate_fields else
(b for a, b in fields)),
')'])
elif isinstance(node, list):
lines = ['[']
lines.extend((indent * (level + 2) + _format(x, level + 2) + ','
for x in node))
if len(lines) > 1:
lines.append(indent * (level + 1) + ']')
else:
lines[-1] += ']'
return '\n'.join(lines)
return repr(node)
if not isinstance(node, ast.AST):
raise TypeError('expected AST, got %r' % node.__class__.__name__)
return _format(node)

View File

@ -17,6 +17,9 @@ It's got an extremely simple Macro system, which will hopefully become
a bit more advanced as the language develops.
</p>
<p>
<a href="https://hy.readthedocs.org/en/latest/" title="Hy Documentation">Read the docs</a> to learn more.
</p>
<p>
Want to try it out? Flip on JavaScript and try out the <a href="/repl" >REPL</a>
</p>
{% endblock %}

View File

@ -22,7 +22,7 @@
;;;; "compiles" to Python ASTs.
;;;;
;;;; This pane is the Hy lisp variant,
;;;; and the left side is what the output
;;;; and the right side is what the output
;;;; AST looks like using the `codegen` module.
;;;;
;;;; star the repo @ http://git.io/hy