TidyPy is a tool that encapsulates a number of other static analysis tools and makes it easy to configure, execute, and review their results.

TidyPy

https://readthedocs.org/projects/tidypy/badge/?version=latest

Overview

TidyPy is a tool that encapsulates a number of other static analysis tools and makes it easy to configure, execute, and review their results.

Features

  • It's a consolidated tool for performing static analysis on an entire Python project -- not just your *.py source files. In addition to executing a number of different tools on your code, it can also check your YAML, JSON, PO, POT, and RST files.
  • Rather than putting yet another specialized configuration file in your project, TidyPy uses the pyproject.toml file defined by PEP 518. All options for all the tools TidyPy uses are declared in one place, rather than requiring that you configure each tool in a different way.
  • Honors the pseudo-standard # noqa comment in your Python source to easily ignore issues reported by any tool.
  • Includes a number of integrations so you can use it with your favorite toolchain.
  • Includes a variety of reporters that allow you to view or use the results of TidyPy's analysis in whatever way works best for you.
  • Provides a simple API for you to implement your own tool or reporter and include it in the analysis of your project.
  • Supports both Python 2 and 3, as well as PyPy. Even runs on Windows.

Usage

When TidyPy is installed (pip install tidypy), the tidypy command should become available in your environment:

$ tidypy --help
Usage: tidypy [OPTIONS] COMMAND [ARGS]...

  A tool that executes several static analysis tools upon a Python project
  and aggregates the results.

Options:
  --version  Show the version and exit.
  --help     Show this message and exit.

Commands:
  check               Executes the tools upon the project files.
  default-config      Outputs a default configuration that can be used to
                      bootstrap your own configuration file.
  extensions          Outputs a listing of all available TidyPy extensions.
  install-vcs         Installs TidyPy as a pre-commit hook into the specified
                      VCS.
  list-codes          Outputs a listing of all known issue codes that tools
                      may report.
  purge-config-cache  Deletes the cache of configurations retrieved from
                      outside the primary configuration.
  remove-vcs          Removes the TidyPy pre-commit hook from the specified
                      VCS.

To have TidyPy analyze your project, use the check subcommand:

$ tidypy check --help
Usage: tidypy check [OPTIONS] [PATH]

  Executes the tools upon the project files.

  Accepts one argument, which is the path to the base of the Python project.
  If not specified, defaults to the current working directory.

Options:
  -x, --exclude REGEX             Specifies a regular expression matched
                                  against paths that you want to exclude from
                                  the examination. Can be specified multiple
                                  times. Overrides the expressions specified
                                  in the configuration file.
  -t, --tool [bandit|dlint|eradicate|jsonlint|manifest|mccabe|polint|pycodestyle|pydiatra|pydocstyle|pyflakes|pylint|pyroma|rstlint|secrets|vulture|yamllint]
                                  Specifies the name of a tool to use during
                                  the examination. Can be specified multiple
                                  times. Overrides the configuration file.
  -r, --report [console,csv,custom,json,null,pycodestyle,pylint,pylint-parseable,toml,yaml][:filename]
                                  Specifies the name of a report to execute
                                  after the examination. Can specify an
                                  optional output file name using the form -r
                                  report:filename. If filename is unset, the
                                  report will be written on stdout. Can be
                                  specified multiple times. Overrides the
                                  configuration file.
  -c, --config FILENAME           Specifies the path to the TidyPy
                                  configuration file to use instead of the
                                  configuration found in the project's
                                  pyproject.toml.
  --workers NUM_WORKERS           The number of workers to use to concurrently
                                  execute the tools. Overrides the
                                  configuration file.
  --disable-merge                 Disable the merging of issues from various
                                  tools when TidyPy considers them equivalent.
                                  Overrides the configuration file.
  --disable-progress              Disable the display of the progress bar.
  --disable-noqa                  Disable the ability to ignore issues using
                                  the "# noqa" comment in Python files.
  --disable-config-cache          Disable the use of the cache when retrieving
                                  configurations referenced by the "extends"
                                  option.
  --help                          Show this message and exit.

If you need to generate a skeleton configuration file with the default options, use the default-config subcommand:

$ tidypy default-config --help
Usage: tidypy default-config [OPTIONS]

  Outputs a default configuration that can be used to bootstrap your own
  configuration file.

Options:
  --pyproject  Output the config so that it can be used in a pyproject.toml
               file.
  --help       Show this message and exit.

If you'd like to see a list of the possible issue codes that could be returned, use the list-codes subcommand:

$ tidypy list-codes --help
Usage: tidypy list-codes [OPTIONS]

  Outputs a listing of all known issue codes that tools may report.

Options:
  -t, --tool [bandit|dlint|eradicate|jsonlint|manifest|mccabe|polint|pycodestyle|pydiatra|pydocstyle|pyflakes|pylint|pyroma|rstlint|secrets|vulture|yamllint]
                                  Specifies the name of a tool whose codes
                                  should be output. If not specified, defaults
                                  to all tools.
  -f, --format [toml|json|yaml|csv]
                                  Specifies the format in which the tools
                                  should be output. If not specified, defaults
                                  to TOML.
  --help                          Show this message and exit.

If you want to install or remove TidyPy as a pre-commit hook in your project's VCS, use the install-vcs/remove-vcs subcommands:

$ tidypy install-vcs --help
Usage: tidypy install-vcs [OPTIONS] VCS [PATH]

  Installs TidyPy as a pre-commit hook into the specified VCS.

  Accepts two arguments:

    VCS: The version control system to install the hook into. Choose from:
    git, hg

    PATH: The path to the base of the repository to install the hook into.
    If not specified, defaults to the current working directory.

Options:
  --strict  Whether or not the hook should prevent the commit if TidyPy finds
            issues.
  --help    Show this message and exit.

$ tidypy remove-vcs --help
Usage: tidypy remove-vcs [OPTIONS] VCS [PATH]

  Removes the TidyPy pre-commit hook from the specified VCS.

  Accepts two arguments:

    VCS: The version control system to remove the hook from. Choose from:
    git, hg

    PATH: The path to the base of the repository to remove the hook from. If
    not specified, defaults to the current working directory.

Options:
  --help  Show this message and exit.

If you'd like to enable bash completion for TidyPy, run the following in your shell (or put it in your bash startup scripts):

$ eval "$(_TIDYPY_COMPLETE=source tidypy)"

Docker

If you don't want to install TidyPy locally on your system or in your virtualenv, you can use the published Docker image:

$ docker run --rm --tty --volume=`pwd`:/project tidypy/tidypy

