[tool.ruff]
target-version = "py311"
line-length = 88

[tool.ruff.lint]
ignore = [
    "S101", # use of assert
    "D203", # 1 blank line required before class docstring
    "D212", # Multi-line docstring summary should start at the first line
    "D100", # Missing docstring in public module
    "D101", # Missing docstring in public module
    "D102", # Missing docstring in public method
    "D103", # Missing docstring in public module
    "D104", # Missing docstring in public package
    "D105", # Missing docstring in magic method
    "D107", # Missing docstring in `__init__`
    "D400", # First line should end with a period
    "D401", # First line of docstring should be in imperative mood
    "D205", # 1 blank line required between summary line and description
    "D415", # First line should end with a period, question mark, or exclamation point
    "D417", # Missing argument descriptions in the docstring
    "E501", # Line too long
    "RUF012", # Mutable class attributes should be annotated with `typing.ClassVar`
    "B008", # Do not perform function call
    "S110", # `try`-`except`-`pass` detected, consider logging the exception
    "D106", # Missing docstring in public nested class
    "UP007", # typer needs Optional syntax
    "UP038", # Use `X | Y` in `isinstance` is slower
    "S603", #  check for execution of untrusted input
    "S105", # possible hard coded creds
]
select = [
    "B",   # flake8-bugbear
    "D",   # flake8-docstrings
    "C4",  # flake8-comprehensions
    "S",   # flake8-bandit
    "F",   # pyflake
    "E",   # pycodestyle
    "W",   # pycodestyle
    "UP",  # pyupgrade
    "I",   # isort
    "RUF", # ruff specific
]

[tool.ruff.lint.per-file-ignores]
"tests/**/*" = [
    "D100",
    "D101",
    "D102",
    "D103",
    "D104",
    "S101",
]
"setup.py" = ["D100"]
"conftest.py" = ["D100"]
"docs/conf.py" = ["D100"]

[tool.ruff.lint.isort]
known-first-party = ["pySwitchbot", "tests"]