Version 1.3.1

Version 1.3.0

  • Update pylint support to 2.5.2

  • Update pylint-django to 2.0.15

  • Update pyflakes support to 2.2.0

  • Update pycodestyle support to 2.6.0

  • Update pep8-naming support to 0.10.0

  • Update pyflakes to <2.3.0 and >=2.2.0

  • Update pycodestyle to <2.7.0 and >=2.6.0

  • Update vulture to 1.5

  • Drop Python 2 support

  • Add output-target field when merging profiles

  • Add support for [pycodestyle] external config section

  • Fix AttributeExceptionError being raised when ignore_paths is an integer

  • Use black on entire project

  • Add new pylint option: use_pylint_default_path_finder to make sure there’s an option to preserve pylint default behavior.

  • Update pyflakes error code list to the recent version

Version 1.2.0

Version 1.1.7




Version 1.1.5

Version 1.1.4

Version 1.1.3

Version 1.1.2

Version 1.1.1

Version 1.1

Version 1.0

Version 0.12.11

Version 0.12.10

Version 0.12.9

Version 0.12.8

Version 0.12.7

  • Enforcing pydocstyle >= 2.0.0 for API compatability reliability

Version 0.12.6

Version 0.12.5

Version 0.12.4

  • Panicky stapling of pyroma dependency until prospector is fied to not break with the new pyroma release

Version 0.12.3

Version 0.12.1

Version 0.12

Version 0.11.7

  • Wrapping all tools so that none can directly write to stdout/stderr, as this breaks the output format for things like json. Instead, it is captured and optionally included as a regular message.

Version 0.11.6

  • Yet more ‘dodgy’ encoding problem avoidance

Version 0.11.5

  • Including forgotten ‘python-targets’ value in profile serialization

Version 0.11.4

  • Prevented ‘dodgy’ tool from trying to analyse compressed text data

Version 0.11.3

  • Fixed encoding of file contents handling by tool “dodgy” under Python3

Version 0.11.2

  • Fixed a file encoding detection issue when running under Python3

  • If a pylint plugin is specified in a .pylintrc file which cannot be loaded, prospector will now carry on with a warning rather than simply crash

Version 0.11.1

Version 0.11

Version 0.10.2

  • Added information to summary to explain what external configuration was used (if any) to configure the underlying tools

  • Fixed supression-token search to use (or at least guess) correct file encoding

Version 0.10.1

Version 0.10

