We follow Semantic Versions since the 0.1.0
release.
We used to have incremental versioning before 0.1.0
.
In this release we had a little focus on:
- Primitives and how to use them
- Strings and numbers and how to write them
- OOP features
- Blocks and code structure, including overused expressions and overlaping variables
- Adds
xenon
as a dependency, it also checks for cyclomatic complexity, but uses more advanced algorithm with better results - Forbids to have modules with too many imported names
configured by
--max-imported-names
option which is 50 by default - Forbids to raise
StopIteration
inside generators - Forbids to have incorrect method order inside classes
- Forbids to make some magic methods async
- Forbids to use meaningless zeros in float, binary, octal, hex, and expanentional numbers
- Enforces to use
1e10
instead of1e+10
- Enforces to use big letters for hex numbers:
0xAB
instead of0xab
- Enforces to use
r'\n'
instead of'\\n'
- Forbids to have unicode escape characters inside binary strings
- Forbids to use
else if
instead ofelif
- Forbids to have too long
try
bodies - Forbids to overlap local and block variables
- Forbids to use block variables after the block definitions
- Changes how
WrongSlotsViolation
works, not(...) + value
is restricted in favor of(..., *value)
- Forbids to have explicit unhashable types in sets and dicts
- Enforces
j
prefix overJ
for complex numbers
- Bumps
flake8-eradicate
version and solvesattrs
incompatible versions issue - Fixes
TryExceptMultipleReturnPathViolation
not trackingelse
andfinally
returns at the same time - Fixes how
TryExceptMultipleReturnPathViolation
works: now handlesbreak
andraise
statements as well - Fixes
WrongLoopIterTypeViolation
not triggering for generator expressions and empty tuples - Fixes
WrongLoopIterTypeViolation
not triggering for numbers (including negative), booleans,None
- Fixes
WrongLoopIterTypeViolation
position - Fixes
WrongLoopIterTypeViolation
not triggering for compehensions - Fixes
WrongSlotsViolation
not triggering for comprehensions and inccorect__slots__
names and types - Fixes
NestedClassViolation
andNestedFunctionViolation
not reporting when placed deeply inside other nodes - Fixes when
WrongUnpackingViolation
was not raised forasync for
andasync with
nodes - Fixes when
WrongUnpackingViolation
was not raised for comprehensions - Fixes that
x, y, z = x, z, y
was not recognized asReassigningVariableToItselfViolation
- Fixes that
{1, True, 1.0}
was not recognised as a set with duplicates - Fixes that
{(1, 2), (1, 2)}
was not recognised as a set with duplicates - Fixes that
{*(1, 2), *(1, 2)}
was not recognised as a set with duplicates - Fixes that
{1: 1, True: 1}
was not recognised as a dict with duplicates - Fixes that
compex
numbers were always treated like magic, now1j
is allowed
- Adds
bellybutton
to the list of linters - Improves tests for binary, octal, hex, and expanetional numbers
- Adds new
xenon
CI check - Now handles exceptions in our own code, hope to never see them!
- Now uses
coverage
checks in deepsource - Now
@alias
checks that all aliases are valid - Changes how presets are defined
- Improves how
DirectMagicAttributeAccessViolation
is tested - Refactors a lot of tests to tests
ast.Starred
- Refactors a lot of tests to have less tests with the same logical coverage
- We now use
import-linter
instead oflayer-linter
- Now using
pygments
as a direct dependency
We had a really big problem: all violations inside best_practices
was messed up together with no clear structure.
We had to fix it before it is too late. So, we broke existing error codes. And now we can promise not to do it ever again.
We also have this nice migration guide for you to rename your violations with a script.
- Breaking: replaces
Z
error code toWPS
code - Breaking: creates new violation group
refactoring.py
- Breaking: creates new violation group
oop.py
- Breaking: moving a lot of violations
from
best_practices
torefactoring
,oop
, andconsistency
- Adds new
wemake
formatter (using it now by default)
- Fixes error message of
OverusedStringViolation
for empty strings - Now does not count string annotations as strings for
OverusedStringViolation
- Fixes
InconsistentReturnVariableViolation
was raised twice
- Adds migration guide to
0.11
- Improves legacy guide
- Adds
--show-source
to the default recommended configuration - Adds better docs about auto-formatters
- Adds
autopep8
to CI to make sure thatwps
is compatible with it - Ensures that
--diff
mode works forflake8
- Renames
Incorrect
toWrong
where possible - Renames
IncorrectlyNestedTernaryViolation
toNestedTernaryViolation
- Renames
IncorectLoopIterTypeViolation
toWrongLoopIterTypeViolation
This release is mostly targeted at writing better compares and conditions. We introduce a lot of new rules related to this topic improving: consistency, complexity, and general feel from your code.
In this release we have ported a lot of existing pylint
rules,
big cudos to the developers of this wonderful tool.
- Adds
flake8-executable
as a dependency - Adds
flake8-rst-docstrings
as a dependency - Validates options that are passed with
flake8
- Forbids to use module level mutable constants
- Forbids to over-use strings
- Forbids to use
breakpoint
function - Limits yield tuple lengths
- Forbids to have too many
await
statements - Forbids to subclass lowercase
builtins
- Forbids to have useless
lambda
s - Forbids to use
len(sized) > 0
andif len(sized)
style checks - Forbids to use repeatable conditions:
flag or flag
- Forbids to write conditions like
not some > 1
- Forbids to use heterogenous compares like
x == x > 0
- Forbids to use complex compare with several items (
>= 3
) - Forbids to have class variables that are shadowed by instance variables
- Forbids to use ternary expressions inside
if
conditions - Forces to use ternary instead of
... and ... or ...
expression - Forces to use
c < b < a
instead ofa > b and b > c
- Forces to use
c < b < a
instead ofa > b > c
- Forbids to use explicit
in []
andin ()
, use sets or variables instead - Forces to write
isinstance(some, (A, B))
instead ofisinstance(some, A) or isinstance(some, B)
- Forbids to use
isinstance(some (A,))
- Forces to merge
a == b or a == c
intoa in {b, c}
and to mergea != b and a != c
intoa not in {b, c}
- Fixes incorrect line number for
Z331
- Fixes that
Z311
was not raising for multiplenot in
cases - Fixes a bunch of bugs for rules working with
Assign
and notAnnAssign
- Fixes that
continue
was not triggeringUselessReturningElseViolation
- Renames
logics/
tologic/
since it is grammatically correct - Renames
Redundant
toUseless
- Renames
Comparison
toCompare
- Renames
WrongConditionalViolation
toConstantConditionViolation
- Renames
ComplexDefaultValuesViolation
toComplexDefaultValueViolation
- Refactors
UselessOperatorsVisitor
- Adds
compat/
package, getting ready forpython3.8
- Adds
Makefile
- A lot of minor dependency updates
- Fixes issue with
pydocstyle>=4
by glueing its version topydocstyle<4
This is mostly a supporting release with several new features and lots of bug fixes.
- Forbids to use magic module methods
__getattr__
and__dir__
- Forbids to use multiline conditions
- Forbids local variables that are only used in
return
statements
- Fixes module names for modules like
io.py
- Fixes false positive
Z310
for numbers like0xE
- Fixes false positive for compare ordering with
await
- Fixes problem with missing
_allowed_left_nodes
- Fixes problem false positive for
Z121
when using_
for unused var names - Fixes false positive for negative number in default values
- Fixes error text for
ComplexDefaultValueViolation
- Fixes problem with false positive for
Z459
when a default value is anEllipsis
- Adds
py.typed
file in case someone will import our code, now it will have types - Adds several missing
@final
decorators - Enforces typing support
- Refactors how
typing_extensions
package is used - Adds docs about
black
- Adds big "Star" button
- Multiple dependencies update
- Better
exclude
rule forflake8
check - Removed warnings from
pytest
- Fixes how
wps_context
is calculated, sosuper()
calls are now working
- Updates
flake8
to3.7+
- Adds
flake8-annotations-complexity
as a dependency, forbids complex annotations - Forbids to use redundant
+
,~
,not
, and-
operators before numbers - Forbids to use complex default values
- Forbids to use anything rather than names in
for
loop vars definitions - Forbids to use anything rather than names in
with
block vars definitions - Forbids to use anything rather than names in comprehension vars definitions
- Forbids to use direct magic attributes access
- Forbids to use negated conditions
- Forbids to use too many
# pragma: no cover
comments - Forbids to use nested
try
blocks
- Fixes problems with empty lines after magic comments, see #492
- Fixes error message for
del
keyword: it is now just'del'
not'delete'
- Removes
flake8-per-file-ignores
plugin, sinceflake8
now handles it - Removes
flake8-type-annotations
plugin, sinceflake8
now handles it - Improves docs for
WrongKeywordViolation
- Improves docs for
EmptyLineAfterCodingViolation
- Improves docs for
ProtectedAttributeViolation
- Adds docs about
.pyi
files
- Allows
Generic[SomeType]
to be a valid superclass - Forces to use
flake8
version3.6
instead of3.7
- Improves docs about using
# type: some
comment infor
loops
- Now raising a violation for every
bool
non-keyword argument and showing better error message - Changes how
max-arguments
are counted. Nowself
,cls
, andmcs
count as real arguments - Forbids to use
yield
inside comprehensions - Forbids to have single line triple-quoted string assignments
- Forbids to have same items in
set
literals - Forbids to subclass
BaseException
- Forbids to use simplifiable
if
expressions and nodes - Forbids to have incorrect nodes in
class
body - Forbids to have methods without any arguments
- Forbids to have incorrect base classes nodes
- Enforces consistent
__slots__
syntax - Forbids to use names with trailing
_
without a reason - Forbids to use
super()
with arguments or outside of methods - Forbids to have too many
except
cases - Enforces to have an empty line after
coding
comment - Forbids to use too many
# noqa
comments - Forbids to use variables declared as unused
- Forbids to use redundant
else
blocks - Forbids to use inconsistent
return
andyield
statements - Forbids to use multiple
return
path intry
/expect
/finally
- Forbids to use implicit string concatenation
- Forbids to have useless
continue
nodes inside the loops - Forbids to have useless nodes
- Forbids to have useless
raise
statements - Adds
params
andparameters
to black-listed names
- Fixes a lot of rules that were ignoring
Bytes
node as constant type - Fixes location of the
BooleanPositionalArgumentViolation
- Fixes argument count issue with
async
functions - Fixes
WrongConditionalVisitor
not detectingtuple
as constants - Fixes
WrongConditionalVisitor
not detecting negative numbers as constants - Fixes some magic number that were not detected based on their location
- Fixes error when regular functions named as blacklisted magic methods were forbidden, now we check for methods only
- Fixes error when strings like
U'some'
was not triggering unicode violation - Fixes error when string like
U'some'
was not triggering modifier violation
- Adds
safety
and other dependency checks to the CI process - Improves tests: now
tokenize
works differently inside tests - Improves tests: now testing more brackets cases aka "magic coverage bug"
- Improves docs: adds new badge about our code style
- Refactoring: trying to use
astor
where possible to simplify the codebase - Refactoring: introduces some new
transformations
- Refactoring: now we do not have any magical text casts for violations
- Improves tests: changes how
flake8
is executed, now it is twice as fast - Improves docs: now linting
conf.py
withflake8
- Improves tests: now we check that ignored violation are raised with
noqa
- Improves docs: we have added a special graph to show our architecure
- Improves docs: we now have a clean page for
checker
without extra junk - Improves docs: we now have a tutorial for creating new rules
- Refactoring: moves
presets
package to the root - Improves tests: we now lint our layered architecure with
layer-lint
- Fixes an issue-450 with
dict
s with just values and no keys
- Fixes a crash with class attributes assignment
- Fixes a conflict between our plugin and
pyflakes
- Adds
flake8-per-file-ignore
plugin dependency - Adds default values to the
flake8 --help
output - Adds
do
as a restricted variable name - Forbids multiple assignment targets for context managers
- Forbids to use incorrect multi-line parameters
- Forbids to use
bool
values as positional arguments - Forbids to use extra indentation
- Forbids to use inconsistent brackets
- Forbids to use multi-line function type annotations
- Forbids to use uppercase string modifiers
- Forbids to use assign chains: now we only can use one assign per line
- Forbids to use assign with unpacking for any nodes except
Name
- Forbids to have duplicate
except
blocks
- Fixes tests failing on windows (@sobolevn hates windows!), but it still fails sometimes
- Fixes bug when
@staticmethod
was treated as a module member - Fixes bug when some nodes were not checked with
TooDeepNestingViolation
- Fixes bug when it was possible to provide non-unique aliases
- Fixes incorrect line number for incorrect parameter names
- Fixes bug when names like
__some__value__
were not treated as underscored - Fixes bug when assignment to anything rather than name was raising an error
- Refactoring: now we fix
async
nodes offset in a special transformation - Improves docs: specifies what
transformation
is - Improves docs: making contributing section in the
README
more friendly - Improves build: changes how CI installs
poetry
- Fixes all possible errors that happen
because of unset
parent
andfunction_type
properties
- Breaking: removes
--max-conditions
and--max-elifs
options - Breaking: removes
--max-offset-blocks
- Breaking: changes default
TooManyConditionsViolation
threshold from3
to4
- Breaking: changes
TooManyBaseClassesViolation
code from225
to215
- Forbids to use
lambda
inside loops - Forbids to use
self
,cls
, andmcs
except for first arguments only - Forbids to use too many decorators
- Forbids to have unreachable code
- Forbids to have statements that have no effect
- Forbids to have too long names for modules and variables
- Forbids to have names with unicode for modules and variables
- Add
variable
to the blacklisted names - Now
RedundantLoopElseViolation
also checkswhile
loops
- Fixes
TooManyConditionsViolation
to work with any conditions, not justif
s - Fixes
TooManyConditionsViolation
that did not count conditions correctly - Fixes
TooManyForsInComprehensionViolation
to find all comprehension types - Fixes
TooManyElifsViolation
to check module level conditions - Fixes
TooManyBaseClassesViolation
docs location - Fixes
WrongVariableNameViolation
not checkinglambda
argument names - Fixes
OffsetVisitor
incorrectawait
handling
- Refactoring: moves all complexity checks into
complexity/
folder - Refactoring: improves how different keyword visitors are coupled
- Improves docs: we have removed magic comments and code duplication
- Improves docs: now
_pages/
is named justpages/
- Improves docs: now all violations are sorted correctly
- Improves tests: now testing different keywords separately
- Improves tests: now all violations must be contained in
test_noqa.py
- Improves tests: now we also run
compile()
on allast
examples - Improves tests: now we are sure about correct order of violations
Development was focused around better test coverage and providing a better API for tests. We also now covering more cases and testing violation texts.
- Breaking: removes duplicating module name rules, now we use the same rules for both variables and modules
- Breaking: removes
--min-module-name-length
options - Breaking: renames
--min-variable-name-length
into--min-name-length
- Dependencies: updates
flake8
version to3.6
- Dependencies: removes
pycodestyle
pinned version - Restrict unicode names
- Multiple fixes to error text formats to be more readable
- Fixes
UNDERSCORED_NUMBER_PATTERN
to match names likecome_22_me
- Fixes
UpperCaseAttributeViolation
not being displayed in the docs - Fixes consistency checks being duplicated in the docs
- Fixes
UnderscoredNumberNameViolation
showing incorrect line number - Fixes
ProtectedAttributeViolation
to respectsuper()
andmcs
- Fixes
ProtectedAttributeViolation
to show correct text - Fixes
BadNumberSuffixViolation
to show correct text - Fixes
TooManyBaseClassesViolation
to show correct text - Fixes
TooManyElifsViolation
to show correct text - Fixes
TooDeepNestingViolation
to show correct text - Fixes
TooManyMethodsViolation
to show correct text - Fixes
ReassigningVariableToItselfViolation
to show correct text - Renames
UnderscoredNumberNameViolation
toUnderscoredNumberNameViolation
- Refactoring: removed duplicate logic inside
logics/filenames.py
- Improves tests: now testing almost all violations inside
noqa.py
- Improves tests: now testing violations text
- Improves tests: now all common patters live in related
conftest.py
- Improves docs: now all configuration options are listed in the violations
This release was made possible by awesome people who contributed
to the project during #hactoberfest
. List of awesome people:
- @novikovfred
- @riyasyash
- @sathwikmatsa
- @tipabu
- @roxe322
- @geoc0ld
- @lensvol
- @SheldonNunes
- @tommbee
- @valignatev
- @vsmaxim
- Adds
flake8-print
as a dependency - Adds
typing-extensions
as a dependency - Forbids to use
quit
andexit
functions - Forbids the comparison of two literals
- Forbids the incorrect order comparison, enforcing variable to come first
- Forbids underscores before numbers in names
- Forbids class level attributes whose name is not in
snake_case
- Forbids comparison of the same variables
- Forbids inconsistent octal, binary, and hex numbers
- Forbids too many arguments in
lambda
functions - Forbids extra
object
in parent classes list - Forbids
for
loops with unusedelse
- Forbids variables self reassignment
- Forbids
try
withfinally
withoutexcept
- Forbids
if
statements with invalid conditionals - Forbids opening parenthesis from following keyword without space in between them
- Forbids the use of more than 2
for
loops within a comprehension - Forbids variable names with more than one consecutive underscore
- Restricts the maximum number of base classes aka mixins
- Forbids importing protected names
- Forbids using protected methods and attributes
- Forbids
yield
inside__init__
method
- Fixes that
MultipleIfsInComprehensionViolation
was not enabled - Fixes flaky behaviour of
test_module_names
test package - Fixed
TooManyMethodsViolation
not displaying line number in output - Fixed
OffsetVisitor
due to python bug
- Updates
poetry
version - Refactoring: some general changes, including better names and APIs
- Improves docs: now we have
versionadded
for each violation - Improves docs: now we explicitly state how some violations might be ignored
- Improves tests: now we are testing options
- Improves tests: now we have different
tests/
folder structure - Improves tests: now we are testing presets
- Improves tests: now we are using different logic inside
assert_errors
- Improves tests: now testing magic numbers in more situations
- Improves tests: now testing more situations with empty base classes
- Improves tests: now testing presets, that they have all the existing visitors
- Improves tests: now using stricter
noqa
checks - Improves tests: now testing that any name is allowed when using a variable
- Improves types: now all class attributes are marked as
ClassVar
- Improves types: now we use
final
to indicate what should not be changed - Improves types: now we do not have any ugly import hacks
This release was made possible by awesome people who contributed
to the project during #hactoberfest
. List of awesome people:
- Now we are counting
async
function as a module member - We now forbid to use
credits()
builtin function - We now check
async for
andasync with
nesting level - We now check
async for
andasync with
variable names - We now count
async
methods as method for classes complexity check - We now count
async
functions as functions for module complexity check - We now check
async
functions names and arguments - We now count
async
functions complexity - We now ignore
async
functions in jones complexity check - We now check for nested
async
functions - We now check for
async
functions with@staticmethod
decorator
- Improves docs: add
usage.rst
- Improves docs: adds naming convention to the
naming.py
- Improves docs: multiple typos, bugs, and issues fixes
- Improves tests: now we are testing
async
comprehensions
- Breaking: changes violation codes, now they are grouped by meaning
- Refactoring: changes how visitors are organized inside the package
- Improves docs: now we have a glossary
- Refactoring: refactoring terms that violate our glossary
- Improves docs: now all error files contain fancy documentation and summary
- Improves docs: now we have added API reference to the docs
- Improves docs: adds new plugin development guide
- Adds
flake8-logging-format
dependency - Adds
flake8-type-annotations
dependency - Adds
flake8-breaking-line
dependency - Removes
flake8-super-call
dependency - Adds
PartialFloatViolation
- Adds
MagicNumberViolation
- Adds
WrongDocCommentViolation
- Adds
MAGIC_NUMBERS_WHITELIST
constant - Changes what variable names are blacklisted, adds
false
,true
, andno
- Improves docs: now including docs for
--max-condition
option - Improves docs: adds some new
Zen of Python
references - Improves tests: adds many new examples
- Improves docs: now each error has its error message displayed in the docs
- Improves docs: readme is now ready for the release
- Improves docs: now error pages are split
- Improves docs: now all
flake8
plugin dependencies are documented
- Adds
MultipleIfsInComprehensionViolation
- Adds
TooManyConditionsViolation
- Adds
--max-conditions
option
- Improves
CONTRIBUTING.md
- Moves issues templates to
.github/
folder
- Adds
WrongModuleNamePatternViolation
andWrongModuleNameUnderscoresViolation
- Adds
TooManyImportsViolation
error and--max-imports
option - Adds
--i-control-code
option to ignoreInitModuleHasLogicViolation
- Adds check for underscored numbers
- Forbids
u''
strings - Adds
noqa
andtype
comments checks
- Changes how many errors are generated for limits violations
- Refactors how visitors are injected into the checker, now using presets
- Creates new visitor type:
BaseTokenVisitor
for working withtokenize
- Improves typing support
- Adds
flake8-bandit
plugin - Adds
flake8-eradicate
plugin - Adds
flake8-print
plugin for development - Removes
delegate
concept from the codebase
- Adds
jones
complexity checker - Adds
--max-line-complexity
and--max-jones-score
options
- Improves docs: adds detailed installation instructions
- Removes
flake8-blind-except
plugin
This is just a supporting release. There are no new features introduced.
We have changed the error codes for general checks.
- Fixes bug with nested imports missing
parent
- Fixes bug with incorrect
pycodestyle
version - Removes
BareRaiseViolation
as it does not fit the purpose of this package
- Improves docs: now all errors are sorted by
code
- Improves docs: now all errors have reasoning
- Improves docs: some references are now clickable in web version
- Improves docs: now docs include
CHANGELOG.md
- Improves docs: now we have templates for
bug
andrule-request
- Replaced
pytest-isort
withflake8-isort
This is just a supporting release. There are no new features introduced.
- Introduced the concept of regression testing, see
test/fixtures/regression
- Removed
compat.py
- Fixes some minor typos, problems, markup inside the docs
- Adds some new configuration to
sphinx
- Changes
sphinx
docs structure a little bit
- Adds
WrongModuleNameViolation
,WrongModuleMagicNameViolation
, andTooShortModuleNameViolation
- Adds
--min-module-name-length
config option - Adds a blacklist of module names
- Adds
InitModuleHasLogicsViolation
- Adds
EmptyModuleViolation
- Adds a whitelist of magic module names
- Fixes
Option
class to have have incorrecttype
field, now using strings - Fixes that
WrongStringTokenVisitor
was not activated
- Improved typing support
- Now each error has a link to the corresponding constant (if any)
- Improved docs with links to the corresponding configuration flags
This is just a supporting release. There are no new features introduced.
- Fixes
Attribute has no 'id'
error - Fixes
missing 'typing_extension'
error
- Errors are now tested
- Complexity tests are refactored
- Now all dependencies are direct, they will be installed together with this package
- Adds direct dependencies, now there's no need to install any extra packages
- Adds
TooDeepNestingViolation
andTooManyElifsViolation
checks - Adds
--max-offset-blocks
and--max-elifs
options - Adds
TooManyModuleMembersViolation
andTooManyMethodsViolation
checks - Adds
--max-module-members
and--max-methods
options - Restricts to use
f
strings
- Removes incorrect
generic_visit()
calls - Removes some unused
getattr()
calls - Refactors how options are registered
- Improved type support for options parsing
- Added new magic methods to the black list
- We now do not count
_
as a variable inTooManyLocals
check - We now restrict to nest
lambda
s - We now allow to configure the minimal variable's name length via
setup.cfg
- Refactored how complexity checks are defined
- Refactored how errors are defined
- Now each check has strict
Raises:
policy which lists all possible errors that this check can find and raise - Changed how visitors are initialized in tests
- Tests now cover nested classes' explicit bases
- Tests now cover nested classes and functions
noqa
comment
- We now check import aliases to be different from the original name
- Default complexity checks' values have changed
- ReadTheDocs build is fixed by providing extra dependencies
- Changed how local variables are counted
- Improved typing support
- Added new documentation sections
- We now allow
generator_stop
to be a__future__
import - We now restrict dotted raw imports like:
import os.path
- We now check import aliases as regular variable names
- We have added a
CONTRIBUTING.md
file to help new contributors
- We now check
class
es to match our styleguide - Classes have their own error group
Z3
- Using
@staticmethod
is now forbidden - Declaring
object
as a base class is now required - Now we check that
__del__
magic method is not used - Variable names
async
andawait
are forbidden - We now forbid to use
__future__
imports - We now have a whitelist for
__future__
imports - Imports are now have its own subgroup
Z10
- General rules now start from
Z11
- We now use
Z
as the default code for our errors - We have shuffled errors around, changing code and formats
- Now all name errors share the same class
- Adds
PrivateNameViolation
- Now imports inside any structures rather than
Module
raises an error - Adds
file
andklass
as restricted names - Now
__import__
is just a bad function name, not a special case - Now version is defined in
poetry.toml
only - We now have configuration! And it covers all design errors
- Fixes issue with missing
parent
s :batman: - Fixes issue with
_$NAME
patterns being ignored
- Adds some new blacklisted variables' names
- Adds docs for each existing error code
- Adds whitelisted names for nested functions:
decorator
andfactory
- Adds new blacklisted module's metadata variables
- Removed
BAD_IMPORT_FUNCTIONS
variable, now just checking__import__
- Add gen-tests that cover most of the issues
- Removed almost all integration tests, saving just a few of them
- Adds
poetry
as the main project tool - Adds
shpinx
as a documentation tool
- Initial release