Package: pylint-silent
pylint-silentAutomatically add code comments to silence the output ofpylint.pylintcan be very useful in finding software bugs in python code. A good article demonstrating this isWhy Pylint is both useful and unusable, and how you can actually use it. In short, when runningpylinton existing code, it tends to output tons of messages.pylint-silentis suppose to makepylintusable. The idea is to automatically add code comments of the form# pylint: disableto silent everypylintmessage. This will allow you to deploypylintin a Continuous Integration (CI) setup. If a code commit introducesnewpylintmessages, these will be visible immediately.On top of that, all existingpylintmessages will show up as comments in the code. When you work on a piece of code and see apylintcomment, you can try to fix it.Installpylint-silentcan be installed frompypi:pip install pylint-silentUsageThe basic workflow for runningpylint-silentfor the first time is:pylint my_package > pylint.log
pylint-silent apply pylint.log
pylint my_package  # This should return a perfect 10.00 score.WARNING:pylint-silentmodifies python files in place.
It is assumed that you are using some version control system.For example, ifpylintproduced this message:test.py:35:10: W0613: Unused argument 'name' (unused-argument)pylint-silentwould add this comment:def func(name):  # pylint: disable=unused-argumentIf adding the comment would make the line too long,pylint-silentwould instead add:# pylint: disable-next=unused-argument
def very-long-function-name-with-some-arguments(first_argument, second_argument):--max-line-lengthspecfies the maximum line length.
This feature is disabled by default for compatibility with previous versions.
It is disabled by having a default maximum line length of 999.
In the future the default should change to 88.Another option is to runpylint-silent --signatureto add a signature to each generated comment:def func(name):  # pylint: disable=unused-argument; silentThis way you can easily identify which comments were generated bypylint-silent.For subsequent runs, you probably want to clear the old comments first.
Assuming you are using signatures:pylint-silent reset --signature my_package/*.py  # List all python files here
pylint my_package > pylint.log
pylint-silent apply --signature pylint.logThere are two reasons to clear old comments:Remove stale comments to code that was already fixed.pylint-silentdoes not know how to handle lines that already have a# pylintcomment in them.To reset or show statistics on all python files in a folder you might want to use thefindcommand:find my_package -name "*.py" -exec pylint-silent stats {} +
find my_package -name "*.py" -exec pylint-silent reset {} +Known limitationsIn some casespylint-silentmay break your code:FAVICON = base64.decodestring("""  # pylint: disable=deprecated-method
...Luckily, you can simply runpylinta second time to detect such cases. In this casepylintwould ignore the comment because it is part of the string. Therefore, the warning message would still show up. This code has to be fixed manually:FAVICON = base64.decodestring(  # pylint: disable=deprecated-method
"""...Another issue is that messages that involve multiple files cannot be silenced. I'm aware of two such messages:cyclic-importduplicate-codeYou could just disable these messages. Personally I think that these are relevant messages. So instead I just modifypylintscore calculation to something like:evaluation=10.0 + 0.15 - 10 * ((float(5 * error + warning + refactor + convention) / statement) * 10)The0.15artificially raises the score to 10.0 and makespylintreturn a success code. The factor of10 *increases the score sensitivity, which, by default, is way too low even for a medium sized project.pylintalso lets you disable a checks on a block of code:# pylint: disable=unused-import
import time
import sys
# pylint: enable=unused-importpylint-silentwould ignore these blocks.pylint-silent resetwould not clear these messages andpylint-silent statswould not count them.AlternativesAn alternative solution topylintnoise ispylint-ignore.
Whichever option you choose, I recommend reading their documentation about howpylintshould be used.Summarypylint's motto is:It's not just a linter that annoys you!pylint-silenthelpspylintlive up to its motto.Changelog1.4 (2024-02-11)Update compatible python versions to currently supported python 3.8 through 3.12.1.3 (2023-05-12)Mark every pylint-silent comment with a signature. Fixes #4. PR #5.Add a --max-line-length option. Fixes #3.Fix tests for pylint 2.16. Require pylint >= 2.16 for the tests.1.2 (2022-12-23)Preserve comments meant for other non-pylint tools. PR #2.1.1.2 (2022-11-30)Use pyproject.toml instead of setup.py.Update compatible python versions to currently supported python 3.7 through 3.11.Fix bug inpylint-silent statsthat got confused with=symbols in code.Document in README.md how to reset or get statistics on all files in folder.1.1.1 (2021-04-13)Preserve file permissions in generated code. Fixes #1.1.1 (2021-03-04)Ignore disable/enable blocks.Add reference to pylint-ignore in the README.Add testing based on pytest and tox.Handle missing-module-docstring correctly.1.0.1 (2020-07-22)Fix link from pypi.org to github.Fix markdown in README.md.1.0 (2020-07-20)Initial release.