diff --git a/MANIFEST.in b/MANIFEST.in index 2a3ed4408..1a781f37a 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -23,7 +23,6 @@ include __main__.py include howto.txt include igor.py include metacov.ini -include pylintrc include setup.py include tox.ini diff --git a/coverage/html.py b/coverage/html.py index 532eb66c2..7b827a794 100644 --- a/coverage/html.py +++ b/coverage/html.py @@ -12,7 +12,7 @@ import os import re import shutil -import string # pylint: disable=deprecated-module +import string from dataclasses import dataclass from typing import Any, Dict, Iterable, List, Optional, Tuple, TYPE_CHECKING, cast diff --git a/pylintrc b/pylintrc deleted file mode 100644 index 5f879056d..000000000 --- a/pylintrc +++ /dev/null @@ -1,321 +0,0 @@ -# Licensed under the Apache License: http://www.apache.org/licenses/LICENSE-2.0 -# For details: https://github.com/nedbat/coveragepy/blob/master/NOTICE.txt - -# lint Python modules using external checkers. -# -# This is the main checker controlling the other ones and the reports -# generation. It is itself both a raw checker and an astng checker in order -# to: -# * handle message activation / deactivation at the module level -# * handle some basic but necessary stats'data (number of classes, methods...) -# -[MASTER] - -# Specify a configuration file. -#rcfile= - -# Python code to execute, usually for sys.path manipulation such as -# pygtk.require(). -#init-hook= - -# Add to the black list. It should be a base name, not a -# path. You may set this option multiple times. -ignore= - -# Pickle collected data for later comparisons. -persistent=no - -# List of plugins (as comma separated values of python modules names) to load, -# usually to register additional checkers. -load-plugins= - -extension-pkg-whitelist= - greenlet - -[MESSAGES CONTROL] - -# Enable only checker(s) with the given id(s). This option conflicts with the -# disable-checker option -#enable-checker= - -# Enable all checker(s) except those with the given id(s). This option -# conflicts with the enable-checker option -#disable-checker= - -# Enable all messages in the listed categories. -#enable-msg-cat= - -# Disable all messages in the listed categories. -#disable-msg-cat= - -# Enable the message(s) with the given id(s). -enable= - useless-suppression - -# Disable the message(s) with the given id(s). -disable= - spelling, -# Messages that are just silly: - locally-disabled, - exec-used, - global-statement, - broad-except, - no-else-return, - subprocess-run-check, - use-dict-literal, -# Messages that may be silly: - no-member, - using-constant-test, - too-many-nested-blocks, - too-many-ancestors, - unnecessary-pass, - no-else-break, - no-else-continue, -# Questionable things, but it's ok, I don't need to be told: - import-outside-toplevel, - self-assigning-variable, - consider-using-with, - missing-timeout, - use-implicit-booleaness-not-comparison, -# Formatting stuff - superfluous-parens, -# Messages that are noisy for now, eventually maybe we'll turn them on: - invalid-name, - protected-access, - unspecified-encoding, - consider-using-f-string, - duplicate-code, - cyclic-import - -msg-template={path}:{line} {C}: {msg} ({symbol}) - -[REPORTS] - -# set the output format. Available formats are text, parseable, colorized, msvs -# (visual studio) and html -output-format=text - -# Tells whether to display a full report or only the messages -reports=no - -# I don't need a score, thanks. -score=no - -# Python expression which should return a note less than 10 (10 is the highest -# note).You have access to the variables errors warning, statement which -# respectively contain the number of errors / warnings messages and the total -# number of statements analyzed. This is used by the global evaluation report -# (R0004). -evaluation=10.0 - ((float(5 * error + warning + refactor + convention) / statement) * 10) - -# Enable the report(s) with the given id(s). -#enable-report= - -# Disable the report(s) with the given id(s). -#disable-report= - - -# checks for : -# * doc strings -# * modules / classes / functions / methods / arguments / variables name -# * number of arguments, local variables, branches, returns and statements in -# functions, methods -# * required module attributes -# * dangerous default values as arguments -# * redefinition of function / method / class -# * uses of the global statement -# -[BASIC] - -# Regular expression which should only match functions or classes name which do -# not require a docstring -# Special methods don't: __foo__ -# Test methods don't: testXXXX -# TestCase overrides don't: setUp, tearDown -# Nested decorator implementations: _decorator, _wrapper -# Dispatched methods don't: _xxx__Xxxx -no-docstring-rgx=__.*__|test[A-Z_].*|setUp|_decorator|_wrapper|_.*__.* - -# Regular expression which should only match correct module names -module-rgx=(([a-z_][a-z0-9_]*)|([A-Z][a-zA-Z0-9]+))$ - -# Regular expression which should only match correct module level names -const-rgx=(([A-Z_][A-Z0-9_]*)|(__.*__))$ - -# Regular expression which should only match correct class names -class-rgx=[A-Z_][a-zA-Z0-9]+$ - -# Regular expression which should only match correct function names -function-rgx=[a-z_][a-z0-9_]{2,30}$ - -# Regular expression which should only match correct method names -method-rgx=[a-z_][a-z0-9_]{2,30}$|setUp|tearDown|test_.* - -# Regular expression which should only match correct instance attribute names -attr-rgx=[a-z_][a-z0-9_]{2,30}$ - -# Regular expression which should only match correct argument names -argument-rgx=[a-z_][a-z0-9_]{2,30}$ - -# Regular expression which should only match correct variable names -variable-rgx=[a-z_][a-z0-9_]{2,30}$ - -# Regular expression which should only match correct list comprehension / -# generator expression variable names -inlinevar-rgx=[A-Za-z_][A-Za-z0-9_]*$ - -# Good variable names which should always be accepted, separated by a comma -good-names=i,j,k,ex,Run,_ - -# Bad variable names which should always be refused, separated by a comma -bad-names=foo,bar,baz,toto,tutu,tata - - -# try to find bugs in the code using type inference -# -[TYPECHECK] - -# Tells whether missing members accessed in mixin class should be ignored. A -# mixin class is detected if its name ends with "mixin" (case insensitive). -ignore-mixin-members=yes - -# List of classes names for which member attributes should not be checked -# (useful for classes with attributes dynamically set). -ignored-classes=SQLObject - - -# checks for -# * unused variables / imports -# * undefined variables -# * redefinition of variable from builtins or from an outer scope -# * use of variable before assignment -# -[VARIABLES] - -# Tells whether we should check for unused import in __init__ files. -init-import=no - -# A regular expression matching names of unused arguments. -ignored-argument-names=_|unused|.*_unused -dummy-variables-rgx=_|unused|.*_unused - -# List of additional names supposed to be defined in builtins. Remember that -# you should avoid to define new builtins when possible. -additional-builtins= - - -# checks for : -# * methods without self as first argument -# * overridden methods signature -# * access only to existent members via self -# * attributes not defined in the __init__ method -# * supported interfaces implementation -# * unreachable code -# -[CLASSES] - -# List of method names used to declare (i.e. assign) instance attributes. -defining-attr-methods=__init__,__new__,setUp,reset - - -# checks for sign of poor/misdesign: -# * number of methods, attributes, local variables... -# * size, complexity of functions, methods -# -[DESIGN] - -# Maximum number of arguments for function / method -max-args=15 - -# Maximum number of locals for function / method body -max-locals=50 - -# Maximum number of return / yield for function / method body -max-returns=20 - -# Maximum number of branch for function / method body -max-branches=50 - -# Maximum number of statements in function / method body -max-statements=150 - -# Maximum number of parents for a class (see R0901). -max-parents=12 - -# Maximum number of attributes for a class (see R0902). -max-attributes=40 - -# Minimum number of public methods for a class (see R0903). -min-public-methods=0 - -# Maximum number of public methods for a class (see R0904). -max-public-methods=500 - - -# checks for -# * external modules dependencies -# * relative / wildcard imports -# * cyclic imports -# * uses of deprecated modules -# -[IMPORTS] - -# Deprecated modules which should not be used, separated by a comma -deprecated-modules=regsub,string,TERMIOS,Bastion,rexec - -# Create a graph of every (i.e. internal and external) dependencies in the -# given file (report R0402 must not be disabled) -import-graph= - -# Create a graph of external dependencies in the given file (report R0402 must -# not be disabled) -ext-import-graph= - -# Create a graph of internal dependencies in the given file (report R0402 must -# not be disabled) -int-import-graph= - - -# checks for : -# * unauthorized constructions -# * strict indentation -# * line length -# * use of <> instead of != -# -[FORMAT] - -# Maximum number of characters on a single line. -max-line-length=100 - -# Maximum number of lines in a module -max-module-lines=10000 - -# String used as indentation unit. This is usually " " (4 spaces) or "\t" (1 -# tab). -indent-string=' ' - - -# checks for: -# * warning notes in the code like FIXME, XXX -# * PEP 263: source code with non ascii character but no encoding declaration -# -[MISCELLANEOUS] - -# List of note tags to take in consideration, separated by a comma. -notes=FIXME,XXX,TODO - - -# checks for similarities and duplicated code. This computation may be -# memory / CPU intensive, so you should disable it if you experiments some -# problems. -# -[SIMILARITIES] - -# Minimum lines number of a similarity. -min-similarity-lines=4 - -# Ignore comments when computing similarities. -ignore-comments=yes - -# Ignore docstrings when computing similarities. -ignore-docstrings=yes diff --git a/pyproject.toml b/pyproject.toml index 268573082..7f093fb00 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -5,6 +5,8 @@ requires = ['setuptools'] build-backend = 'setuptools.build_meta' +## MYPY + [tool.mypy] check_untyped_defs = true disallow_any_generics = true @@ -28,6 +30,84 @@ exclude = """(?x)( | ^tests/balance_xdist_plugin\\.py$ # not part of our test suite. )""" +## PYLINT + +[tool.pylint.basic] +no-docstring-rgx = "__.*__|test[A-Z_].*|setUp|_decorator|_wrapper|_.*__.*" + +[tool.pylint.classes] +defining-attr-methods = [ + "__init__", + "__new__", + "setUp", + "reset", +] + +[tool.pylint.design] +max-args = 15 +max-attributes = 40 +max-bool-expr = 5 +max-branches = 50 +max-locals = 50 +max-parents = 12 +max-public-methods = 500 +max-returns = 20 +max-statements = 150 +min-public-methods = 0 + +[tool.pylint.main] +extension-pkg-whitelist = ["greenlet"] + +[tool.pylint."messages control"] +enable = [ + "useless-suppression", +] + +disable = [ + "spelling", + # Messages that are just silly: + "locally-disabled", + "exec-used", + "global-statement", + "broad-except", + "no-else-return", + "subprocess-run-check", + "use-dict-literal", + # Messages that may be silly: + "no-member", + "using-constant-test", + "too-many-nested-blocks", + "too-many-ancestors", + "unnecessary-pass", + "no-else-break", + "no-else-continue", + # Questionable things, but it's ok, I don't need to be told: + "import-outside-toplevel", + "self-assigning-variable", + "consider-using-with", + "missing-timeout", + "too-many-lines", + "use-implicit-booleaness-not-comparison", + # Formatting stuff + "superfluous-parens", + # Messages that are noisy for now, eventually maybe we'll turn them on: + "invalid-name", + "protected-access", + "unspecified-encoding", + "consider-using-f-string", + "duplicate-code", + "cyclic-import", +] + +[tool.pylint.reports] +score = false + +[tool.pylint.variables] +dummy-variables-rgx = "_|unused|.*_unused" +ignored-argument-names = "_|unused|.*_unused" + +## PYTEST + [tool.pytest.ini_options] addopts = "-q -n auto -p no:legacypath --strict-markers --no-flaky-report -rfEX --failed-first" python_classes = "*Test" @@ -56,8 +136,7 @@ balanced_clumps = [ "GetZipBytesTest", ] -[tool.ruff] -line-length = 100 +## SCRIV [tool.scriv] # Changelog management: https://pypi.org/project/scriv/