This is a huge release that was created during the Hactoberfest season.
It would have been impossible without the huge help from our awesome contributors. Thanks a lot to everyone!
This release is not focused on any particular area.
It features a lot of new rules from different categories.
Features
- Adds cognitive complexity metric, introduced by
cognitive_complexity
- Adds docstrings linter
darglint
- Updates
pep8-naming
andflake8-comprehensions
WPS431
now allow customize whitelist vianested-classes-whitelist
setting- Forbids to have invalid strings in stared expressions like
**{'@': 1}
- Forbids to use implicit primitive values in a form of
lambda: 0
- Forbids to use approximate math constants
- Forbids to redefine string constants
- Forbids use of vague import names (e.g.
from json import loads
) - Makes
OveruseOfNoqaCommentViolation
configurable via--max-noqa-comments
- Forbid incorrectly swapped variables
- Forbids to use redundant subscripts (e.g.,
[0:7]
or[3:None]
) - Allows
super()
as a valid overused expression - Forbids to use
super()
with other methods and properties WPS350
enforces using augmented assign pattern- Forbids unnecessary literals
WPS525
forbids comparisons wherein
is compared with single item container- Forbids wrong annotations in assignment
- Forbids using multiline
for
andwhile
statements WPS113
now can be tweaked withI_CONTROL_CODE
setting- Adds
WPS000
that indicates internal errors - Forbids to use implicit
yield from
- Forbids to start lines with
.
- Enforces better
&
,|
,>>
,<<
,^
operators usage - Forbids incorrect exception order
- Enforces tuples usage with frozenset constructor
- Changes how
WPS444
works, now we use stricter logic forwhile
andassert
- Forbids to use
yield from
with incorrect types - Forbids to use consecutive
yield
expressions - Enforces to use
.items()
in loops - Enforces using
.get()
overkey in dict
checks - Forbids to use and declare
float
keys in arrays and dictionaries - Forbids to use
a[len(a) - 1]
because it is justa[-1]
- Forbids too long call chains like
foo(a)(b)(c)(d)
Bugfixes
- Fixes
ImplicitElifViolation
false positives on a specific edge cases - Fixes
--i-control-code
setting forBadMagicModuleFunctionViolation
- Fixes compatibility with flake8
3.8.x
- Fixes that
not not True
was not detected asWPS330
- Fixes addition of
MisrefactoredAssignmentViolation
check - Fixes
WrongMagicCommentViolation
not catching certain wrong comments - Fixes
BadMagicModuleFunctionViolation
false positives on class-level methods - Fixes
InconsistentReturnViolation
false positives on nested functions - Fixes that
--i-dont-control-code
was not present in command line options - Fixes
BlockVariableVisitor
false positives on a properties - Fixes that
//
was not recognised as a math operation - Fixes false positive
BlockAndLocalOverlapViolation
on annotations without value assign - Fixes bug when
x and not x
was not detected as the similar conditions byWPS408
- Fixed that
1.0
and0.1
were treated as magic numbers
Misc
- Improves Github Action stability
- Replace
scripts/tokens.py
andscripts/parse.py
with external tools - Improves violation code testing
- Improves testing of
.. versionchanged
andprevious_codes
properties - Reference
isort
settings requirement for compliance withWSP318
in docstring - Improves tests: we now ensure that each violation with previous codes also
has corresponding versions changed in their documentation