blob: 7dbe5080cc94e316e69fc4733fc574071c1ffebc [file] [log] [blame]
# Copyright 2024 The Pigweed Authors
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may not
# use this file except in compliance with the License. You may obtain a copy of
# the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations under
# the License.
# Exclude a variety of commonly ignored directories.
exclude = [
'out',
'.environment',
'environment',
'.mypy_cache',
'.pytype',
'.ruff_cache',
'__pycache__',
'__pypackages__',
]
respect-gitignore = true
line-length = 80
# Assume Python 3.10.
target-version = 'py310'
[lint]
# Enable the pycodestyle (`E`) and Pyflakes (`F`) rules by default.
# Unlike Flake8, Ruff doesn't enable pycodestyle warnings (`W`) or
# McCabe complexity (`C901`) by default.
select = [
'F', # Pyflakes
'E', # pycodestyle
'C90', # mccabe
'I', # isort
'N', # pep8-naming
'D', # pydocstyle
'UP', # pyupgrade
'YTT', # flake8-2020
'ANN', # flake8-annotations
'ASYNC', # flake8-async
'S', # flake8-bandit
'BLE', # flake8-blind-except
'FBT', # flake8-boolean-trap
'B', # flake8-bugbear
'A', # flake8-builtins
'COM', # flake8-commas
'C4', # flake8-comprehensions
'DTZ', # flake8-datetimez
'T10', # flake8-debugger
'DJ', # flake8-django
'EM', # flake8-errmsg
'EXE', # flake8-executable
'FA', # flake8-future-annotations
'ISC', # flake8-implicit-str-concat
'ICN', # flake8-import-conventions
'G', # flake8-logging-format
'INP', # flake8-no-pep420
'PIE', # flake8-pie
'T20', # flake8-print
'PYI', # flake8-pyi
'PT', # flake8-pytest-style
# 'Q', # flake8-quotes
'RSE', # flake8-raise
'RET', # flake8-return
'SLF', # flake8-self
'SLOT', # flake8-slots
'SIM', # flake8-simplify
'TID', # flake8-tidy-imports
'TCH', # flake8-type-checking
'INT', # flake8-gettext
'ARG', # flake8-unused-arguments
'PTH', # flake8-use-pathlib
'TD', # flake8-todos
'FIX', # flake8-fixme
'ERA', # eradicate
'PD', # pandas-vet
'PGH', # pygrep-hooks
'PL', # Pylint
'TRY', # tryceratops
'FLY', # flynt
'NPY', # NumPy-specific rules
'AIR', # Airflow
'PERF', # Perflint
'RUF', # Ruff-specific rules
]
# All Rule codes: https://docs.astral.sh/ruff/rules/
ignore = [
'ANN101', # https://docs.astral.sh/ruff/rules/missing-type-self
'COM812', # Trailing comma missing
'D203', # https://docs.astral.sh/ruff/rules/one-blank-line-before-class
'D212', # https://docs.astral.sh/ruff/rules/multi-line-summary-first-line
'D213', # https://docs.astral.sh/ruff/rules/multi-line-summary-second-line
'D400', # First line should end with a period
'D401', # First line of docstring should be in imperative mood
'D404', # First word of the docstring should not be "This"'
'D415', # First line should end with a period, question mark, or exclamation point
'D416', # Section name should end with a colon ("Raises")'
'FIX002', # Line contains TODO, consider resolving the issue
'PGH003', # Use specific rule codes when ignoring type issues
'PT009', # Use a regular `assert` instead of unittest-style `assertEqual`
'PTH123', # `open()` should be replaced by `Path.open()`
'S101', # Use of `assert` detected
'TD003', # Missing issue link on the line following this TODO
'UP006', # Use `list` instead of `List` for type annotation
]
# Allow autofix for all enabled rules (when `--fix`) is provided.
fixable = ['ALL']
unfixable = []
# Allow unused variables when underscore-prefixed.
dummy-variable-rgx = '^(_+|(_+[a-zA-Z0-9_]*[a-zA-Z0-9]+?))$' # inclusive-language: ignore
[lint.per-file-ignores]
# pw_python_package tests often live outside any top level module.
'**/py/*_test.py' = [
'INP001', # File is part of an implicit namespace package. Add an `__init__.py`.
]
[lint.pycodestyle]
ignore-overlong-task-comments = true
# Same as .black.toml
max-doc-length = 88