[BASIC]
# We're ok with short funtion argument names.
# [invalid-name]
argument-rgx=[a-z_][a-z0-9_]*$

# Allow filter and map.
# [bad-builtin]
bad-functions=input

# We prefer docstrings, but we don't require them on all functions.
# Require them only on long functions (for some value of long).
# [missing-docstring]
docstring-min-length=10

# Allow longer methods than the default.
# [invalid-name]
method-rgx=[a-z_][a-z0-9_]{2,35}$

# Allow module names containing a dash (but no underscore or uppercase letter).
# They are whole programs, not meant to be included by another module.
# [invalid-name]
module-rgx=(([a-z_][a-z0-9_]*)|([A-Z][a-zA-Z0-9]+)|[a-z][-0-9a-z]+)$

# Some functions don't need docstrings.
# [missing-docstring]
no-docstring-rgx=(run_)main$

# We're ok with short local or global variable names.
# [invalid-name]
variable-rgx=[a-z_][a-z0-9_]*$

[DESIGN]
# Allow more than the default 7 attributes.
# [too-many-instance-attributes]
max-attributes=15

[FORMAT]
# Allow longer modules than the default recommended maximum.
# [too-many-lines]
max-module-lines=2000

[MESSAGES CONTROL]
# * locally-disabled, locally-enabled: If we disable or enable a message
#   locally, it's by design. There's no need to clutter the Pylint output
#   with this information.
# * logging-format-interpolation: Pylint warns about things like
#   ``log.info('...'.format(...))``. It insists on ``log.info('...', ...)``.
#   This is of minor utility (mainly a performance gain when there are
#   many messages that use formatting and are below the log level).
#   Some versions of Pylint (including 1.8, which is the version on
#   Ubuntu 18.04) only recognize old-style format strings using '%',
#   and complain about something like ``log.info('{}', foo)`` with
#   logging-too-many-args (Pylint supports new-style formatting if
#   declared globally with logging_format_style under [LOGGING] but
#   this requires Pylint >=2.2).
# * no-else-return: Allow the perfectly reasonable idiom
#    if condition1:
#        return value1
#    else:
#        return value2
# * unnecessary-pass: If we take the trouble of adding a line with "pass",
#   it's because we think the code is clearer that way.
disable=locally-disabled,locally-enabled,logging-format-interpolation,no-else-return,unnecessary-pass

[REPORTS]
# Don't diplay statistics. Just the facts.
reports=no

[VARIABLES]
# Allow unused variables if their name starts with an underscore.
# [unused-argument]
dummy-variables-rgx=_.*
