[MASTER]
jobs=1

load-plugins=efrotools.pylintplugins

persistent=no

extension-pkg-allow-list=math, readline, zlib, binascii

__EFRO_PYLINT_INIT__

[REPORTS]

# Don't want a score; aiming for perfection.
score=no

[VARIABLES]
# By default pylint ignores unused imports in __init__.py, but
# when flycheck checks it as flycheck___init__.py that doesn't apply.
# Turning this off to keep things consistent.
init-import=yes

[FORMAT]
# PEP-8 specifies 79 chars (that's right, not 80).
# Update: switching to 80 to reclaim that extra char. There
# seems to be a lot of wiggle room in line-lengths even by
# good PEP-8 citizens (black code formatting defaults to 88).
# Currently sticking with 80 across the board though since
# wanting to support coding on phones and smaller devices as
# much as possible.
max-line-length=80

[MESSAGES CONTROL]
# broad-except:
#   I tend to catch Exception (*not* BaseException) as a broad safety net
#   (always with a log call or something to ensure that the problem
#   gets noticed). This is not disallowed in PEP-8 and I feel it is
#   not a bad practice as long as they are not silently ignored.
# too-few-public-methods:
#   I often use little classes just to carry around one or two named attrs
#   or as simple messages to send to each other.
#   Perhaps this is worth reconsidering now that dataclasses are widely used
#   for that purpose.
# too-many-instance-attributes
#   This one may also be worth reconsidering now; perhaps with a raised
#   default?
# too-many-arguments
#   This one is more understandable, but I still don't see the problem
#   with having a bunch of optional args in some cases. Perhaps also
#   a raised default would be appropriate?
# similarities
#   Not gonna touch this for now. Maybe later. Bigger fish to fry.
# not-callable
#   Seeming to get a number of false positives for this, and mypy covers
#   this case well.
disable=broad-except,
        too-few-public-methods,
        too-many-instance-attributes,
        too-many-arguments,
        similarities,
        not-callable

# We want to know whenever we can get rid of suppression statements.
enable=useless-suppression

[BASIC]
# Allowing a handful of short names commonly understood to be iterators,
# math concepts, or short-but-complete words.

good-names=i,
           j,
           k,
           x,
           y,
           z,
           h,
           v,
           s,
           ui,
           h2,
           v2,
           S,
           T,
           U,
           id,
           _

[TYPECHECK]
# Mypy does most all the type checking we need, and in some cases
# Pylint has conflicting views about what types it thinks things are,
# so let's just flip stuff off here.
disable=no-member

[MISCELLANEOUS]
# We've got various TODO and FIXME notes in scripts, but don't want
# lint to trigger errors over that fact.
notes=

[SIMILARITIES]

[IMPORTS]
# We do quite a bit of this. Perhaps can reconsider if its a good idea later.
disable=import-outside-toplevel

[STRING]
# PEP-8 says to be consistent with quotes; let's remind ourself...
check-quote-consistency=yes
