July 30th, 2018
:tada: New Features
* Ability to analyze directories, `-r` Recursive option ([129], thanks [omergunal])
* Added `--dont-prepend-root` option, makes it so that we don't require imports start with `project_root.*` ([151], thanks [bcaller])
* Added `--no-local-imports` option, to require absolute imports be relative to the project root ([151], thanks [bcaller])
* [PEP 498] support, formatted string literals ([142], thanks [bcaller])
* [PEP 526] support, syntax for variable annotations ([143], thanks [bcaller])
* Whitelist lines of sources and sinks ending in ` nosec` ([121], thanks [omergunal])
[bcaller]: https://github.com/bcaller
[PEP 498]: https://www.python.org/dev/peps/pep-0498/
[PEP 526]: https://www.python.org/dev/peps/pep-0526/
[121]: https://github.com/python-security/pyt/pull/121
[129]: https://github.com/python-security/pyt/pull/129
[142]: https://github.com/python-security/pyt/pull/142
[143]: https://github.com/python-security/pyt/pull/143
[151]: https://github.com/python-security/pyt/pull/151
:telescope: Precision
* Added per-arg taint, for sink functions ([147], thanks [bcaller])
* AugAssign, Yield, and YieldFrom taint propagation improvements ([155], thanks [bcaller])
* Improved tuple assingment to be more precise and support starargs ([150], thanks [bcaller])
[147]: https://github.com/python-security/pyt/pull/147
[150]: https://github.com/python-security/pyt/pull/150
[155]: https://github.com/python-security/pyt/pull/155
:bug: Bugfixes
* Fixed a bug where `get_call_names` only handled `ast.Attribute` nodes ([148], thanks [bcaller])
* Fixed a bug where `vars_visitor.py` crashed on Python 3.5 dict syntax ([144], thanks [bcaller])
[144]: https://github.com/python-security/pyt/pull/144
[148]: https://github.com/python-security/pyt/pull/148
:performing_arts: Performance
* Added an `lru_cache` to the `generate_ast` function ([153], thanks [bcaller])
[153]: https://github.com/python-security/pyt/pull/153
:mortar_board: Walkthrough / Help
* Added `README.rst` files to almost every directory. (Partially [126])
:snake: Miscellaneous
* Added tests for `vars_visitor.py`, making our overall coverage 91% ([139], thanks [stannum-l])
* Cleaned and organized requirements, `setup.py`, `tox.ini` and `.travis.yml` ([152], thanks [bcaller])
* Cleaned up the new `pyt/core/` folder ([132])
* Fixed all flake8 errors ([114] & [130], thanks [cclauss])
* Re-organized the entire codebase into different directories ([126])
* Return exit code 1 if any non-sanitised vulnerabilities are found ([156], thanks [bcaller])
[cclauss]: https://github.com/cclauss
[stannum-l]: https://github.com/stannum-l
[114]: https://github.com/python-security/pyt/pull/114
[126]: https://github.com/python-security/pyt/pull/126
[130]: https://github.com/python-security/pyt/pull/130
[132]: https://github.com/python-security/pyt/pull/132
[139]: https://github.com/python-security/pyt/pull/139
[152]: https://github.com/python-security/pyt/pull/152
[156]: https://github.com/python-security/pyt/pull/156