blob: 4cef91a063be54a96276a47befba0adfb5cc9b00 [file] [log] [blame]
[tool.pyright]
pythonVersion = "3.12"
venvPath = "."
venv = ".venv"
typeCheckingMode = "strict"
reportCallInDefaultInitializer = "error"
reportImplicitStringConcatenation = "error"
reportImportCycles = "error"
reportImplicitOverride = "error"
reportPropertyTypeMismatch = "error"
reportUninitializedInstanceVariable = "error"
reportUnnecessaryTypeIgnoreComment = "error"
# This is a big TODO list of current typing problems
# Pick an item off the list, change to "error", and send a pull request to fix it!
# You can find more information on a rule at https://github.com/microsoft/pyright/blob/main/docs/configuration.md
reportConstantRedefinition = "hint" # Requires fixing nonstandard variable conventions
reportMissingSuperCall = "hint" # Requires adding missing super().__init__() calls
reportMissingTypeStubs = "hint" # Can be fixed by switching 'ics' to alternative such as 'icalendar'
reportPrivateUsage = "hint" # Can be fixed by using TLS properly (Ruff S323)
reportUnnecessaryComparison = "hint" # Requires cleaning up some dead code
reportUntypedNamedTuple = "hint" # Requires moving to different type of named tuple
reportUnusedCallResult = "none" # Forces you to assign unused retvals to '_', very noisy.
# Intentionally disabled because it slows pyright by 2x
reportShadowedImports = "none" # Extremely slow check
[tool.ruff]
target-version = "py312"
line-length = 200
indent-width = 2
[tool.ruff.lint]
select = ["ALL"]
# disabling/enabling of rules
ignore = [
# This is a big TODO list of current linter problems.
# Pick an item off the list, remove it, and send a pull request to fix it!
# You can find more information on a rule at https://docs.astral.sh/ruff/rules/
"A001", # variable name is shadowing a python builtin
"A002", # function argument name is shadowing a python builtin
"ANN001", # missing type annotation for function argument
"ANN201", # missing return annotation for public function
"ANN202", # missing return annotation for private function
"ANN204", # missing return annotation for special method
"ANN206", # missing return annotation for classmethod
"ANN401", # use of Any as function parameter
"ARG005", # unused lambda argument
"B006", # do not use mutable datastructures for arg defaults
"B904", # within except clause, raise exceptions with .. from
"BLE001", # do not catch blind exception
"C408", # unnecessary dict() call
"C416", # unnecessary list comprehension
"C417", # unnecessary map() usage
"C901", # function is too complex
"D100", # missing docstring in public module
"D101", # missing docstring in public class
"D102", # missing docstring in public method
"D103", # missing docstring in public function
"D105", # missing docstring in magic method
"D107", # missing docstring in ctor
"D205", # blank line required between summary and description
"D400", # first docstring line should end with a period
"D401", # first docstring line should be in imperative mood
"D415", # first docstring line should end with punctuation
"DTZ005", # datetime.datetime.now called without tz argument
"EM101", # exception must not use a string literal, assign to variable first
"ERA001", # found commented-out code
"EXE001", # shebang present but file is not executable
"FBT001", # boolean-typed positional argument in function definition
"FBT002", # boolean default positional argument in function definition
"FBT003", # boolean positional value in function call
"FIX002", # line contains TODO, consider resolving issue
"FIX004", # line contains HACK, consider resolving issue
"FURB129", # instead of calling readlines(), iterate over file object directly
"N802", # function name should be lowercase
"N803", # argument name should be lowercase
"N806", # variable should be lowercase
"N816", # variable in global scope should not be mixedCase
"PERF203", # try-except within a loop incurs performance overhead
"PERF401", # use list.extend to create a transformed list
"PIE810", # call endswith once with a tuple
"PLC0206", # extracting value from dictionary without calling .items
"PLR0911", # too many return statements
"PLR0912", # too many branches
"PLR0913", # too many arguments in function definition
"PLR0915", # too many statements
"PLR1704", # redefining argument with local name
"PLR1714", # consider merging multiple comparisons
"PLR1722", # use sys.exit() instead of exit
"PLR2004", # magic value used in comparison
"PLW0602", # using global for variable but no assignment is done
"PLW0603", # using global statement to update variable is discouraged
"PLW2901", # loop variable overwritten by assignment target
"PTH104", # os.rename should be replaced by Path.rename
"PTH107", # os.remove should be replaced by Path.unlink
"PTH109", # os.getcwd should be replaced by Path.cwd
"PTH110", # os.path.exists should be replaced by Path.exists
"PTH111", # os.path.expanduser should be replaced by Path.expanduser
"PTH112", # os.path.isdir should be replaced by Path.is_dir
"PTH113", # os.path.isfile should be replaced by Path.is_file
"PTH116", # os.stat should be replaced by Path.stat, Path.owner, or Path.group
"PTH117", # os.path.isabs should be replaced by Path.is_absolute
"PTH118", # os.path.join should be replaced by Path with '/' operator
"PTH119", # os.path.basename should be replaced by Path.name
"PTH120", # os.path.dirname should be replaced by Path.parent
"PTH123", # open should be replaced by Path.open
"PTH202", # os.path.getsize should be replaced by Path.stat.st_size
"PTH207", # glob should be replaced by Path.glob or Path.rglob
"PTH208", # use pathlib.Path.iterdir() instead
"PYI024", # use typing.NamedTuple instead of collections.namedtuple
"RET503", # missing explicit return at end of function able to return non-None
"RET504", # unnecessary assignment before return
"RUF005", # unnecessary concatenation
"RUF012", # mutable class attributes should be annotated with typing.ClassVar
"S101", # use of 'assert' detected
"S108", # probable insecure usage of temp file/directory
"S110", # try-except-pass detected, consider logging the exception
"S307", # use of insecure eval, consider using ast.literal_eval
"S310", # audit url open for permitted schemes. allowing use of file: is often unexpected
"S311", # standard prng not suitable for cryptographic purposes
"S314", # using xml to parse untrusted data, use defusedxml equivalents
"S323", # use of insecure TLS context
"S324", # use of insecure hash function: sha1
"S506", # probable use of unsafe yaml loader, consider yaml.safe_load
"S602", # subprocess call with shell=True identified, security issue
"S603", # subprocess call: check for execution of untrusted input
"S605", # starting a process with a shell, seems safe, but may be changed in future
"S607", # starting a process with a partial executable path
"S701", # consider using jinja autoescape=True to mitigate XSS
"SIM102", # use single if statement instead of nested if statement
"SIM108", # use ternary operator instead of if-else-block
"SIM112", # use capitalized environment variable
"SIM113", # use enumerate for index variable in loop
"SIM115", # use a context manager for opening files
"SIM118", # use 'key in dict' instead of 'key in dict.keys'
"SIM201", # use returncode != 0 instead of not returncode == 0
"SLF001", # private member accessed
"T201", # print function found
"TD002", # missing author for this TODO
"TD003", # missing issue link for this TODO
"TD004", # missing colon for this TODO
"TD005", # missing issue description for this TODO
"TRY002", # create your own exception
"TRY003", # avoid specifying long messages outside exception class
"TRY201", # use raise without specifying exception name
"TRY300", # consider moving this statement to else block
"UP008", # use super() instead of super(__class__, self)
"UP036", # version block is outdated for minimum python version
"UP031", # use format specifiers instead of percent format
# These rules are always disabled, conflict with other rules
# don't enable! (switch to the alternative instead)
"D203", # disabled in favor of D211 (no-black-line-before-class)
"D213", # disabled in favor of D212 (multi-line-summary-first-line)
# These rules are always disabled: conflict with the formatter
# don't enable! https://docs.astral.sh/ruff/formatter/#conflicting-lint-rules
"W191", "E111", "E114", "E117", "D206", "D300", "Q000", "Q001",
"Q002", "Q003", "COM812", "COM819", "ISC001", "ISC002", "E501",
]