blob: 8592949d27e8fc7a6b6b012b28a7b6d277150035 [file] [log] [blame]
# Copyright 2021 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
# NB: This is a fork of chromite/pylintrc with indent set to 4.
# Everything else is kept the same.
[MASTER]
# Add files or directories matching the regex patterns to the ignore list.
# The regex matches against base names, not paths.
ignore-patterns=
.*_pb2\.py$,
.*third_party\/.*.py$
# List of plugins (as comma separated values of python modules names) to load,
# usually to register additional checkers.
load-plugins=
chromite.cli.cros.lint,
pylint.extensions.bad_builtin,
pylint.extensions.docstyle,
pylint.extensions.redefined_variable_type,
pylint.extensions.overlapping_exceptions,
# Configure quote preferences.
string-quote = single-avoid-escape
triple-quote = double
docstring-quote = double
[MESSAGES CONTROL]
# Enable 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 times.
# eq-without-hash: We omit this as we don't require all objects be hashable.
# We'll wait for unittest coverage to detect missing __hash__ on objects.
# no-absolute-import: We don't seem to rely on this behavior, so don't enforce
# using this future import everywhere.
# round-builtin: We omit this as all our usage of round() is OK with either
# Python 2 or 3 behavior (and probably leans towards 3 anyways).
enable=
apply-builtin,
backtick,
bad-python3-import,
basestring-builtin,
buffer-builtin,
cmp-builtin,
cmp-method,
coerce-builtin,
coerce-method,
delslice-method,
deprecated-itertools-function,
deprecated-str-translate-call,
deprecated-string-function,
deprecated-types-field,
dict-items-not-iterating,
dict-iter-method,
dict-keys-not-iterating,
dict-values-not-iterating,
dict-view-method,
div-method,
exception-message-attribute,
execfile-builtin,
file-builtin,
filter-builtin-not-iterating,
getslice-method,
hex-method,
idiv-method,
import-star-module-level,
indexing-exception,
intern-builtin,
invalid-str-codec,
long-builtin,
long-suffix,
map-builtin-not-iterating,
metaclass-assignment,
next-method-called,
next-method-defined,
nonzero-method,
oct-method,
old-ne-operator,
old-octal-literal,
old-raise-syntax,
parameter-unpacking,
print-statement,
raising-string,
range-builtin-not-iterating,
raw_input-builtin,
rdiv-method,
reduce-builtin,
reload-builtin,
setslice-method,
standarderror-builtin,
sys-max-int,
unichr-builtin,
unicode-builtin,
unpacking-in-except,
using-cmp-argument,
xrange-builtin,
zip-builtin-not-iterating,
# Disable the message, report, category or checker with the given id(s). You
# can either give multiple identifiers separated by comma (,) or put this
# option multiple times (only on the command line, not in the configuration
# file where it should appear only once). You can also use "--disable=all" to
# disable everything first and then reenable specific checks. For example, if
# you want to run only the similarities checker, you can use "--disable=all
# --enable=similarities". If you want to run only the classes checker, but have
# no Warning level messages displayed, use "--disable=all --enable=classes
# --disable=W".
# We leave many of the style warnings to judgement/peer review.
# TODO: We need to re-enable broad-except, but requires cleaning up our code.
# TODO: Re-enable redefined-variable-type.
# TODO: Re-enable inconsistent-return-statements.
# TODO: Re-enable keyword-arg-before-vararg once we're on Python 3-only.
# TODO: Re-enable useless-object-inheritance once we're on Python 3-only and
# we update the style guide.
# TODO: Re-enable import-outside-toplevel.
# TODO: Re-enable unnecessary-comprehension.
# TODO: Re-enable consider-using-dict-comprehension.
# TODO: Re-enable consider-using-set-comprehension.
# TODO: Re-enable consider-using-in.
# TODO: Re-enable try-except-raise.
# TODO: Re-enable chained-comparison.
disable=
broad-except,
chained-comparison,
consider-iterating-dictionary,
consider-using-dict-comprehension,
consider-using-in,
consider-using-set-comprehension,
fixme,
file-ignored,
keyword-arg-before-vararg,
import-outside-toplevel,
inconsistent-return-statements,
invalid-name,
locally-disabled,
locally-enabled,
missing-docstring,
no-member,
no-else-break,
no-else-continue,
no-else-raise,
no-else-return,
no-self-use,
raise-missing-from,
redefined-variable-type,
relative-import,
super-with-arguments,
too-few-public-methods,
too-many-arguments,
too-many-boolean-expressions,
too-many-branches,
too-many-instance-attributes,
too-many-lines,
too-many-locals,
too-many-nested-blocks,
too-many-public-methods,
too-many-return-statements,
too-many-statements,
try-except-raise,
unnecessary-comprehension,
useless-object-inheritance,
[REPORTS]
# Tells whether to display a full report or only the messages
# CHANGE: No report.
reports=no
# Activate the evaluation score.
score=no
[FORMAT]
# Maximum number of characters on a single line.
max-line-length=80
# Disable line length enforcement for import statements or comment lines
# containing URLs.
ignore-long-lines=(^(import|from))|(^\s*(# )?<?https?://\S+>?$)
# Maximum number of lines in a module
#max-module-lines=1000
# String used as indentation unit. This is usually " " (4 spaces) or "\t" (1
# tab).
indent-string=' '
[TYPECHECK]
# List of classes names for which member attributes should not be checked
# (useful for classes with attributes dynamically set).
ignored-classes=hashlib,numpy
# List of members which are set dynamically and missed by pylint inference
# system, and so shouldn't trigger E0201 when accessed.
# CHANGE: Added tempdir for @osutils.TempDirDecorator.
generated-members=REQUEST,acl_users,aq_parent,tempdir
# List of modules for which member attributes should not be checked.
# Modules listed here will not trigger import errors even if the linter can't
# import them.
#
# pytest: Made available by our testing virtualenv and can be assumed exists.
ignored-modules=pytest
[BASIC]
# List of builtins function names that should not be used, separated by a comma.
# exit & quit are for the interactive interpreter shell only.
# https://docs.python.org/3/library/constants.html#constants-added-by-the-site-module
bad-functions=
apply,
exit,
filter,
map,
quit,
reduce,
# Regular expression which should only match correct function names
#
# CHANGE: The ChromiumOS standard is different than PEP-8, so we need to
# redefine this.
#
# Common exceptions to ChromiumOS standard:
# - main: Standard for main function
function-rgx=([A-Z_][a-zA-Z0-9]{2,30}|main)$
# Regular expression which should only match correct method names
#
# CHANGE: The ChromiumOS standard is different than PEP-8, so we need to
# redefine this. Here's what we allow:
# - CamelCaps, starting with a capital letter. No underscores in function
# names. Can also have a "_" prefix (private method) or a "test" prefix
# (unit test).
# - Methods that look like __xyz__, which are used to do things like
# __init__, __del__, etc.
# - setUp, tearDown: For unit tests.
method-rgx=((_|test)?[A-Z][a-zA-Z0-9]{2,30}|__[a-z]+__|setUp|tearDown)$
[SIMILARITIES]
# Minimum lines number of a similarity.
min-similarity-lines=20
[VARIABLES]
# A regular expression matching the beginning of the name of dummy variables
# (i.e. not used).
dummy-variables-rgx=_|unused_
[DESIGN]
# Maximum number of parents for a class (see R0901).
max-parents=10
[IMPORTS]
# Deprecated modules which should not be used, separated by a comma.
# __builtin__: Use the 'six.moves.builtins' module instead
# (or 'builtins' in Python 3).
# apiclient: Use the 'googleapiclient' module instead.
# Bastion: Dropped in Python 3.
# ConfigParser: Use the 'six.moves.configparser' module instead
# (or 'configparser' in Python 3).
# cookielib: Use the 'six.moves.http_cookiejar' module instead
# (or 'http.cookiejar' in Python 3).
# cPickle: Use the 'pickle' module instead.
# cStringIO: Use 'io.StringIO' or 'io.BytesIO' instead.
# exceptions: Dropped in Python 3.
# HTMLParser: Use the 'six.moves.html_parser' module instead
# (or 'html.parser' in Python 3).
# httplib: Use the 'six.moves.http_client' module instead
# (or 'http.client' in Python 3).
# md5: Use the 'hashlib' module instead.
# mox: Use the 'mock' module instead.
# optparse: Use the 'argparse' module instead.
# Queue: Use the 'six.moves.queue' module instead (or 'queue' in Python 3).
# regsub: Use the 're' module instead.
# rexec: Dropped in Python 3.
# StringIO: Use 'io.StringIO' or 'io.BytesIO' instead.
# TERMIOS: Use the 'termios' module instead.
# urllib2: Use the 'six.moves.urllib' module instead
# (or 'urllib.request' in Python 3).
# urlparse: Use the 'six.moves.urllib' module instead
# (or 'urllib.parse' in Python 3).
deprecated-modules=
__builtin__,
apiclient,
Bastion,
ConfigParser,
cookielib,
cPickle,
cStringIO,
exceptions,
HTMLParser,
httplib,
md5,
mock,
mox,
optparse,
Queue,
regsub,
rexec,
StringIO,
TERMIOS,
urllib2,
urlparse,
# Force import order to recognize a module as part of the standard
# compatibility libraries.
known-standard-library=
# Force import order to recognize a module as part of a third party library.
known-third-party=
_emerge,
apiclient,
elftools,
gcloud,
google,
googleapiclient,
httplib2,
jinja2,
jsonschema,
lddtree,
magic,
mock,
oauth2client,
portage,
pylint,
pytest,
requests,
six,
sqlalchemy,
yaml,
[LOGGING]
# Apply logging string format checks to calls on these modules.
logging-modules=
logging,