# Erlang Syntax Tools

This package contains modules for handling abstract Erlang syntax trees, in a way that is compatible with the "parse trees" of the standard library module `erl_parse`, together with utilities for reading source files in unusual ways and pretty-printing syntax trees.

Also included is an amazing automatic code-cleaner/checker.

## Modules

- `epp_dodger`: Makes it possible to parse most Erlang code without expanding preprocessor macros.
- `erl_comment_scan`: Extracts comment text from Erlang source files.
- `erl_prettypr`: Flexible pretty-printer for abstract syntax trees.
- `erl_recomment`: Inserts comments into an abstract syntax tree.
- `erl_syntax`: Abstract syntax trees, compatible with `erl_parse` trees.
- `erl_syntax_lib`: Support functions for working with abstract syntax trees.
- `erl_tidy`: Automatic code cleaner/checker. Can work directly on files, and recursively traverse directories.

The abstract layer (defined in `erl_syntax`) is nicely structured, and the node types are context-independent. The layer makes it possible to transparently attach source-code comments and user annotations to nodes of the tree. Using the abstract layer makes applications less sensitive to changes in the `erl_parse` data structures, only requiring the `erl_syntax` module to be up-to-date.

The pretty printer (`erl_prettypr`) is implemented on top of the library module `prettypr`: this is a powerful and flexible generic pretty printing library, which is also distributed separately, and is not documented here.

For a short demonstration of parsing and pretty-printing, simply compile the included module "`demo.erl`", and execute `demo:run()` from the Erlang shell. It will compile the remaining modules and give you further instructions.

Also try the `erl_tidy` module, as follows:

        erl_tidy:dir("any-erlang-source-dir", [test, old_guard_tests]).

(`test` assures that no files are modified).

See the `README` file for changes since previous versions.