[tool.ruff]
target-version = "py38"
line-length = 120

[tool.ruff.lint]
select = [
  "B",    # flake8-bugbear
  "C4",   # flake8-comprehensions
  "D",    # pydocstyle
  "E",    # pycodestyle error
  "EXE",  # flake8-executable
  "F",    # pyflakes
  "FA",   # flake8-future-annotations
  "FLY",  # flynt
  "I",    # isort
  "ICN",  # flake8-import-conventions
  "ISC",  # flake8-implicit-str-concat
  "PD",   # pandas-vet
  "PERF", # perflint
  "PIE",  # flake8-pie
  "PL",   # pylint
  "PT",   # flake8-pytest-style
  "PYI",  # flakes8-pyi
  "Q",    # flake8-quotes
  "RET",  # flake8-return
  "RSE",  # flake8-raise
  "RUF",  # Ruff-specific rules
  "SIM",  # flake8-simplify
  "SLOT", # flake8-slots
  "TCH",  # flake8-type-checking
  "TID",  # tidy imports
  "TID",  # flake8-tidy-imports
  "UP",   # pyupgrade
  "W",    # pycodestyle warning
  "YTT",  # flake8-2020
]
ignore = [
  "B023",    # Function definition does not bind loop variable
  "B028",    # No explicit stacklevel keyword argument found
  "B904",    # Within an except clause, raise exceptions with ...
  "C408",    # unnecessary-collection-call
  "D102",    # missing-docstring-in-public-method (temp ignore, re-enable later once we have docstrings)
  "D205",    # 1 blank line required between summary line and description
  "D212",    # Multi-line docstring summary should start at the first line
  "PD901",   # pandas-df-variable-name
  "PERF203", # try-except-in-loop
  # "PERF401", # manual-list-comprehension (TODO fix these or wait for autofix)
  "ISC001",
  "PLR",     # pylint refactor
  "PLW2901", # Outer for loop variable overwritten by inner assignment target
  "PT013",   # pytest-incorrect-pytest-import
  "PYI024",  # collections-named-tuple (TODO should maybe fix these)
  "RUF012",  # Disable checks for mutable class args. This is a non-problem.
  "SIM105",  # Use contextlib.suppress(OSError) instead of try-except-pass
]
pydocstyle.convention = "google"
isort.split-on-trailing-comma = false

[tool.ruff.lint.per-file-ignores]
"__init__.py" = ["F401"]
"**/tests/*" = [
  "D100", # missing-module-docstring
  "D101", # missing-class-docstring
  "D102", # missing-docstring-in-public-method
  "D103", # missing-function-docstring
  "D107", # missing-init-docstring
]
"tasks.py" = ["D"]
"fw_tutorials/*" = ["D"]

[tool.pytest.ini_options]
markers = [
  "mongodb: marks tests that need mongodb (deselect with '-m \"not mongodb\"')",
]
