- Improve reachability analysis (kreathon, #270, #302).
- Add type hints for
get_unused_code
and the fields of theItem
class (John Doknjas, #361).
- Add support for Python 3.13 (Jendrik Seipp, #369).
- Add PyPI and conda-forge badges to README file (Trevor James Smith, #356).
- Include
tests/**/*.toml
in sdist (Colin Watson).
- Use
ruff
for linting and formatting (Anh Trinh, #347, #349). - Replace
tox
bypre-commit
for linting and formatting (Anh Trinh, #349). - Add
--config
flag to specify path to pyproject.toml configuration file (Glen Robertson, #352).
- Switch to tomllib/tomli to support heterogeneous arrays (Sebastian Csar, #340).
- Bump flake8, flake8-comprehensions and flake8-bugbear (Sebastian Csar, #341).
- Provide whitelist parity for
MagicMock
andMock
(maxrake, #342).
- Drop support for Python 3.7 (Jendrik Seipp, #323).
- Add support for Python 3.12 (Jendrik Seipp, #332).
- Use
end_lineno
AST attribute to obtain more accurate line counts (Jendrik Seipp).
- Use exit code 0 for
--help
and--version
again (Jendrik Seipp, #321).
- Use exit code 3 when dead code is found (whosayn, #319).
- Treat non-supported decorator names as "@" instead of crashing (Llandy3d and Jendrik Seipp, #284).
- Drop support for Python 3.6 (Jendrik Seipp).
- Add
UnicodeEncodeError
exception handling tocore.py
(milanbalazs, #299). - Add whitelist for
Enum
attributes_name_
and_value_
(Eugene Toder, #305). - Run tests and add PyPI trove for Python 3.11 (Jendrik Seipp).
- Ignore
setup_module()
,teardown_module()
, etc. in pytesttest_*.py
files (Jendrik Seipp). - Add whitelist for
socketserver.TCPServer.allow_reuse_address
(Ben Elliston). - Clarify that
--exclude
patterns are matched against absolute paths (Jendrik Seipp, #260). - Fix example in README file (Jendrik Seipp, #272).
- Add basic
match
statement support (kreathon, #276, #291).
- Mark imports in
__all__
as used (kreathon, #172, #282). - Add whitelist for
pint.UnitRegistry.default_formatter
(Ben Elliston, #258).
- Print absolute filepaths as relative again (as in version 2.1 and before) if they are below the current directory (The-Compiler, #246).
- Run tests and add PyPI trove for Python 3.10 (chayim, #266).
- Allow using the
del
keyword to mark unused variables (sshishov, #279).
- Add pre-commit hook (Clément Robert, #244).
- Only parse format strings when being used with
locals()
(jingw, #225). - Don't override paths in pyproject.toml with empty CLI paths (bcbnz, #228).
- Run continuous integration tests for Python 3.9 (ju-sh, #232).
- Use pathlib internally (ju-sh, #226).
- Treat
getattr/hasattr(obj, "constant_string", ...)
as a reference toobj.constant_string
(jingw, #219). - Fix false positives when assigning to
x.some_name
but reading viasome_name
, at the cost of potential false negatives (jingw, #221). - Allow reading options from
pyproject.toml
(Michel Albert, #164, #215).
- Parse
# type: ...
comments if on Python 3.8+ (jingw, #220). - Bump minimum Python version to 3.6 (Jendrik Seipp, #218). The last Vulture release that supports Python 2.7 and Python 3.5 is version 1.6.
- Consider all files under
test
ortests
directories test files (Jendrik Seipp). - Ignore
logging.Logger.propagate
attribute (Jendrik Seipp).
- Differentiate between functions and methods (Jendrik Seipp, #112, #209).
- Move from Travis to GitHub actions (RJ722, #211).
- Support flake8 "noqa" error codes F401 (unused import) and F841 (unused local variable) (RJ722, #195).
- Detect unreachable code in conditional expressions (Agathiyan Bragadeesh, #178).
- Ignore unused import statements in
__init__.py
(RJ722, #192). - Report first decorator's line number for unused decorated objects on Python 3.8+ (RJ722, #200).
- Check code with black and pyupgrade.
- Detect redundant 'if' conditions without 'else' blocks.
- Add whitelist for
string.Formatter
(Joseph Bylund, #183).
- Fix tests for Python 3.8 (#166).
- Use new
Constant
AST node under Python 3.8+ (#175). - Add test for f-strings (#177).
- Add whitelist for
logging
module.
- Add
sys.excepthook
tosys
whitelist. - Add whitelist for
ctypes
module. - Check that type annotations are parsed and type comments are ignored (thanks @kx-chen).
- Support checking files with BOM under Python 2.7 (#170).
- Add
--ignore-decorators
flag (thanks @RJ722). - Add whitelist for
threading
module (thanks @andrewhalle).
- Add
--ignore-names
flag for ignoring names matching the given glob patterns (thanks @RJ722).
- Add
--make-whitelist
flag for reporting output in whitelist format (thanks @RJ722). - Ignore case of
--exclude
arguments on Windows. - Add
*-test.py
to recognized test file patterns. - Add
failureException
,longMessage
andmaxDiff
tounittest
whitelist. - Refer to actual objects rather than their mocks in default whitelists (thanks @RJ722).
- Don't import any Vulture modules in setup.py (thanks @RJ722).
- Report
while (True): ... else: ...
as unreachable (thanks @RJ722). - Use
argparse
instead ofoptparse
. - Whitelist Mock.return_value and Mock.side_effect in unittest.mock module.
- Drop support for Python 2.6 and 3.3.
- Improve documentation and test coverage (thanks @RJ722).
- Detect
async
function definitions (thanks @RJ722). - Add
Item.get_report()
method (thanks @RJ722). - Move method for finding Python modules out of Vulture class.
- Detect unsatisfiable statements containing
and
,or
andnot
. - Use filenames and line numbers as tie-breakers when sorting by size.
- Store first and last line numbers in Item objects.
- Pass relevant options directly to
scavenge()
andreport()
.
- Detect unsatisfiable
while
-conditions (thanks @RJ722). - Detect unsatisfiable
if
- andelse
-conditions (thanks @RJ722). - Handle null bytes in source code.
- Add
--min-confidence
flag (thanks @RJ722).
- Detect unreachable code after
return
,break
,continue
andraise
(thanks @RJ722). - Parse all variable and attribute names in new format strings.
- Extend ast whitelist.
- If an unused item is defined multiple times, report it multiple times.
- Make size estimates for function calls more accurate.
- Create wheel files for Vulture (thanks @RJ722).
- Report unused tuple assignments as dead code.
- Report attribute names that have the same names as variables as dead code.
- Let Item class inherit from
object
(thanks @RJ722). - Handle names imported as aliases like all other used variable names.
- Rename Vulture.used_vars to Vulture.used_names.
- Use function for determining which imports to ignore.
- Only try to import each whitelist file once.
- Store used names and used attributes in sets instead of lists.
- Fix estimating the size of code containing ellipses (...).
- Refactor and simplify code.
- Don't ignore __foo variable names.
- Use separate methods for determining whether to ignore classes and functions.
- Only try to find a whitelist for each defined import once (thanks @roivanov).
- Fix finding the last child for many types of AST nodes.
- Make --sort-by-size faster and more accurate (thanks @RJ722).
- Add get_unused_code() method.
- Return with exit code 1 when syntax errors are found or files can't be read.
- Differentiate between unused classes and functions (thanks @RJ722).
- Add --sort-by-size option (thanks @jackric and @RJ722).
- Count imports as used if they are accessed as module attributes.
- Automatically include whitelists based on imported modules (thanks @RJ722).
- Add --version parameter (thanks @RJ722).
- Add appveyor tests for testing on Windows (thanks @RJ722).
- Add stub whitelist file for Python standard library (thanks @RJ722)
- Ignore class names starting with "Test" in "test_" files (thanks @thisch).
- Ignore "test_" functions only in "test_" files.
- Ignore star-imported names since we cannot detect whether they are used.
- Move repository to GitHub.
- Detect unused imports.
- Use tokenize.open() on Python >= 3.2 for reading input files, assume UTF-8 encoding on older Python versions.
- Use the system's default encoding when reading files.
- Report syntax errors instead of aborting.
- Detect unused function and method arguments (issue #15).
- Detect unused *args and **kwargs parameters.
- Change license from GPL to MIT.
- Don't flag attributes as unused if they are used as global variables in another module (thanks Florian Bruhin).
- Don't consider "True" and "False" variable names.
- Abort with error message when invoked on .pyc files.
- Fix code for Python 3.
- Do not flag names imported with "import as" as dead code (thanks Tom Terrace).
- Exit with exitcode 1 if path on commandline can't be found.
- Test vulture with vulture using a whitelist module for false positives.
- Add tests that run vulture as a script.
- Add "python setup.py test" command for running tests.
- Add support for tox.
- Raise test coverage to 100%.
- Remove ez_setup.py.
- Ignore function names starting with "test_".
- Parse variable names in new format strings (e.g. "This is {x}".format(x="nice")).
- Only parse alphanumeric variable names in format strings and ignore types.
- Abort with exit code 1 on syntax errors.
- Support installation under Windows by using setuptools (thanks Reuben Fletcher-Costin).
- If dead code is found, exit with 1.
- Only warn if a path given on the command line cannot be found.
- Ignore unused variables starting with an underscore.
- Show warning for syntax errors instead of aborting directly.
- Print warning if a file cannot be found.
- Add support for python3
- Report unused attributes
- Find tuple assignments in comprehensions
- Scan files given on the command line even if they don't end with .py
- Only format nodes in verbose mode (gives 4x speedup).
- First release.