Version 0.9.10

  • The profile validator would load any file whose name was a subset of ‘.prospector.yaml’ due to using the incorrect comparison operator.

  • Fixing a crash when using an empty ignore-patterns list in a profile.

  • Fixing a crash when a profile is not valid YAML at all.

  • [#105]( pyflakes was not correctly ignoring errors.

Version 0.9.9

  • 1.6.0 added new messages, which are now in prospector’s built-in profiles

Version 0.9.8

  • Fixing a crash when using pep8 1.6.0 due to the pep8 tool renaming something that Prospector uses

Version 0.9.7

  • [#104]( The previous attempt at normalising bytestrings and unicode in Python 2 was clumsily done and a bit broken. It is hopefully now using the correct voodoo incantations to get characters from one place to another.

  • The blender combinations were not updated to use the new PyFlakes error codes; this is now fixed.

Version 0.9.6

  • The profile validator tool was always outputting absolute paths in messages. This is now fixed.

  • The “# NOQA” checking was using absolute paths incorrectly, which meant the message locations (with relative paths) did not match up and no messages were suppressed.

Version 0.9.5

  • Fixed a problem with profile serialising where it was using the incorrect dict value for strictness

Version 0.9.4

  • The previous PEP257 hack was not compatible with older versions of pep257.

Version 0.9.3

  • The PEP257 tool sets a logging level of DEBUG globally when imported as of version 0.4.1, and this causes huge amounts of tokenzing debug to be output. Prospector now has a hacky workaround until that is fixed.

  • Extra profile information (mainly the shorthand information) is kept when parsing and serializing profiles.

Version 0.9.2

  • There were some problems related to absolute paths when loading profiles that were not in the current working directory.

Version 0.9.1

  • Mandating version 0.2.3 of pylint-plugin-utils, as the earlier ones don’t work with the add_message API changes made in pylint 1.4+

Version 0.9

  • [#102]( By default, prospector will hide pylint’s “no-member” warnings, because more often than not they are simply incorrect. They can be re-enabled with the ‘–member-warnings’ command line flag or the ‘member-warnings: true’ profile option.

  • [#101]( Code annotated with pep8/flake8 style “# noqa” comments is now understood by prospector and will lead to messages from other tools being suppressed too.

  • [#100]( Pyflakes error codes have been replaced with the same as those used in flake8, for consistency. Profiles with the old values will still work, and the profile-validator will warn you to upgrade.

  • Messages now use Pylint error symbols (‘star-args’) instead of codes (‘W0142’). This makes it much more obvious what each message means and what is happening when errors are suppressed or ignored in profiles. The old error codes will continue to work in profiles.

  • The way that profiles are handled and parsed has completely been rewritten to avoid several bugs and introduce ‘shorthand’ options to profiles. This allows profiles to specify simple options like ‘doc-warnings: true’ inside profiles and configure anything that can be configured as a command line argument. Profiles can now use options like ‘strictness: high’ or ‘doc-warnings: true’ as a shortcut for inheriting the built-in prospector profiles.

  • A new –show-profile option is available to dump the calculated profile, which is helpful for figuring out what prospector thinks it is doing.

  • Profiles now have separate ignore-paths and ignore-patterns directives to match the command line arguments. The old ignore directive remains in place for backwards compatibility and will be deprecated in the future.

  • A new tool, profile-validator, has been added. It simply checks prospector profiles and validates the settings, providing warnings if any are incorrect.

  • [#89]( and [#40]( - profile merging was not behaving exactly as intended, with later profiles not overriding earlier profiles. This is now fixed as part of the aforementioned rewrite.

  • pep257 is now included by default; however it will not run unless the ‘–doc-warnings’ flag is used.

  • pep257 messages are now properly blended with other tools’ documentation warnings

  • Path and output character encoding is now handled much better (which is to say, it is handled; previously it wasn’t at all).

Version 0.8.3

Version 0.8.2

Version 0.8.1

Version 0.8

  • Demoted frosted to be an optional tool - this is because development seems to have slowed and pyflakes has picked up again, and frosted how has several issues which are solved by pyflakes and is no longer a useful addition.

  • [#78]( Prospector can now take multiple files as a path argument, thus providing errors for several files at a time. This helps when integrating with IDEs, for example.

  • Upgrading to newer versions of Pylint and related dependencies resolves [#73](, [#75](, [#76]( and [#79](

  • [#74](, [#10]( Tools will now use any configuration specific to them by default. That is to say, if a .pylintrc file exists, then that will be used in preference to prospector’s own opinions of how to use pylint.

  • Added centralised configuration management, with an abstraction away from how prospector and each tool is actually configured.

  • Removed the “adaptors” concept. This was a sort of visitor pattern in which each tool’s configuration could be updated by an adaptor, which ‘visited’ the tool to tweak settings based on what the adaptor represented. In practise this was not useful and a confusing way to tweak behaviour - tools now configure themselves based on configuration options directly.

  • Changed the default output format to be ‘grouped’ rather than ‘text’

  • Support for Python 2.6 has been dropped, following Pylint’s lead.

  • Using pylint 1.4’s ‘unsafe’ mode, which allows it to load any C extensions (this was the behaviour for 1.3 and below). Not loading them causes many many inference errors.

  • [#65]( Resolve UnicodeDecodeErrors thrown while attempting to auto-discover modules of interest by discovering target python source file encoding (PEP263), and issuing only a warning if it fails (thanks to [Jeff Quast](

Version 0.7.3

  • Pylint dependency version restricted to 1.3, as 1.4 drops support for Python 2.6. Prospector will drop support for Python 2.6 in a 0.8 release.

  • File names ending in ‘’ will now be ignored if prospector is set to ignore tests (previously, the regular expression only ignored files ending in ‘’)

  • [#70]( Profiles starting with a .yml extension can now be autoloaded

  • [#62]( For human readable output, the summary of messages will now be printed at the end rather than at the start, so the summary will be what users see when running prospector (without piping into less etc)

Version 0.7.2

  • The E265 error from PEP8 - “Block comment should start with ‘# ‘” - has been disabled for anything except veryhigh strictness.

Version 0.7.1

Version 0.7

Version 0.6.4

  • Fixed pylint system path munging again again

Version 0.6.3

  • Fixed dodgy tool’s use of new file finder

Version 0.6.2

  • Fixed pylint system path munging again

Version 0.6.1

  • Fixed pylint system path munging

Version 0.6

Version 0.5.6 / 0.5.5

  • The pylint path handling was slightly incorrect when multiple python modules were in the same directory and importing from each other, but no package was present. If modules in such a directory imported from each other, pylint would crash, as the modules would not be in the sys.path. Note that 0.5.5 was released but this bugfix was not correctly merged before releasing. 0.5.6 contains this bugfix.

Version 0.5.4

  • Fixing a bug in the handling of relative/absolute paths in the McCabe tool

Version 0.5.3

##### New Features

  • Python 3.4 is now tested for and supported

##### Bug Fixes

Version 0.5.2

##### New Features

  • Support for new error messages introduced in recent versions of pep8 and pylint was included.

Version 0.5.1

##### New Features

  • All command line arguments can now also be specified in a tox.ini and setup.cfg (thanks to [Jason Simeone](

  • –max-line-length option can be used to override the maximum line length specified by the chosen strictness

##### Bug Fixes

Version 0.5

  • Files and paths can now be ignored using the –ignore-paths and –ignore-patterns arguments.

  • Full PEP8 compliance can be turned on using the –full-pep8 flag, which overrides the defaults in the strictness profile.

  • The PEP8 tool will now use existing config if any is found in .pep8, tox.ini, setup.cfg in the path to check, or ~/.config/pep8. These will override any other configuration specified by Prospector. If none are present, Prospector will fall back on the defaults specified by the strictness.

  • A new flag, –external-config, can be used to tweak how PEP8 treats external config. only, the default, means that external configuration will be preferred to Prospector configuration. merge means that Prospector will combine external configuration and its own values. none means that Prospector will ignore external config.

  • The –path command line argument is no longer required, and Prospector can be called with prospector path_to_check.

  • Pylint version 1.1 is now used.

  • Prospector will now run under Python3.

Version 0.4.1

  • Additional blending of messages - more messages indicating the same problem from different tools are now merged together

  • Fixed the maximum line length to 160 for medium strictness, 100 for high and 80 for very high. This affects both the pep8 tool and pylint.

Version 0.4

  • Added a changelog

  • Added support for the [dodgy]( codebase checker

  • Added support for pep8 (thanks to [Jason Simeone](

  • Added support for pyflakes (thanks to [Jason Simeone](

  • Added support for mccabe (thanks to [Jason Simeone](

  • Replaced Pylint W0312 with a custom checker. This means that warnings are only generated for inconsistent indentation characters, rather than warning if spaces were not used.

  • Some messages will now be combined if Pylint generates multiple warnings per line for what is the same cause. For example, ‘unused import from wildcard import’ messages are now combined rather than having one message per unused import from that line.

  • Messages from multiple tools will be merged if they represent the same problem.

  • Tool failure no longer kills the Prospector process but adds a message instead.

  • Tools can be enabled or disabled from profiles.

  • All style warnings can be suppressed using the –no-style-warnings command line switch.

  • Uses a newer version of [pylint-django]( for improved analysis of Django-based code.