217 lines
8.9 KiB
INI
217 lines
8.9 KiB
INI
[MASTER]
|
|
load-plugins=pylint.extensions.bad_builtin,
|
|
pylint.extensions.code_style,
|
|
pylint.extensions.dict_init_mutate,
|
|
pylint.extensions.dunder,
|
|
pylint.extensions.comparison_placement,
|
|
pylint.extensions.confusing_elif,
|
|
pylint.extensions.for_any_all,
|
|
pylint.extensions.consider_refactoring_into_while_condition,
|
|
pylint.extensions.check_elif,
|
|
pylint.extensions.eq_without_hash,
|
|
pylint.extensions.overlapping_exceptions,
|
|
|
|
# pylint.extensions.comparetozero,
|
|
# Takes out ``if x == 0:`` and wants you to write ``if not x:``
|
|
# but in many cases, the == 0 is actually much more clear.
|
|
|
|
# pylint.extensions.mccabe,
|
|
# We have too many too-complex methods. We should enable this and fix them
|
|
# one by one.
|
|
|
|
# pylint.extensions.redefined_variable_type,
|
|
# We use that pattern during initialization.
|
|
|
|
# magic_value wants you to not use arbitrary strings and numbers
|
|
# inline in the code. But it's overzealous and has way too many false
|
|
# positives. Trust people to do the most readable thing.
|
|
# pylint.extensions.magic_value
|
|
|
|
# Empty comment would be good, except it detects blank lines within
|
|
# a single comment block.
|
|
#
|
|
# Those are often used to separate paragraphs, like here.
|
|
# pylint.extensions.empty_comment,
|
|
|
|
# consider_ternary_expression is a nice check, but is also overzealous.
|
|
# Trust the human to do the readable thing.
|
|
# pylint.extensions.consider_ternary_expression,
|
|
|
|
# redefined_loop_name tends to catch us with things like
|
|
# for name in (a, b, c): name = name + '_column' ...
|
|
# pylint.extensions.redefined_loop_name,
|
|
|
|
# This wants you to turn ``x in (1, 2)`` into ``x in {1, 2}``.
|
|
# They both result in the LOAD_CONST bytecode, one a tuple one a
|
|
# frozenset. In theory a set lookup using hashing is faster than
|
|
# a linear scan of a tuple; but if the tuple is small, it can often
|
|
# actually be faster to scan the tuple.
|
|
# pylint.extensions.set_membership,
|
|
|
|
# Fix zope.cachedescriptors.property.Lazy; the property-classes doesn't seem to
|
|
# do anything.
|
|
# https://stackoverflow.com/questions/51160955/pylint-how-to-specify-a-self-defined-property-decorator-with-property-classes
|
|
# For releases prior to 2.14.2, this needs to be a one-line, quoted string. After that,
|
|
# a multi-line string.
|
|
# - Make zope.cachedescriptors.property.Lazy look like a property;
|
|
# fixes pylint thinking it is a method.
|
|
# - Run in Pure Python mode (ignore C extensions that respect this);
|
|
# fixes some issues with zope.interface, like IFoo.providedby(ob)
|
|
# claiming not to have the right number of parameters...except no, it does not.
|
|
init-hook =
|
|
import astroid.bases
|
|
astroid.bases.POSSIBLE_PROPERTIES.add('Lazy')
|
|
astroid.bases.POSSIBLE_PROPERTIES.add('LazyOnClass')
|
|
astroid.bases.POSSIBLE_PROPERTIES.add('readproperty')
|
|
astroid.bases.POSSIBLE_PROPERTIES.add('non_overridable')
|
|
import os
|
|
os.environ['PURE_PYTHON'] = ("1")
|
|
# Ending on a quoted string
|
|
# breaks pylint 2.14.5 (it strips the trailing quote. This is
|
|
# probably because it tries to handle one-line quoted strings as well as multi-blocks).
|
|
# The parens around it fix the issue.
|
|
|
|
extension-pkg-whitelist=gevent.greenlet,gevent.libuv._corecffi,gevent.libev._corecffi,gevent.libev._corecffi.lib,gevent.local,gevent._ident
|
|
|
|
# Control the amount of potential inferred values when inferring a single
|
|
# object. This can help the performance when dealing with large functions or
|
|
# complex, nested conditions.
|
|
# gevent: The changes for Python 3.7 in _ssl3.py lead to infinite recursion
|
|
# in pylint 2.3.1/astroid 2.2.5 in that file unless we this this to 1
|
|
# from the default of 100.
|
|
limit-inference-results=1
|
|
|
|
[MESSAGES CONTROL]
|
|
|
|
# Disable the message, report, category or checker with the given id(s). You
|
|
# can either give multiple identifier separated by comma (,) or put this option
|
|
# multiple time (only on the command line, not in the configuration file where
|
|
# it should appear only once).
|
|
# NOTE: comments must go ABOVE the statement. In Python 2, mixing in
|
|
# comments disables all directives that follow, while in Python 3, putting
|
|
# comments at the end of the line does the same thing (though Py3 supports
|
|
# mixing)
|
|
|
|
|
|
# invalid-name, ; We get lots of these, especially in scripts. should fix many of them
|
|
# protected-access, ; We have many cases of this; legit ones need to be examinid and commented, then this removed
|
|
# no-self-use, ; common in superclasses with extension points
|
|
# too-few-public-methods, ; Exception and marker classes get tagged with this
|
|
# exec-used, ; should tag individual instances with this, there are some but not too many
|
|
# global-statement, ; should tag individual instances
|
|
# multiple-statements, ; "from gevent import monkey; monkey.patch_all()"
|
|
# locally-disabled, ; yes, we know we're doing this. don't replace one warning with another
|
|
# cyclic-import, ; most of these are deferred imports
|
|
# too-many-arguments, ; these are almost always because that's what the stdlib does
|
|
# redefined-builtin, ; likewise: these tend to be keyword arguments like len= in the stdlib
|
|
# undefined-all-variable, ; XXX: This crashes with pylint 1.5.4 on Travis (but not locally on Py2/3
|
|
# ; or landscape.io on Py3). The file causing the problem is unclear. UPDATE: identified and disabled
|
|
# that file.
|
|
# see https://github.com/PyCQA/pylint/issues/846
|
|
# useless-suppression: the only way to avoid repeating it for specific statements everywhere that we
|
|
# do Py2/Py3 stuff is to put it here. Sadly this means that we might get better but not realize it.
|
|
# duplicate-code: Yeah, the compatibility ssl modules are much the same
|
|
# In pylint 1.8.0, inconsistent-return-statements are created for the wrong reasons.
|
|
# This code raises it, even though there's only one return (the implicit 'return None' is presumably
|
|
# what triggers it):
|
|
# def foo():
|
|
# if baz:
|
|
# return 1
|
|
# In Pylint 2dev1, needed for Python 3.7, we get spurious 'useless return' errors:
|
|
# @property
|
|
# def foo(self):
|
|
# return None # generates useless-return
|
|
# Pylint 2.4 adds import-outside-toplevel. But we do that a lot to defer imports because of patching.
|
|
# Pylint 2.4 adds self-assigning-variable. But we do *that* to avoid unused-import when we
|
|
# "export" the variable and don't have a __all__.
|
|
# Pylint 2.6+ adds some python-3-only things that don't apply: raise-missing-from, super-with-arguments, consider-using-f-string, redundant-u-string-prefix
|
|
# unnecessary-lambda-assignment: New check introduced in v2.14.0
|
|
# unnecessary-dunder-call: New check introduced in v2.14.0
|
|
# consider-using-assignment-expr: wants you to use the walrus operator.
|
|
# It hits way too much and its not clear they would be improvements.
|
|
# confusing-consecutive-elif: Are they though?
|
|
disable=wrong-import-position,
|
|
wrong-import-order,
|
|
missing-docstring,
|
|
ungrouped-imports,
|
|
invalid-name,
|
|
protected-access,
|
|
too-few-public-methods,
|
|
exec-used,
|
|
global-statement,
|
|
multiple-statements,
|
|
locally-disabled,
|
|
cyclic-import,
|
|
too-many-arguments,
|
|
redefined-builtin,
|
|
useless-suppression,
|
|
duplicate-code,
|
|
undefined-all-variable,
|
|
inconsistent-return-statements,
|
|
useless-return,
|
|
useless-object-inheritance,
|
|
import-outside-toplevel,
|
|
self-assigning-variable,
|
|
raise-missing-from,
|
|
super-with-arguments,
|
|
consider-using-f-string,
|
|
consider-using-assignment-expr,
|
|
redundant-u-string-prefix,
|
|
unnecessary-lambda-assignment,
|
|
unnecessary-dunder-call,
|
|
use-dict-literal,
|
|
confusing-consecutive-elif,
|
|
|
|
|
|
enable=consider-using-augmented-assign
|
|
|
|
[FORMAT]
|
|
# duplicated from setup.cfg
|
|
max-line-length=160
|
|
max-module-lines=1100
|
|
|
|
[MISCELLANEOUS]
|
|
# List of note tags to take in consideration, separated by a comma.
|
|
#notes=FIXME,XXX,TODO
|
|
# Disable that, we don't want them in the report (???)
|
|
notes=
|
|
|
|
[VARIABLES]
|
|
|
|
dummy-variables-rgx=_.*
|
|
|
|
[TYPECHECK]
|
|
|
|
# List of members which are set dynamically and missed by pylint inference
|
|
# system, and so shouldn't trigger E1101 when accessed. Python regular
|
|
# expressions are accepted.
|
|
# gevent: this is helpful for py3/py2 code.
|
|
generated-members=exc_clear
|
|
|
|
# List of classes names for which member attributes should not be checked
|
|
# (useful for classes with attributes dynamically set). This can work
|
|
# with qualified names.
|
|
#ignored-classes=SSLContext, SSLSocket, greenlet, Greenlet, parent, dead
|
|
|
|
|
|
# List of module names for which member attributes should not be checked
|
|
# (useful for modules/projects where namespaces are manipulated during runtime
|
|
# and thus existing member attributes cannot be deduced by static analysis. It
|
|
# supports qualified module names, as well as Unix pattern matching.
|
|
ignored-modules=gevent._corecffi,gevent.os,os,greenlet,threading,gevent.libev.corecffi,gevent.socket,gevent.core,gevent.testing.support
|
|
|
|
[DESIGN]
|
|
max-attributes=12
|
|
max-parents=10
|
|
|
|
[BASIC]
|
|
bad-functions=input
|
|
# Prospector turns ot unsafe-load-any-extension by default, but
|
|
# pylint leaves it off. This is the proximal cause of the
|
|
# undefined-all-variable crash.
|
|
unsafe-load-any-extension = yes
|
|
|
|
# Local Variables:
|
|
# mode: conf
|
|
# End:
|