The command above will run tidypy check on the contents of the current directory. If you want to run it on a different directory, then change the `pwd` to whatever path you need (the goal being to mount your project directory to the container's /project volume).

Running TidyPy in this manner has a few limitiations, mostly around the fact that since TidyPy is running in its own, isolated Python environment, tools like pylint won't be able to introspect the packages your project installed locally, so it may report false positives around "import-error", "no-name-in-module", "no-member", etc.

If you want to run a command other than check, just pass that along when you invoke docker:

$ docker run --rm --tty --volume=`pwd`:/project tidypy/tidypy tidypy list-codes

Configuration

TODO

Ignoring Issues

In addition to ignoring entire files, tools, or specific issue types from tools via your configuration file, you can also use comments in your Python source files to ignore issues on specific lines. Some tools have their own built-in support and notation for doing this:

TidyPy goes beyond these tool-specific flags to implement # noqa on a global scale for Python source files. It will ignore issues for lines that have the # noqa comment, regardless of what tools raise the issues. If you only want to ignore a particular type of issue on a line, you can use syntax like the following:

# noqa: CODE1,CODE2

Or, if a particular code is used in multiple tools, you can specify the exact tool in the comment:

# noqa: pycodestyle:CODE1,pylint:CODE2

Or, if you want to ignore any issue a specific tool raises on a line, you can specify the tool:

# noqa: @pycodestyle,@pylint

You can, of course, mix and match all three notations in a single comment if you need to:

# noqa: CODE1,pylint:CODE2,@pycodestyle

You can disable TidyPy's NOQA behavior by specifying the --disable-noqa option on the command line, or by setting the noqa option to false in your configuration file. A caveat, though: currently pycodestyle and pydocstyle do not respect this option and will always honor any # noqa comments they find.

Included Tools

Out of the box, TidyPy includes support for a number of tools:

pylint
Pylint is a Python source code analyzer which looks for programming errors, helps enforcing a coding standard and sniffs for some code smells.
pycodestyle
pycodestyle is a tool to check your Python code against some of the style conventions in PEP 8.
pydocstyle
pydocstyle is a static analysis tool for checking compliance with Python docstring conventions (e.g., PEP 257).
pyroma
Pyroma tests your project's packaging friendliness.
vulture
Vulture finds unused code in Python programs.
bandit
Bandit is a security linter for Python source code.
eradicate
Eradicate finds commented-out code in Python files.
pyflakes
Pyflakes is a simple program which checks Python source files for errors.
mccabe
Ned Batchelder's script to check the McCabe cyclomatic complexity of Python code.
jsonlint
A part of the demjson package, this tool validates your JSON documents for strict conformance to the JSON specification, and to detect potential data portability issues.
yamllint
The yamllint tool, as its name implies, is a linter for YAML files.
rstlint
The restructuredtext-lint tool, as its name implies, is a linter for reStructuredText files.
polint
A part of the dennis package, this tool lints PO and POT files for problems.
manifest
Uses the check-manifest script to detect discrepancies or problems with your project's MANIFEST.in file.
pydiatra
pydiatra is yet another static checker for Python code.
secrets
The detect-secrets tool attempts to find secrets (keys, passwords, etc) within a code base.
dlint
Dlint is a tool for encouraging best coding practices and helping ensure we're writing secure Python code.

Included Reporters

TidyPy includes a number of different methods to present and/or export the results of the analysis of a project. Out of the box, it provides the following:

console
The default reporter. Prints a colored report to the console that groups issues by the file they were found in.
pylint
Prints a report to the console that is in the same format as Pylint's default output.
pylint-parseable
Prints a report to the console that is in roughly the same format as Pylint's "parseable" output.
pycodestyle
Prints a report to the console that is in the same format as pycodestyle's default output.
json
Generates a JSON-serialized object that contains the results of the analysis.
yaml
Generates a YAML-serialized object that contains the results of the analysis.
toml
Generates a TOML-serialized object that contains the results of the analysis.
csv
Generates a set of CSV records that contains the results of the analysis.
custom
Prints ouput to the console that is in the format defined by a template string specified in the project configuration. The template string is expected to be one allowed by the str.format() Python method. It will receive the following arguments: filename, line, character, tool, code, message.

Included Integrations

TidyPy includes a handful of plugins/integrations that hook it into other tools.

pytest
TidyPy can be run during execution of your pytest test suite. To enable it, you need to specify --tidypy on the command line when you run pytest, or include it as part of the addopts property in your pytest config.
nose
TidyPy can be run during execution of your nose test suite. To enable it, you can either specify --with-tidypy on the command line when you run nose, or set the with-tidypy property to 1 in your setup.cfg.
pbbt
TidyPy can be included in your PBBT scripts using the tidypy test. To enable it, you can either specify --extend=tidypy.plugin.pbbt on the command line when you run PBBT, or set the extend property in your setup.cfg or pbbt.yaml to tidypy.plugin.pbbt.

Extending TidyPy

A simple interface exists for extending TidyPy to include more and different tools and reporters. To add a tool, create a class that extends tidypy.Tool, and in your setup.py, declare an entry_point for tidypy.tools that points to your class:

entry_points={
    'tidypy.tools': [
        'mycooltool = path.to.model:MyCoolToolClassName',
    ],
}

To add a reporter, the process is nearly identical, except that you extend tidypy.Report and declare an entry_point for tidypy.reports.

FAQs

Aren't there already tools like this?
Yup. There's prospector, pylama, flake8, and ciocheck just to name a few. But, as is customary in the world of software development, if the wheel isn't as round as you'd like it to be, you must spend countless hours to reinvent it. I've tried a number of these tools (and even contributed to some), but in the end, I always found something lacking or annoying. Thus, TidyPy was born.
How do I run TidyPy on a single file?
The short answer is, you don't (at the moment, anyway). It wasn't designed with that use case in mind. TidyPy was built to analyze a whole project, and show you everything.
I tried TidyPy out on my project and it reported hundreds/thousands of issues. My ego is now bruised.

Yea, that happens. The philosophy I chose to follow with this tool is that I didn't want it to hide anything from me. I wanted its default behavior to execute every tool in its suite using their most obnoxious setting. Then, when I can see the full scope of damage, I can then decide to disable specific tools or issues via a project-level configuration. I figured if someone took the time to implement a check for a particular issue, they must think it has some value. If my tooling hides that from me by default, then I won't be able to gain any benefits from it.

In general, I don't recommend starting to use linters or other sorts of static analyzers when you think you're "done". You should incorporate them into your workflow right at the beginning of a project -- just as you would (or should) your unit tests. That way you find things early and learn from them (or disable them). It's much less daunting a task to deal with when you address them incrementally.

Contributing

Contributions are most welcome. Particularly if they're bug fixes! To hack on this code, simply clone it, and then run make setup. This will create a virtualenv with all the tools you'll need. The Makefile also has a test target for running the pytest suite, and a lint target for running TidyPy on itself.

License

TidyPy is released under the terms of the MIT License.

Comments
  • Update pyyaml requirement from >=3.12,<6 to >=3.12,<7

    Update pyyaml requirement from >=3.12,<6 to >=3.12,<7

    Updates the requirements on pyyaml to permit the latest version.

    Changelog

    Sourced from pyyaml's changelog.

    6.0 (2021-10-13)

    5.4.1 (2021-01-20)

    • yaml/pyyaml#480 -- Fix stub compat with older pyyaml versions that may unwittingly load it

    5.4 (2021-01-19)

    5.3.1 (2020-03-18)

    • yaml/pyyaml#386 -- Prevents arbitrary code execution during python/object/new constructor

    5.3 (2020-01-06)

    5.2 (2019-12-02)

    ... (truncated)

    Commits
    • 8cdff2c 6.0 release
    • a4fb55e Update Python 3.10 versions for Windows build
    • e45b964 Add Python 3.10 to tox.ini
    • 4808fba 6.0b1 release
    • d5aba40 Omnibus CI/artifact build update
    • a6d384c Various setup fixes
    • 8f3f979 No longer using appveyor
    • c274365 The yaml.load{,_all} functions require Loader= now
    • 2f87ac4 Add a basic test file for yaml.load and yaml.dump
    • 7bd92df Makefile tweaks
    • Additional commits viewable in compare view

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
  • Unable to run after clean install

    Unable to run after clean install

    Hi,

    This project looks super interesting. Unfortunately, I tried installing and running it, and it seems that tidypy has some conflicting dependencies/sub-dependencies.

    Any advice would be greatly appreciated!

    aa:~/git/repo [branch]$ rmvirtualenv repo
    Removing repo...
    aa:~/git/repo [branch]$ mkvirtualenv repo
    Using base prefix '/Library/Frameworks/Python.framework/Versions/3.7'
    New python executable in /Users/aa/.virtualenvs/repo/bin/python3.7
    Also creating executable in /Users/aa/.virtualenvs/repo/bin/python
    Installing setuptools, pip, wheel...workon done.
    dvirtualenvwrapper.user_scripts creating /Users/aa/.virtualenvs/repo/bin/predeactivate
    virtualenvwrapper.user_scripts creating /Users/aa/.virtualenvs/repo/bin/postdeactivate
    virtualenvwrapper.user_scripts creating /Users/aa/.virtualenvs/repo/bin/preactivate
    virtualenvwrapper.user_scripts creating /Users/aa/.virtualenvs/repo/bin/postactivate
    virtualenvwrapper.user_scripts creating /Users/aa/.virtualenvs/repo/bin/get_env_details
    ig	aa:~/git/repo [branch]$ workon repo
    aa:~/git/repo [branch]$ which python
    /Users/aa/.virtualenvs/repo/bin/python
    aa:~/git/repo [branch]$ pip list
    piPackage    Version
    ---------- -------
    pip        18.1
    setuptools 40.4.3
    wheel      0.32.2
    p aa:~/git/repo [branch]$ pip install tidypy
    Collecting tidypy
      Using cached https://files.pythonhosted.org/packages/80/ef/4d74ccf0db57ee619cede7c4672d59551b4d0bf283a4fd7fa7877443a514/tidypy-0.6.0-py2.py3-none-any.whl
    Collecting tqdm<5,>=4.11 (from tidypy)
      Using cached https://files.pythonhosted.org/packages/91/55/8cb23a97301b177e9c8e3226dba45bb454411de2cbd25746763267f226c2/tqdm-4.28.1-py2.py3-none-any.whl
    Collecting pydiatra<0.13,>=0.12.2 (from tidypy)
    Collecting basicserial<0.2,>=0.1 (from tidypy)
      Using cached https://files.pythonhosted.org/packages/80/6f/0da8ffa2fc03f122539cc42581e1736c98fb5021d7e362e7911b77e27494/basicserial-0.1.0-py2.py3-none-any.whl
    Collecting pyroma<3,>=2.2 (from tidypy)
      Using cached https://files.pythonhosted.org/packages/63/26/6a894d85cd510ed59c991d4b64d025308e1ee1294251e88aadbdd5659c0b/pyroma-2.4-py2.py3-none-any.whl
    Collecting detect-secrets<0.11,>=0.9.1 (from tidypy)
      Using cached https://files.pythonhosted.org/packages/57/03/db1ea045e762b4f7269653549225332eb48c9199876f094d190c3efd8968/detect_secrets-0.10.4-py2.py3-none-any.whl
    Collecting pyyaml<5,>=3.12 (from tidypy)
    Collecting check-manifest<0.38,>=0.37 (from tidypy)
      Using cached https://files.pythonhosted.org/packages/7a/6a/a723e3a5b2844f47a522013738fea914c9f68d1ef576c97238409bd42e84/check_manifest-0.37-py2.py3-none-any.whl
    Collecting pyflakes<1.7,>=1.5 (from tidypy)
      Using cached https://files.pythonhosted.org/packages/d7/40/733bcc64da3161ae4122c11e88269f276358ca29335468005cb0ee538665/pyflakes-1.6.0-py2.py3-none-any.whl
    Collecting restructuredtext-lint<2,>=1.1 (from tidypy)
    Collecting dennis<1,>=0.9 (from tidypy)
      Using cached https://files.pythonhosted.org/packages/2d/2e/2cb43a5e787387b558d2eeefc2713305d2df97c4622cee37b1e6f5505031/dennis-0.9-py2.py3-none-any.whl
    Collecting click<8,>=6 (from tidypy)
      Using cached https://files.pythonhosted.org/packages/fa/37/45185cb5abbc30d7257104c434fe0b07e5a195a6847506c074527aa599ec/Click-7.0-py2.py3-none-any.whl
    Collecting vulture<0.30,>=0.25 (from tidypy)
      Using cached https://files.pythonhosted.org/packages/1b/40/92d0b666eaa19bd5aa81a5fc066841f43e7ff140b17eaababb27c5782b4d/vulture-0.29-py2.py3-none-any.whl
    Collecting demjson<3,>=2.2.4 (from tidypy)
    Collecting six (from tidypy)
      Using cached https://files.pythonhosted.org/packages/67/4b/141a581104b1f6397bfa78ac9d43d8ad29a7ca43ea90a2d863fe3056e86a/six-1.11.0-py2.py3-none-any.whl
    Collecting pytoml<0.2,>=0.1 (from tidypy)
    Collecting pydocstyle<3,>=2 (from tidypy)
      Using cached https://files.pythonhosted.org/packages/43/8a/f1141af0c8406788a5c38ad5001d4163d903b5384a6517239d2ac42734c8/pydocstyle-2.1.1-py3-none-any.whl
    Collecting pycodestyle<2.4,>=2.3 (from tidypy)
      Using cached https://files.pythonhosted.org/packages/e4/81/78fe51eb4038d1388b7217dd63770b0f428370207125047312886c923b26/pycodestyle-2.3.1-py2.py3-none-any.whl
    Collecting yamllint<2,>=1.8 (from tidypy)
      Using cached https://files.pythonhosted.org/packages/c5/9c/2d1977d1898caf4133dab2b3a9668e3437d96a3ce09979bc996dfcd231e9/yamllint-1.12.1-py2.py3-none-any.whl
    Collecting pep8-naming<0.8,>=0.4 (from tidypy)
      Using cached https://files.pythonhosted.org/packages/39/bb/a34544c789e7e5458ed2db6cbd1c8e227bb01e4ce03a0b15ec4ec93e486d/pep8_naming-0.7.0-py2.py3-none-any.whl
    Collecting pylint<2.2,>=2; python_version >= "3.4" (from tidypy)
      Using cached https://files.pythonhosted.org/packages/6e/c2/1e97c238877b6a86562d32297eb33a6670b6220e8ec0ca85f67b66dc893f/pylint-2.1.1-py3-none-any.whl
    Collecting requests<3,>=2 (from tidypy)
      Downloading https://files.pythonhosted.org/packages/f1/ca/10332a30cb25b627192b4ea272c351bce3ca1091e541245cccbace6051d8/requests-2.20.0-py2.py3-none-any.whl (60kB)
        100% |████████████████████████████████| 61kB 1.2MB/s
    Collecting bandit<2,>=1.4 (from tidypy)
      Using cached https://files.pythonhosted.org/packages/da/94/34afbe0c28b0c35f5116955c86c20599b3c732ddc1b2c452f190760ebfbf/bandit-1.5.1-py2.py3-none-any.whl
    Collecting mccabe<0.7,>=0.6 (from tidypy)
      Using cached https://files.pythonhosted.org/packages/87/89/479dc97e18549e21354893e4ee4ef36db1d237534982482c3681ee6e7b57/mccabe-0.6.1-py2.py3-none-any.whl
    Collecting iso8601 (from basicserial<0.2,>=0.1->tidypy)
      Using cached https://files.pythonhosted.org/packages/ef/57/7162609dab394d38bbc7077b7ba0a6f10fb09d8b7701ea56fa1edc0c4345/iso8601-0.1.12-py2.py3-none-any.whl
    Requirement already satisfied: setuptools in /Users/aa/.virtualenvs/repo/lib/python3.7/site-packages (from pyroma<3,>=2.2->tidypy) (40.4.3)
    Collecting docutils (from pyroma<3,>=2.2->tidypy)
      Using cached https://files.pythonhosted.org/packages/36/fa/08e9e6e0e3cbd1d362c3bbee8d01d0aedb2155c4ac112b19ef3cae8eed8d/docutils-0.14-py3-none-any.whl
    Collecting unidiff (from detect-secrets<0.11,>=0.9.1->tidypy)
      Using cached https://files.pythonhosted.org/packages/68/52/c7278fc3c17d1aaade84597968d88f97f0f4ec7288ddedb6970a341c5170/unidiff-0.5.5-py2.py3-none-any.whl
    Collecting polib>=1.0.8 (from dennis<1,>=0.9->tidypy)
      Using cached https://files.pythonhosted.org/packages/30/a2/e407c3b00cace3d7fc8df14d364deeecfeb96044e1a317de583bc26eae58/polib-1.1.0-py2.py3-none-any.whl
    Collecting snowballstemmer (from pydocstyle<3,>=2->tidypy)
      Using cached https://files.pythonhosted.org/packages/d4/6c/8a935e2c7b54a37714656d753e4187ee0631988184ed50c0cf6476858566/snowballstemmer-1.2.1-py2.py3-none-any.whl
    Collecting pathspec>=0.5.3 (from yamllint<2,>=1.8->tidypy)
    Collecting flake8-polyfill<2,>=1.0.2 (from pep8-naming<0.8,>=0.4->tidypy)
      Using cached https://files.pythonhosted.org/packages/86/b5/a43fed6fd0193585d17d6faa7b85317d4461f694aaed546098c69f856579/flake8_polyfill-1.0.2-py2.py3-none-any.whl
    Collecting astroid>=2.0.0 (from pylint<2.2,>=2; python_version >= "3.4"->tidypy)
      Using cached https://files.pythonhosted.org/packages/19/92/6f6d3591c429dbdb31c18d8476ba1af08d5973d7cc09f66346109e9de7fb/astroid-2.0.4-py3-none-any.whl
    Collecting isort>=4.2.5 (from pylint<2.2,>=2; python_version >= "3.4"->tidypy)
      Using cached https://files.pythonhosted.org/packages/1f/2c/22eee714d7199ae0464beda6ad5fedec8fee6a2f7ffd1e8f1840928fe318/isort-4.3.4-py3-none-any.whl
    Collecting idna<2.8,>=2.5 (from requests<3,>=2->tidypy)
      Using cached https://files.pythonhosted.org/packages/4b/2a/0276479a4b3caeb8a8c1af2f8e4355746a97fab05a372e4a2c6a6b876165/idna-2.7-py2.py3-none-any.whl
    Collecting urllib3<1.25,>=1.21.1 (from requests<3,>=2->tidypy)
      Downloading https://files.pythonhosted.org/packages/8c/4b/5cbc4cb46095f369117dcb751821e1bef9dd86a07c968d8757e9204c324c/urllib3-1.24-py2.py3-none-any.whl (117kB)
        100% |████████████████████████████████| 122kB 2.1MB/s
    Collecting certifi>=2017.4.17 (from requests<3,>=2->tidypy)
      Using cached https://files.pythonhosted.org/packages/56/9d/1d02dd80bc4cd955f98980f28c5ee2200e1209292d5f9e9cc8d030d18655/certifi-2018.10.15-py2.py3-none-any.whl
    Collecting chardet<3.1.0,>=3.0.2 (from requests<3,>=2->tidypy)
      Using cached https://files.pythonhosted.org/packages/bc/a9/01ffebfb562e4274b6487b4bb1ddec7ca55ec7510b22e4c51f14098443b8/chardet-3.0.4-py2.py3-none-any.whl
    Collecting GitPython>=1.0.1 (from bandit<2,>=1.4->tidypy)
      Using cached https://files.pythonhosted.org/packages/fe/e5/fafe827507644c32d6dc553a1c435cdf882e0c28918a5bab29f7fbebfb70/GitPython-2.1.11-py2.py3-none-any.whl
    Collecting stevedore>=1.20.0 (from bandit<2,>=1.4->tidypy)
      Using cached https://files.pythonhosted.org/packages/35/fa/8683fab2a6e15ecfe107996e56fab91e52fe3ec0b40ca9440a0e1ffe6892/stevedore-1.30.0-py2.py3-none-any.whl
    Collecting flake8 (from flake8-polyfill<2,>=1.0.2->pep8-naming<0.8,>=0.4->tidypy)
      Using cached https://files.pythonhosted.org/packages/34/a6/49e2849a0e5464e1b5d621f63bc8453066f0f367bb3b744a33fca0bc1ddd/flake8-3.6.0-py2.py3-none-any.whl
    Collecting wrapt (from astroid>=2.0.0->pylint<2.2,>=2; python_version >= "3.4"->tidypy)
    Collecting lazy-object-proxy (from astroid>=2.0.0->pylint<2.2,>=2; python_version >= "3.4"->tidypy)
    Collecting gitdb2>=2.0.0 (from GitPython>=1.0.1->bandit<2,>=1.4->tidypy)
      Using cached https://files.pythonhosted.org/packages/da/30/a407568aa8d8f25db817cf50121a958722f3fc5f87e3a6fba1f40c0633e3/gitdb2-2.0.5-py2.py3-none-any.whl
    Collecting pbr!=2.1.0,>=2.0.0 (from stevedore>=1.20.0->bandit<2,>=1.4->tidypy)
      Using cached https://files.pythonhosted.org/packages/76/0c/304d968fe010ba7c2ecc1d57e28741ddd3a305439dcf1cdb3b6f896a3c00/pbr-5.1.0-py2.py3-none-any.whl
    Collecting smmap2>=2.0.0 (from gitdb2>=2.0.0->GitPython>=1.0.1->bandit<2,>=1.4->tidypy)
      Using cached https://files.pythonhosted.org/packages/55/d2/866d45e3a121ee15a1dc013824d58072fd5c7799c9c34d01378eb262ca8f/smmap2-2.0.5-py2.py3-none-any.whl
    flake8 3.6.0 has requirement pycodestyle<2.5.0,>=2.4.0, but you'll have pycodestyle 2.3.1 which is incompatible.
    flake8 3.6.0 has requirement pyflakes<2.1.0,>=2.0.0, but you'll have pyflakes 1.6.0 which is incompatible.
    Installing collected packages: tqdm, pydiatra, iso8601, six, basicserial, docutils, pyroma, unidiff, pyyaml, detect-secrets, check-manifest, pyflakes, restructuredtext-lint, polib, click, dennis, vulture, demjson, pytoml, snowballstemmer, pydocstyle, pycodestyle, pathspec, yamllint, mccabe, flake8, flake8-polyfill, pep8-naming, wrapt, lazy-object-proxy, astroid, isort, pylint, idna, urllib3, certifi, chardet, requests, smmap2, gitdb2, GitPython, pbr, stevedore, bandit, tidypy
    tidypySuccessfully installed GitPython-2.1.11 astroid-2.0.4 bandit-1.5.1 basicserial-0.1.0 certifi-2018.10.15 chardet-3.0.4 check-manifest-0.37 click-7.0 demjson-2.2.4 dennis-0.9 detect-secrets-0.10.4 docutils-0.14 flake8-3.6.0 flake8-polyfill-1.0.2 gitdb2-2.0.5 idna-2.7 iso8601-0.1.12 isort-4.3.4 lazy-object-proxy-1.3.1 mccabe-0.6.1 pathspec-0.5.9 pbr-5.1.0 pep8-naming-0.7.0 polib-1.1.0 pycodestyle-2.3.1 pydiatra-0.12.4 pydocstyle-2.1.1 pyflakes-1.6.0 pylint-2.1.1 pyroma-2.4 pytoml-0.1.19 pyyaml-3.13 requests-2.20.0 restructuredtext-lint-1.1.3 six-1.11.0 smmap2-2.0.5 snowballstemmer-1.2.1 stevedore-1.30.0 tidypy-0.6.0 tqdm-4.28.1 unidiff-0.5.5 urllib3-1.24 vulture-0.29 wrapt-1.10.11 yamllint-1.12.1
    aa:~/git/repo [branch]$ tidypy
    Traceback (most recent call last):
      File "/Users/aa/.virtualenvs/repo/bin/tidypy", line 7, in <module>
        from tidypy.cli import main
      File "/Users/aa/.virtualenvs/repo/lib/python3.7/site-packages/tidypy/cli.py", line 66, in <module>
        for name, cls in iteritems(get_tools())
      File "/Users/aa/.virtualenvs/repo/lib/python3.7/site-packages/tidypy/config.py", line 35, in get_tools
        get_tools._CACHE[entry.name] = entry.load()
      File "/Users/aa/.virtualenvs/repo/lib/python3.7/site-packages/pkg_resources/__init__.py", line 2331, in load
        self.require(*args, **kwargs)
      File "/Users/aa/.virtualenvs/repo/lib/python3.7/site-packages/pkg_resources/__init__.py", line 2354, in require
        items = working_set.resolve(reqs, env, installer, extras=self.extras)
      File "/Users/aa/.virtualenvs/repo/lib/python3.7/site-packages/pkg_resources/__init__.py", line 786, in resolve
        raise VersionConflict(dist, req).with_context(dependent_req)
    pkg_resources.ContextualVersionConflict: (pycodestyle 2.3.1 (/Users/aa/.virtualenvs/repo/lib/python3.7/site-packages), Requirement.parse('pycodestyle<2.5.0,>=2.4.0'), {'flake8'})```
  • Update check-manifest requirement from >=0.42,<0.47 to >=0.42,<0.48

    Update check-manifest requirement from >=0.42,<0.47 to >=0.42,<0.48

    Updates the requirements on check-manifest to permit the latest version.

    Changelog

    Sourced from check-manifest's changelog.

    0.47 (2021-09-22)

    • Fix setuptools_scm workaround for packages with dashes in the name ([#145](https://github.com/mgedmin/check-manifest/issues/145) <https://github.com/mgedmin/check-manifest/issues/145>_).

    0.46 (2021-01-04)

    • The pre-commit <https://pre-commit.com>__ hook now always uses Python 3.

    0.45 (2020-10-31)

    • Add Python 3.9 support.

    • Drop Python 3.5 support.

    • Switch from pep517 to python-build <https://pypi.org/p/build>__ ( [#128](https://github.com/mgedmin/check-manifest/issues/128) <https://github.com/mgedmin/check-manifest/pull/128>__).

    • Add --no-build-isolation option so check-manifest can succeed building pep517-based distributions without an internet connection. With --no-build-isolation, you must preinstall the build-system.requires beforehand. ( [#128](https://github.com/mgedmin/check-manifest/issues/128) <https://github.com/mgedmin/check-manifest/pull/128>__).

    0.44 (2020-10-03)

    • Try to avoid passing --recurse-submodules to git ls if the project doesn't use git submodules (i.e. doesn't have a .gitsubmodules file). This should make check-manifest work again with older git versions, as long as you don't use submodules ([#124](https://github.com/mgedmin/check-manifest/issues/124) <https://github.com/mgedmin/check-manifest/issues/124>__).

    0.43 (2020-09-21)

    • Fix collecting files versioned by git when a project has submodules and GIT_INDEX_FILE is set. This bug was triggered when check-manifest was run as part of a git hook ( [#122](https://github.com/mgedmin/check-manifest/issues/122) <https://github.com/mgedmin/check-manifest/issues/122>, [#123](https://github.com/mgedmin/check-manifest/issues/123) <https://github.com/mgedmin/check-manifest/pull/123>).

    Note: check-manifest 0.43 requires git version 2.11 or later.

    ... (truncated)

    Commits
    • b50638c Preparing release 0.47
    • de873d4 Update changelog
    • 4beeefb Merge pull request #146 from zobayer1/fix_145
    • b7b2228 Fix for extracting version incorrectly from sdist filename containing dashes ...
    • 7c4403a New mypy requires me to install typestubs explicitly
    • f6ae339 Update to newer release.mk
    • 320db17 Merge pull request #142 from jugmac00/patch-1
    • 593db20 fix typo
    • 405fd63 Workaround for mypy 0.800 ignoring setup.cfg
    • 1fe56c9 Fix coveralls integration
    • Additional commits viewable in compare view

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
  • Add support for vulture options

    Add support for vulture options

    I needed to exclude the endpoints of a Sanic application from the checks with vulture.

    These endpoints were using the Flask-like decorator @app.route, so I tried adding the following section to the pyproject.toml file without success:

    [tool.tidypy.vulture.options]
    ignore-decorators = [
        "@app.route"
    ]
    

    Digging into the code, I discovered that the vulture command-line options weren't considered during tool activation, so I added support for the ones meaningful for tidypy:

    • ignore-decorators
    • ignore-names
    • min-confidence
  • Update pylint requirement from >=2,<2.11 to >=2,<2.12

    Update pylint requirement from >=2,<2.11 to >=2,<2.12

    Updates the requirements on pylint to permit the latest version.

    Changelog

    Sourced from pylint's changelog.

    What's New in Pylint 2.11.0?

    Release date: 2021-09-16

    • The python3 porting mode checker and it's py3k option were removed. You can still find it in older pylint versions.

    • raising-bad-type is now properly emitted when raising a string

    • Added new extension SetMembershipChecker with use-set-for-membership check: Emitted when using an in-place defined list or tuple to do a membership test. sets are better optimized for that.

      Closes #4776

    • Added py-version config key (if [MASTER] section). Used for version dependant checks. Will default to whatever Python version pylint is executed with.

    • CodeStyleChecker

      • Added consider-using-assignment-expr: Emitted when an assignment is directly followed by an if statement and both can be combined by using an assignment expression :=. Requires Python 3.8

        Closes #4862

    • Added consider-using-f-string: Emitted when .format() or '%' is being used to format a string.

      Closes #3592

    • Fix false positive for consider-using-with if a context manager is assigned to a variable in different paths of control flow (e. g. if-else clause).

      Closes #4751

    • https is now prefered in the documentation and http://pylint.pycqa.org correctly redirect to https://pylint.pycqa.org

      Closes #3802

    • Fix false positive for function-redefined for simple type annotations

      Closes #4936

    • Fix false positive for protected-access if a protected member is used in type hints of function definitions

    • Fix false positive dict-iter-missing-items for dictionaries only using tuples as keys

      Closes #3282

    • The unspecified-encoding checker now also checks calls to pathlib.Path().read_text() and pathlib.Path().write_text()

    ... (truncated)

    Commits

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
  • AttributeError: 'TidyPyVulture' object has no attribute 'noqa_lines'

    AttributeError: 'TidyPyVulture' object has no attribute 'noqa_lines'

    It seems that Vulture 1.5 (released 2020-05-24) has broken TidyPy.

    Error messages

        1     vulture: Unexpected exception:
              Traceback (most recent call last):
                File "/home/sjohnson/python-play/venv/lib/python3.8/site-packages/tidypy/core.py", line 53, in run
                  issues = impl.execute(finder)
                File "/home/sjohnson/python-play/venv/lib/python3.8/site-packages/tidypy/tools/vulture.py", line 130, in execute
                  self.vulture.scavenge(finder)
                File "/home/sjohnson/python-play/venv/lib/python3.8/site-packages/tidypy/tools/vulture.py", line 58, in scavenge
                  self.scan(source, filename=filepath)
                File "/home/sjohnson/python-play/venv/lib/python3.8/site-packages/tidypy/tools/vulture.py", line 73, in scan
                  self.visit(node)
                File "/home/sjohnson/python-play/venv/lib/python3.8/site-packages/vulture/core.py", line 629, in visit
                  return self.generic_visit(node)
                File "/home/sjohnson/python-play/venv/lib/python3.8/site-packages/vulture/core.py", line 663, in generic_visit
                  self.visit(item)
                File "/home/sjohnson/python-play/venv/lib/python3.8/site-packages/vulture/core.py", line 628, in visit
                  visitor(node)
                File "/home/sjohnson/python-play/venv/lib/python3.8/site-packages/vulture/core.py", line 573, in visit_FunctionDef
                  self._define(
                File "/home/sjohnson/python-play/venv/lib/python3.8/site-packages/vulture/core.py", line 497, in _define
                  if ignored(first_lineno):
                File "/home/sjohnson/python-play/venv/lib/python3.8/site-packages/vulture/core.py", line 490, in ignored
                  or noqa.ignore_line(self.noqa_lines, lineno, ERROR_CODES[typ])
              AttributeError: 'TidyPyVulture' object has no attribute 'noqa_lines'
              (tidypy:tool)
    

    Root cause

    This change in Vulture added a new attribute noqa_lines to the Vulture.scan() method, which is unfortunately copy-pasted into TidyPyVulture, which is now out of date.

    Full log

    $ mkdir src
    $ echo 'if True: X = 1' > src/run.py
    $ python3 -V
    Python 3.8.0
    $ python3 -m venv venv
    $ ./venv/bin/pip3 install tidypy
    Collecting tidypy
      Using cached https://files.pythonhosted.org/packages/c9/4f/78b8287c188a092fd6453f0f6786b7f33103c8a602fd95fe02b41e263806/tidypy-0.14.0-py3-none-any.whl
    Collecting pydocstyle<6,>=4 (from tidypy)
      Using cached https://files.pythonhosted.org/packages/cc/fb/0662498401c663606ef35b4ec6a0aca6b4121d6da8c3ac40a4e68f6ac521/pydocstyle-5.0.2-py3-none-any.whl
    Collecting basicserial<2.0,>=0.1 (from tidypy)
      Using cached https://files.pythonhosted.org/packages/6e/52/e619e85211cad107dd002f0060ae158c48411c272f99acaef611a6678e86/basicserial-1.1.0-py3-none-any.whl
    Collecting click<8,>=6 (from tidypy)
      Using cached https://files.pythonhosted.org/packages/d2/3d/fa76db83bf75c4f8d338c2fd15c8d33fdd7ad23a9b5e57eb6c5de26b430e/click-7.1.2-py2.py3-none-any.whl
    Collecting restructuredtext-lint<2,>=1.1 (from tidypy)
      Using cached https://files.pythonhosted.org/packages/36/a6/507be0d9125cd37530e96062b7f838ee1777a0e30855197964603da7b990/restructuredtext_lint-1.3.1.tar.gz
    Collecting pylint<2.6,>=2 (from tidypy)
      Using cached https://files.pythonhosted.org/packages/e8/fb/734960c55474c8f74e6ad4c8588fc44073fb9d69e223269d26a3c2435d16/pylint-2.5.3-py3-none-any.whl
    Collecting bandit<2,>=1.4 (from tidypy)
      Using cached https://files.pythonhosted.org/packages/5a/50/ff2f2c8f1f0ca1569f678eeb608c0f973b835985410985594fbee96be820/bandit-1.6.2-py2.py3-none-any.whl
    Collecting detect-secrets<0.14,>=0.11.3 (from tidypy)
      Using cached https://files.pythonhosted.org/packages/15/95/f6bada839f3446f6e279bcf7675eae6ec456b652617fbaaad70642f6d3e5/detect_secrets-0.13.1-py2.py3-none-any.whl
    Collecting check-manifest<0.42,>=0.37 (from tidypy)
      Using cached https://files.pythonhosted.org/packages/54/40/7faf80474b21b3bd3f97465a31c3204379827379c5017f5cc703eee576ec/check_manifest-0.41-py2.py3-none-any.whl
    Collecting requests<3,>=2 (from tidypy)
      Using cached https://files.pythonhosted.org/packages/45/1e/0c169c6a5381e241ba7404532c16a21d86ab872c9bed8bdcd4c423954103/requests-2.24.0-py2.py3-none-any.whl
    Collecting tqdm<5,>=4.11 (from tidypy)
      Using cached https://files.pythonhosted.org/packages/46/62/7663894f67ac5a41a0d8812d78d9d2a9404124051885af9d77dc526fb399/tqdm-4.47.0-py2.py3-none-any.whl
    Collecting pycodestyle<2.7,>=2.4 (from tidypy)
      Using cached https://files.pythonhosted.org/packages/10/5b/88879fb861ab79aef45c7e199cae3ef7af487b5603dcb363517a50602dd7/pycodestyle-2.6.0-py2.py3-none-any.whl
    Collecting pyyaml<6,>=3.12 (from tidypy)
      Using cached https://files.pythonhosted.org/packages/64/c2/b80047c7ac2478f9501676c988a5411ed5572f35d1beff9cae07d321512c/PyYAML-5.3.1.tar.gz
    Collecting toml<0.11,>=0.10 (from tidypy)
      Using cached https://files.pythonhosted.org/packages/9f/e1/1b40b80f2e1663a6b9f497123c11d7d988c0919abbf3c3f2688e448c5363/toml-0.10.1-py2.py3-none-any.whl
    Collecting pep8-naming<0.11,>=0.4 (from tidypy)
      Using cached https://files.pythonhosted.org/packages/5b/69/6018efb8ae18bd5a05f5f447666060a44aa8fe017f439c50fe8c8bd990cf/pep8_naming-0.10.0-py2.py3-none-any.whl
    Collecting mccabe<0.7,>=0.6 (from tidypy)
      Using cached https://files.pythonhosted.org/packages/87/89/479dc97e18549e21354893e4ee4ef36db1d237534982482c3681ee6e7b57/mccabe-0.6.1-py2.py3-none-any.whl
    Collecting pydiatra<0.13,>=0.12.2 (from tidypy)
      Using cached https://files.pythonhosted.org/packages/43/83/5717f46f837ebc40414f6f0342534c9ddf9c9abd0455ab708cb93b021d76/pydiatra-0.12.5.tar.gz
    Collecting eradicate<2,>=1 (from tidypy)
      Using cached https://files.pythonhosted.org/packages/65/ed/5b4506e122114f9439482d2a810ade4aa06cc4e306185931889e58b47f46/eradicate-1.0.tar.gz
    Collecting pyflakes<2.3,>=1.5 (from tidypy)
      Using cached https://files.pythonhosted.org/packages/69/5b/fd01b0c696f2f9a6d2c839883b642493b431f28fa32b29abc465ef675473/pyflakes-2.2.0-py2.py3-none-any.whl
    Collecting vulture<2,>=1.1 (from tidypy)
      Using cached https://files.pythonhosted.org/packages/b4/6a/df844d624e1e1f8a01873268850ac0976bf930164bfca141c103d39308ce/vulture-1.5-py2.py3-none-any.whl
    Collecting pyroma<3,>=2.2 (from tidypy)
      Using cached https://files.pythonhosted.org/packages/74/67/9f162a493011a3235761ea980a5ead7de189fb40c955da7555e7c82e2b20/pyroma-2.6-py2.py3-none-any.whl
    Collecting dennis<1,>=0.9 (from tidypy)
      Using cached https://files.pythonhosted.org/packages/2d/2e/2cb43a5e787387b558d2eeefc2713305d2df97c4622cee37b1e6f5505031/dennis-0.9-py2.py3-none-any.whl
    Collecting demjson<3,>=2.2.4 (from tidypy)
      Using cached https://files.pythonhosted.org/packages/96/67/6db789e2533158963d4af689f961b644ddd9200615b8ce92d6cad695c65a/demjson-2.2.4.tar.gz
    Collecting yamllint<2,>=1.8 (from tidypy)
      Using cached https://files.pythonhosted.org/packages/9e/e5/1895d308f95e44104472205df81dd6e68f326d4887c7502b90436c5bc91e/yamllint-1.23.0-py2.py3-none-any.whl
    Collecting dlint<0.11,>=0.8 (from tidypy)
      Using cached https://files.pythonhosted.org/packages/cb/78/9a3fb63fe943d3c8d47d3fdcabcfa8ed2bbe4de80eb95d550bcdb4735342/dlint-0.10.3-py2.py3-none-any.whl
    Collecting snowballstemmer (from pydocstyle<6,>=4->tidypy)
      Using cached https://files.pythonhosted.org/packages/7d/4b/cdf1113a0e88b641893b814e9c36f69a6fda28cd88b62c7f0d858cde3166/snowballstemmer-2.0.0-py2.py3-none-any.whl
    Collecting iso8601 (from basicserial<2.0,>=0.1->tidypy)
      Using cached https://files.pythonhosted.org/packages/ef/57/7162609dab394d38bbc7077b7ba0a6f10fb09d8b7701ea56fa1edc0c4345/iso8601-0.1.12-py2.py3-none-any.whl
    Collecting docutils<1.0,>=0.11 (from restructuredtext-lint<2,>=1.1->tidypy)
      Using cached https://files.pythonhosted.org/packages/81/44/8a15e45ffa96e6cf82956dd8d7af9e666357e16b0d93b253903475ee947f/docutils-0.16-py2.py3-none-any.whl
    Collecting astroid<=2.5,>=2.4.0 (from pylint<2.6,>=2->tidypy)
      Using cached https://files.pythonhosted.org/packages/24/a8/5133f51967fb21e46ee50831c3f5dda49e976b7f915408d670b1603d41d6/astroid-2.4.2-py3-none-any.whl
    Collecting isort<5,>=4.2.5 (from pylint<2.6,>=2->tidypy)
      Using cached https://files.pythonhosted.org/packages/e5/b0/c121fd1fa3419ea9bfd55c7f9c4fedfec5143208d8c7ad3ce3db6c623c21/isort-4.3.21-py2.py3-none-any.whl
    Collecting stevedore>=1.20.0 (from bandit<2,>=1.4->tidypy)
      Using cached https://files.pythonhosted.org/packages/45/62/aa4c77e0f0899b7697445d8126fd099473452488d70f877426812c2ce982/stevedore-2.0.1-py3-none-any.whl
    Collecting six>=1.10.0 (from bandit<2,>=1.4->tidypy)
      Using cached https://files.pythonhosted.org/packages/ee/ff/48bde5c0f013094d729fe4b0316ba2a24774b3ff1c52d924a8a4cb04078a/six-1.15.0-py2.py3-none-any.whl
    Collecting GitPython>=1.0.1 (from bandit<2,>=1.4->tidypy)
      Using cached https://files.pythonhosted.org/packages/8c/f9/c315aa88e51fabdc08e91b333cfefb255aff04a2ee96d632c32cb19180c9/GitPython-3.1.3-py3-none-any.whl
    Collecting pep517 (from check-manifest<0.42,>=0.37->tidypy)
      Using cached https://files.pythonhosted.org/packages/43/f6/4af3567c136e8e1620f6fcff665f9a478e68d06f9c990d0f2717cf9a2b8c/pep517-0.8.2-py2.py3-none-any.whl
    Collecting chardet<4,>=3.0.2 (from requests<3,>=2->tidypy)
      Using cached https://files.pythonhosted.org/packages/bc/a9/01ffebfb562e4274b6487b4bb1ddec7ca55ec7510b22e4c51f14098443b8/chardet-3.0.4-py2.py3-none-any.whl
    Collecting idna<3,>=2.5 (from requests<3,>=2->tidypy)
      Using cached https://files.pythonhosted.org/packages/a2/38/928ddce2273eaa564f6f50de919327bf3a00f091b5baba8dfa9460f3a8a8/idna-2.10-py2.py3-none-any.whl
    Collecting certifi>=2017.4.17 (from requests<3,>=2->tidypy)
      Using cached https://files.pythonhosted.org/packages/5e/c4/6c4fe722df5343c33226f0b4e0bb042e4dc13483228b4718baf286f86d87/certifi-2020.6.20-py2.py3-none-any.whl
    Collecting urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 (from requests<3,>=2->tidypy)
      Using cached https://files.pythonhosted.org/packages/e1/e5/df302e8017440f111c11cc41a6b432838672f5a70aa29227bf58149dc72f/urllib3-1.25.9-py2.py3-none-any.whl
    Collecting flake8-polyfill<2,>=1.0.2 (from pep8-naming<0.11,>=0.4->tidypy)
      Using cached https://files.pythonhosted.org/packages/86/b5/a43fed6fd0193585d17d6faa7b85317d4461f694aaed546098c69f856579/flake8_polyfill-1.0.2-py2.py3-none-any.whl
    Requirement already satisfied: setuptools in ./venv/lib/python3.8/site-packages (from pyroma<3,>=2.2->tidypy) (41.2.0)
    Collecting pygments (from pyroma<3,>=2.2->tidypy)
      Using cached https://files.pythonhosted.org/packages/2d/68/106af3ae51daf807e9cdcba6a90e518954eb8b70341cee52995540a53ead/Pygments-2.6.1-py3-none-any.whl
    Collecting polib>=1.0.8 (from dennis<1,>=0.9->tidypy)
      Using cached https://files.pythonhosted.org/packages/30/a2/e407c3b00cace3d7fc8df14d364deeecfeb96044e1a317de583bc26eae58/polib-1.1.0-py2.py3-none-any.whl
    Collecting pathspec>=0.5.3 (from yamllint<2,>=1.8->tidypy)
      Using cached https://files.pythonhosted.org/packages/5d/d0/887c58853bd4b6ffc7aa9cdba4fc57d7b979b45888a6bd47e4568e1cf868/pathspec-0.8.0-py2.py3-none-any.whl
    Collecting flake8<4.0.0,>=3.6.0 (from dlint<0.11,>=0.8->tidypy)
      Using cached https://files.pythonhosted.org/packages/6c/20/6326a9a0c6f0527612bae748c4c03df5cd69cf06dfb2cf59d85c6e165a6a/flake8-3.8.3-py2.py3-none-any.whl
    Collecting wrapt~=1.11 (from astroid<=2.5,>=2.4.0->pylint<2.6,>=2->tidypy)
    Collecting lazy-object-proxy==1.4.* (from astroid<=2.5,>=2.4.0->pylint<2.6,>=2->tidypy)
      Using cached https://files.pythonhosted.org/packages/34/8c/74acd0ad5a0518be9e0f3b4d022e84da0c1d9b78972afce73259ac85d78b/lazy_object_proxy-1.4.3-cp38-cp38-manylinux1_x86
    _64.whl
    Collecting pbr!=2.1.0,>=2.0.0 (from stevedore>=1.20.0->bandit<2,>=1.4->tidypy)
      Using cached https://files.pythonhosted.org/packages/96/ba/aa953a11ec014b23df057ecdbc922fdb40ca8463466b1193f3367d2711a6/pbr-5.4.5-py2.py3-none-any.whl
    Collecting gitdb<5,>=4.0.1 (from GitPython>=1.0.1->bandit<2,>=1.4->tidypy)
      Using cached https://files.pythonhosted.org/packages/48/11/d1800bca0a3bae820b84b7d813ad1eff15a48a64caea9c823fc8c1b119e8/gitdb-4.0.5-py3-none-any.whl
    Collecting smmap<4,>=3.0.1 (from gitdb<5,>=4.0.1->GitPython>=1.0.1->bandit<2,>=1.4->tidypy)
      Using cached https://files.pythonhosted.org/packages/b0/9a/4d409a6234eb940e6a78dfdfc66156e7522262f5f2fecca07dc55915952d/smmap-3.0.4-py2.py3-none-any.whl
    Installing collected packages: snowballstemmer, pydocstyle, iso8601, basicserial, click, docutils, restructuredtext-lint, mccabe, six, wrapt, lazy-object-proxy, astroid, 
    isort, toml, pylint, pbr, stevedore, pyyaml, smmap, gitdb, GitPython, bandit, chardet, idna, certifi, urllib3, requests, detect-secrets, pep517, check-manifest, tqdm, pyc
    odestyle, pyflakes, flake8, flake8-polyfill, pep8-naming, pydiatra, eradicate, vulture, pygments, pyroma, polib, dennis, demjson, pathspec, yamllint, dlint, tidypy
      Running setup.py install for restructuredtext-lint: started
        Running setup.py install for restructuredtext-lint: finished with status 'done'
      Running setup.py install for pyyaml: started
        Running setup.py install for pyyaml: finished with status 'done'
      Running setup.py install for pydiatra: started
        Running setup.py install for pydiatra: finished with status 'done'
      Running setup.py install for eradicate: started
        Running setup.py install for eradicate: finished with status 'done'
      Running setup.py install for demjson: started
        Running setup.py install for demjson: finished with status 'done'
    Successfully installed GitPython-3.1.3 astroid-2.4.2 bandit-1.6.2 basicserial-1.1.0 certifi-2020.6.20 chardet-3.0.4 check-manifest-0.41 click-7.1.2 demjson-2.2.4 dennis-0
    .9 detect-secrets-0.13.1 dlint-0.10.3 docutils-0.16 eradicate-1.0 flake8-3.8.3 flake8-polyfill-1.0.2 gitdb-4.0.5 idna-2.10 iso8601-0.1.12 isort-4.3.21 lazy-object-proxy-1
    .4.3 mccabe-0.6.1 pathspec-0.8.0 pbr-5.4.5 pep517-0.8.2 pep8-naming-0.10.0 polib-1.1.0 pycodestyle-2.6.0 pydiatra-0.12.5 pydocstyle-5.0.2 pyflakes-2.2.0 pygments-2.6.1 py
    lint-2.5.3 pyroma-2.6 pyyaml-5.3.1 requests-2.24.0 restructuredtext-lint-1.3.1 six-1.15.0 smmap-3.0.4 snowballstemmer-2.0.0 stevedore-2.0.1 tidypy-0.14.0 toml-0.10.1 tqdm
    -4.47.0 urllib3-1.25.9 vulture-1.5 wrapt-1.12.1 yamllint-1.23.0
    WARNING: You are using pip version 19.2.3, however version 20.1.1 is available.
    You should consider upgrading via the 'pip install --upgrade pip' command.
    $ (cd src && ../venv/bin/tidypy check)
    Analyzing |██▉       |  29% [00:00, current=bandit,eradicate,polint,pycodestyle]
    Analyzing |███████   |  71% [00:00, current=pycodestyle,pylint,sec,pylint,secrets]  
    Analyzing |██████████| 100% [00:00]                                             
    Analyzing |██████████| 100% [00:00]. (1)
        1     vulture: Unexpected exception:
              Traceback (most recent call last):
                File "/home/sjohnson/python-play/venv/lib/python3.8/site-packages/tidypy/core.py", line 53, in run
                  issues = impl.execute(finder)
                File "/home/sjohnson/python-play/venv/lib/python3.8/site-packages/tidypy/tools/vulture.py", line 130, in execute
                  self.vulture.scavenge(finder)
                File "/home/sjohnson/python-play/venv/lib/python3.8/site-packages/tidypy/tools/vulture.py", line 58, in scavenge
                  self.scan(source, filename=filepath)
                File "/home/sjohnson/python-play/venv/lib/python3.8/site-packages/tidypy/tools/vulture.py", line 73, in scan
                  self.visit(node)
                File "/home/sjohnson/python-play/venv/lib/python3.8/site-packages/vulture/core.py", line 629, in visit
                  return self.generic_visit(node)
                File "/home/sjohnson/python-play/venv/lib/python3.8/site-packages/vulture/core.py", line 663, in generic_visit
                  self.visit(item)
                File "/home/sjohnson/python-play/venv/lib/python3.8/site-packages/vulture/core.py", line 628, in visit
                  visitor(node)
                File "/home/sjohnson/python-play/venv/lib/python3.8/site-packages/vulture/core.py", line 585, in visit_If
                  self._handle_conditional_node(node, "if")
                File "/home/sjohnson/python-play/venv/lib/python3.8/site-packages/vulture/core.py", line 435, in _handle_conditional_node
                  self._define(
                File "/home/sjohnson/python-play/venv/lib/python3.8/site-packages/vulture/core.py", line 497, in _define
                  if ignored(first_lineno):
                File "/home/sjohnson/python-play/venv/lib/python3.8/site-packages/vulture/core.py", line 490, in ignored
                  or noqa.ignore_line(self.noqa_lines, lineno, ERROR_CODES[typ])
              AttributeError: 'TidyPyVulture' object has no attribute 'noqa_lines'
              (tidypy:tool)
    
    run.py (5)
        1     Missing docstring in public module (pydocstyle:D100)
        1     Missing module docstring (pylint:missing-module-docstring)
        1     Using a conditional statement with a constant value (pylint:using-constant-test)
        1:8   multiple statements on one line (colon) (pycodestyle:E701)
        1:10  More than one statement on a single line (pylint:multiple-statements)
    
    ✗ 6 issues found.
    
  • Unconfigurable report format

    Unconfigurable report format

    I try to use tidypy in Jenkins pipeline, pylint reporting. Jenkins expect format: {path}:{line}: [{msg_id}({symbol}), {obj}] {msg} tidypy use format '{type}:{line:>3},{character:>2}: {message} ({code}@{tool})'

    I think it's pretty simple to add configurable reporting formatter.

  • Update dennis requirement from >=0.9,<1 to >=0.9,<2

    Update dennis requirement from >=0.9,<1 to >=0.9,<2

    Updates the requirements on dennis to permit the latest version.

    Changelog

    Sourced from dennis's changelog.

    Version 1.1.0: June 22nd, 2022

    • cb9f9e5 Handle double braces when linting

    Version 1.0.0: June 10th, 2022

    • b38a678 Drop Python 3.5/3.6; add Python 3.9/3.10 (#122, #123, #124, #125)

    • b6d34d7 Redo tarrminal printin' and colorr (#71)

      There's an additional backwards-incompatible change here in which we drop the --color and --no-color arguments from dennis-cmd lint.

    • 658f951 Document dubstep (#74)

    • adb4ae1 Rework CI so it uses a matrix

    • transfer project from willkg to mozilla for ongoing maintenance and support

    Version 0.9.0: February 2nd, 2017

    • dfc0b68 Remove th' django shims

      This is a backwards-incompatible change. If you need them back, then you should pull the code and add it to your project.

      Why remove them? They weren't tested in any way, possibly didn't work with new Django versions and weren't really supported.

    • 033d88d Remove click varrsion pinnin'

    • 9241ff7 Fix filename printin'

    Version 0.8.0: January 3rd, 2017

    • b0705f4 Clean up pytest code and drop Python 2.6 bits
    • d27790b Fix th' --varformat flag to alloww nay formats (#83)
    • 3bf0929 Switch travis sudo flag
    • 990c842 Update requirements
    • 0d00ad4 Add travis supparrt
    • 528fcc1 Fix support for Python 3.5 (Thanks John Vandenberg!)
    • 700490d Add Travis CI testing (#88)
    • a59a9bb Fix translation o' plurals (#79)
    • aca57f6 Fix false positive wit' InvalidVarsLintRule (#78)
    • 581f230 Add note about --check-headerr flag to recipes
    • bce6308 Fix PythonBraceFormat regexp to handle spaces
    • 7016ee4 Add .cache to .gitignore
    • 05a4e14 Collapse th' whitespace in text in th' html transform
    • 75fa600 Prepare fer 0.8 development

    ... (truncated)

    Commits

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
  • Update pylint requirement from >=2,<2.13 to >=2,<2.14

    Update pylint requirement from >=2,<2.13 to >=2,<2.14

    Updates the requirements on pylint to permit the latest version.

    Changelog

    Sourced from pylint's changelog.

    What's New in Pylint 2.13.9?

    Release date: 2022-05-13

    • Respect ignore configuration options with --recursive=y.

      Closes #6471

    • Fix false positives for no-name-in-module and import-error for numpy.distutils and pydantic.

      Closes #6497

    • Fix IndexError crash in uninferable_final_decorators method.

    Relates to #6531

    • Fix a crash in unnecessary-dict-index-lookup when subscripting an attribute.

      Closes #6557

    • Fix a crash when accessing __code__ and assigning it to a variable.

      Closes #6539

    • Fix a false positive for undefined-loop-variable when using enumerate().

      Closes #6593

    What's New in Pylint 2.13.8?

    Release date: 2022-05-02

    • Fix a false positive for undefined-loop-variable for a variable used in a lambda inside the first of multiple loops.

      Closes #6419

    • Fix a crash when linting a file that passes an integer mode= to open

      Closes #6414

    • Avoid reporting superfluous-parens on expressions using the is not operator.

      Closes #5930

    • Fix a false positive for undefined-loop-variable when the else of a for loop raises or returns.

    ... (truncated)

    Commits
    • 57014d6 Bump pylint to 2.13.9, update changelog
    • 7d80ca5 Fix false positive for undefined-loop-variable with enumerate() (#6602)
    • 9c2fe99 Respect ignore configuration options when --recursive=y. (#6528)
    • 33f3fcf Fix a crash in unnecessary-dict-index-lookup when subscripting an attribute...
    • aecadc2 Add regression test for #6497 (#6498)
    • 2d07d47 Add regression test for #6539
    • 96c3198 Upgrade astroid version to 2.11.5
    • 18cb026 Add an exception for IndexError inside uninferable_final_decorator (#6532)
    • 45cbae2 Bump pylint to 2.13.8, update changelog
    • ec2eee8 Suppress unsubscriptable-object warnings in type-checking blocks (#5720)
    • Additional commits viewable in compare view

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
  • Update dlint requirement from >=0.8,<0.13 to >=0.8,<0.14

    Update dlint requirement from >=0.8,<0.13 to >=0.8,<0.14

    Updates the requirements on dlint to permit the latest version.

    Changelog

    Sourced from dlint's changelog.

    [0.13.0] - 2022-08-09

    Added

    • Support for Flake8 5 (#45)

    Changed

    • Support usedforsecurity=False parameter to hashlib constructors (#39)

    [0.12.0] - 2021-10-27

    Added

    • Support for Python 3.10
    • Support for Flake8 4 (#36)

    Removed

    • Support for Python 2.7 (#3)

    [0.11.0] - 2020-10-30

    Added

    • Support for Python 3.9 (#32)

    Fixed

    • False positive for DUO107 when xml.etree.ElementTree.{Element,SubElement} used (#28)
    • False positive for DUO116 when shell=False used (#31)

    Removed

    • Support for Python 3.5

    [0.10.3] - 2020-03-09

    Fixed

    • False positive for DUO138 when expressions aren't backtrackable (#14)

    [0.10.2] - 2020-02-19

    Changed

    • Cache namespace results and minimize kwarg checks by grouping similar rules - ~500% speed up (#18)
    • Only run linters that are selected - speed up depends on number of linters seleted (#19)

    Fixed

    • The --print-dlint-linters flag on Windows (#17)

    [0.10.1] - 2020-01-21

    Fixed

    • Crash in DUO138 when malformed regular expression (#15)

    [0.10.0] - 2020-01-21

    Added

    • DUO137: lint for insecure itsdangerous kwarg usage (#36)
    • DUO138: lint for regular expression catastrophic backtracking in re module (#41)

    Fixed

    • False positive for DUO137 when kwarg missing (#39)

    ... (truncated)

    Commits
    • 4c162c3 Release version 0.13.0 of Dlint
    • a742b4f feat(requirements): Support flake8 v5 (#46)
    • fcadc1b refactor: remove future imports (#43)
    • ce0b19c Update DUO130 to support hashlib constructor usedforsecurity=False param (#42)
    • f282d31 Fix common typo in doc comment of all helper classes (#41)
    • 444acdc Add GitHub static analysis paper
    • dc37434 Add some additional applied research SAST links
    • 71fcec4 Remove Python 2 universal wheel
    • fcccb97 Release version 0.12.0 of Dlint
    • be62b10 Bump CHANGELOG
    • Additional commits viewable in compare view

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
  • Bump docker/build-push-action from 2.9.0 to 3.1.1

    Bump docker/build-push-action from 2.9.0 to 3.1.1

    Bumps docker/build-push-action from 2.9.0 to 3.1.1.

    Release notes

    Sourced from docker/build-push-action's releases.

    v3.1.1

    Full Changelog: https://github.com/docker/build-push-action/compare/v3.1.0...v3.1.1

    v3.1.0

    • no-cache-filters input by @​crazy-max (#653)
    • Bump @​actions/github from 5.0.1 to 5.0.3 (#619)
    • Bump @​actions/core from 1.6.0 to 1.9.0 (#620 #637)
    • Bump csv-parse from 5.0.4 to 5.3.0 (#623 #650)

    Full Changelog: https://github.com/docker/build-push-action/compare/v3.0.0...v3.1.0

    v3.0.0

    • Node 16 as default runtime by @​crazy-max (#564)
      • This requires a minimum Actions Runner version of v2.285.0, which is by default available in GHES 3.4 or later.
    • Standalone mode support by @​crazy-max (#601 #609)
    • chore: update dev dependencies and workflow by @​crazy-max (#571)
    • Bump @​actions/exec from 1.1.0 to 1.1.1 (#573)
    • Bump @​actions/github from 5.0.0 to 5.0.1 (#582)
    • Bump minimist from 1.2.5 to 1.2.6 (#584)
    • Bump semver from 7.3.5 to 7.3.7 (#595)
    • Bump csv-parse from 4.16.3 to 5.0.4 (#533)

    Full Changelog: https://github.com/docker/build-push-action/compare/v2.10.0...v3.0.0

    v2.10.0

    • Add imageid output and use metadata to set digest output (#569)
    • Add build-contexts input (#563)
    • Enhance outputs display (#559)
    Commits
    • c84f382 Merge pull request #663 from crazy-max/fix-git-token-cond
    • cd5d0b7 Merge pull request #661 from dud225/subdir_context
    • 30a3224 Fix GitHub token not passed with Git context if subdir defined
    • 1f19633 Update comment regarding the support of subdir context
    • 67af6dc Merge pull request #657 from bendrucker/deprecated-fs-rmdir
    • 988cb09 replace deprecated fs.rmdir with fs.rm
    • 1cb9d22 Merge pull request #653 from crazy-max/no-cache-filters
    • 5ffbca1 no-cache-filters input
    • a8d76c0 Merge pull request #650 from docker/dependabot/npm_and_yarn/csv-parse-5.3.0
    • 12b1e41 Update generated content
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
  • Update check-manifest requirement from >=0.42,<0.49 to >=0.42,<0.50

    Update check-manifest requirement from >=0.42,<0.49 to >=0.42,<0.50

    Updates the requirements on check-manifest to permit the latest version.

    Changelog

    Sourced from check-manifest's changelog.

    0.49 (2022-12-05)

    • Add Python 3.11 support.

    • Drop Python 3.6 support.

    • Exclude more common dev/test files.

    0.48 (2022-03-13)

    • Add Python 3.10 support.

    • Switch to tomli instead of toml, after hearing about PEP-680. tomli will be included in the Python 3.11 standard library as tomllib, while toml is apparently unmaintained.

    • Fix submodule support when .gitmodules exists in a subdirectory ([#153](https://github.com/mgedmin/check-manifest/issues/153) <https://github.com/mgedmin/check-manifest/issues/153>). Note that this reverts a fix for [#124](https://github.com/mgedmin/check-manifest/issues/124) <https://github.com/mgedmin/check-manifest/issues/124>: git versions before 2.11 are no longer supported.

    0.47 (2021-09-22)

    • Fix setuptools_scm workaround for packages with dashes in the name ([#145](https://github.com/mgedmin/check-manifest/issues/145) <https://github.com/mgedmin/check-manifest/issues/145>_).

    0.46 (2021-01-04)

    • The pre-commit <https://pre-commit.com>__ hook now always uses Python 3.

    0.45 (2020-10-31)

    • Add Python 3.9 support.

    • Drop Python 3.5 support.

    • Switch from pep517 to python-build <https://pypi.org/p/build>__ ( [#128](https://github.com/mgedmin/check-manifest/issues/128) <https://github.com/mgedmin/check-manifest/pull/128>__).

    • Add --no-build-isolation option so check-manifest can succeed building

    ... (truncated)

    Commits
    • 00a3953 Preparing release 0.49
    • fd932df Use type annotations on class attributes
    • 45c925f isort insists on this blank line, wtf?
    • 80549f4 Fix tests on OpenIndiana where /usr/bin/false exits with 255
    • 6982e1a Merge pull request #160 from mgedmin/py311
    • 2e59b5d Support Python 3.11
    • 7b8c279 Merge pull request #159 from mgedmin/fix-git-submodule-tests-using-file-protocol
    • 1ce75c4 Try a different workaround
    • 3fc1989 git config doesn't work, try git -c
    • 227fb10 Spell the name of the file: protocol correctly
    • Additional commits viewable in compare view

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
  • Allow tidypy to run with a file, not just a folder

    Allow tidypy to run with a file, not just a folder

    This PR would allow tidypy to run on individual files too, not just a folder. Another step in my endeavour in getting it to work in vscode.

    This is obviously a very basic and simple approach, and i fully expect having to change some things. Documentation also has not been updated at all, only the docstrings.

    All tests passed with this, and trying to run a normal check on folder and file works.

  • Add prospector-json as a Reporter

    Add prospector-json as a Reporter

    Did this while trying to get tidpy to work in vscode, nothing too complex. tries to as closely as possible emulate the prospector json format, though some things had to be faked such as start/end timestamps and duration, as i couldn't figure out whether those were collected or in any way accessible for a Reporter.

    test suite + linter should have run and passed.

  • Upvote feature request for vscode-python

    Upvote feature request for vscode-python

    I created this feature request to have tidypy included in the vscode python extension. Give it a 👍

    https://github.com/microsoft/vscode-python/issues/13867

  • Configuration is undocumented

    Configuration is undocumented

    The Configuration section of the README currently says "TODO", and the command tidypy default-config doesn't even tell me what filename to use for the config it prints to stdout.

    How do I make a config file for tidypy? At least document the filename it's looking for.

  • Merge pylint:missing-docstring and pydocstyle:D100-pydocstyle:D104

    Merge pylint:missing-docstring and pydocstyle:D100-pydocstyle:D104

    Hi,

    I think the Pylint error Missing module docstring (pylint:missing-docstring) has to be merge with Missing docstring in public package (pydocstyle:D100) to Missing docstring in public module (pydocstyle:D104).

    Maybe pydocstyle erros have to be kept because they a little bit more accurate.

A static analysis tool for Python

pyanalyze Pyanalyze is a tool for programmatically detecting common mistakes in Python code, such as references to undefined variables and some catego

Dec 6, 2022
Robocop is a tool that performs static code analysis of Robot Framework code.
Robocop is a tool that performs static code analysis of Robot Framework code.

Robocop Introduction Documentation Values Requirements Installation Usage Example Robotidy FAQ Watch our talk from RoboCon 2021 about Robocop and Robo

Nov 23, 2022
Pymwp is a tool for automatically performing static analysis on programs written in C

pymwp: MWP analysis in Python pymwp is a tool for automatically performing static analysis on programs written in C, inspired by "A Flow Calculus of m

Dec 2, 2022
Learning source code review, spot vulnerability, find some ways how to fix it.

Learn Source Code Review Learning source code review, spot vulnerability, find some ways how to fix it. WordPress Plugin Authenticated Stored XSS on C

Nov 29, 2022
Optional static typing for Python 3 and 2 (PEP 484)

Mypy: Optional Static Typing for Python Got a question? Join us on Gitter! We don't have a mailing list; but we are always happy to answer questions o

Dec 3, 2022
Collection of library stubs for Python, with static types

typeshed About Typeshed contains external type annotations for the Python standard library and Python builtins, as well as third party packages as con

Dec 2, 2022
A system for Python that generates static type annotations by collecting runtime types

MonkeyType MonkeyType collects runtime types of function arguments and return values, and can automatically generate stub files or even add draft type

Dec 2, 2022
A static type analyzer for Python code

pytype - ? ✔ Pytype checks and infers types for your Python code - without requiring type annotations. Pytype can: Lint plain Python code, flagging c

Nov 30, 2022
Static type checker for Python
Static type checker for Python

Static type checker for Python Speed Pyright is a fast type checker meant for large Python source bases. It can run in a “watch” mode and performs fas

Dec 4, 2022
A simple stopwatch for measuring code performance with static typing.

A simple stopwatch for measuring code performance. This is a fork from python-stopwatch, which adds static typing and a few other things.

Feb 18, 2022
An app to show the total number of lines of code written by an user.

Lines of code Have you ever wondered how many lines of code you wrote in github? This tool will calculate it for you! To calculate the total number of

Jan 26, 2022
Code audit tool for python.

Pylama Code audit tool for Python and JavaScript. Pylama wraps these tools: pycodestyle (formerly pep8) © 2012-2013, Florent Xicluna; pydocstyle (form

Nov 30, 2022
Alarmer is a tool focus on error reporting for your application.

alarmer Alarmer is a tool focus on error reporting for your application. Installation pip install alarmer Usage It's simple to integrate alarmer in yo

Jul 3, 2022
Metrinome is an all-purpose tool for working with code complexity metrics.
Metrinome is an all-purpose tool for working with code complexity metrics.

Overview Metrinome is an all-purpose tool for working with code complexity metrics. It can be used as both a REPL and API, and includes: Converters to

Sep 27, 2022
Inspects Python source files and provides information about type and location of classes, methods etc

prospector About Prospector is a tool to analyse Python code and output information about errors, potential problems, convention violations and comple

Nov 26, 2022
Collects all accepted (partial and full scored) codes submitted within the given timeframe and saves them locally for plagiarism check.
Collects all accepted (partial and full scored) codes submitted within the given timeframe and saves them locally for plagiarism check.

Collects all accepted (partial and full scored) codes submitted within the given timeframe of any contest.

Dec 28, 2021
coala provides a unified command-line interface for linting and fixing all your code, regardless of the programming languages you use.

"Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live." ― John F. Woods coala provides a

Dec 5, 2022
Turn your Python and Javascript code into DOT flowcharts
Turn your Python and Javascript code into DOT flowcharts

Notes from 2017 This is an older project which I am no longer working on. It was built before ES6 existed and before Python 3 had much usage. While it

Nov 28, 2022
The strictest and most opinionated python linter ever!
The strictest and most opinionated python linter ever!

wemake-python-styleguide Welcome to the strictest and most opinionated python linter ever. wemake-python-styleguide is actually a flake8 plugin with s

Dec 5, 2022