* Detect position-only parameters (3.8, [PEP 570](https://www.python.org/dev/peps/pep-0570/))
* Detect named expressions (3.8, [PEP 572](https://www.python.org/dev/peps/pep-0572/))
* Detect builtin classes from type usages (`str`, `unicode`, `dict`, `set`, `frozenset`, `int`, `float`, `long`). This allows detection of `"hello".isascii()` as `str.isascii`, for instance, which enables a new set of rules
* 188 new rules added
* Print range of unique versions required by the analysed code via `--versions`:
% ./vermin.py -q --versions vermin
Minimum required versions: 2.7, 3.0
Version range: 2.0, 2.5, 2.7, 3.0
* [Analysis Exclusion](https://github.com/netromdk/vermin#analysis-exclusions) in two ways:
* ` novermin` and ` novm`:
py
import ssl
tls_version = ssl.PROTOCOL_TLSv1
if hasattr(ssl, "PROTOCOL_TLS"): novermin
tls_version = ssl.PROTOCOL_TLS
* `--exclude <symbol name>` and `--exclude-file <file name>`:
[--exclude <name>] ...
Exclude full names, like 'email.parser.FeedParser', from analysis. Useful to
ignore conditional logic that can trigger incompatible results. It's more fine
grained than lax mode.
Examples:
Exclude 'foo.bar.baz' module/member: --exclude 'foo.bar.baz'
Exclude 'foo' kwarg: --exclude 'somemodule.func(foo)'
Exclude 'bar' codecs error handler: --exclude 'ceh=bar'
Exclude 'baz' codecs encoding: --exclude 'ce=baz'
[--exclude-file <file name>] ...
Exclude full names like --exclude but from a specified file instead. Each line
constitues an exclusion with the same format as with --exclude.
* Analysis now also visits all attributes, and arguments and keywords of functions for better rule-checking coverage
Thanks to chickenbit (20) for getting me on track for detecting and adding new rules for builtin types.