content: [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\"')",
  ]
  