Move to a much stricter pyright configuration
This moves us from using the "standard" type-checking mode (which has a lot of the diagnostic rules disabled, which meant we were almost in a whitelist-based system, where most diagnostic rules were disabled unless explicitly enabled) to "all" (where all diagnotic rules are enabled, except for those explicitly disabled, moving us to a blacklist-based system). The current configuration here is very strict and might not fit all code-bases, but it will work very well for new projects, as this strictness, while slightly annoying sometimes, forces a lot better and more correct typing to the previous set of rules. This template still leaves the rules for reporting unknown types disabled, as these are incredibly strict and while they can definitely be beneficial, for most people it's too big of an annoyance for what it's worth.
This commit is contained in:
parent
0855c6fbb3
commit
97f7f5da2a
|
@ -69,8 +69,6 @@ ignore = [
|
|||
"D416", # Section name should end with a colon
|
||||
"D417", # Missing argument descrition in the docstring
|
||||
|
||||
"ANN002", # Missing type annotation for *args
|
||||
"ANN003", # Missing type annotation for **kwargs
|
||||
"ANN101", # Missing type annotation for self in method
|
||||
"ANN102", # Missing type annotation for cls in classmethod
|
||||
"ANN204", # Missing return type annotation for special method
|
||||
|
@ -131,25 +129,36 @@ max-statements = 250
|
|||
[tool.ruff.format]
|
||||
line-ending = "lf"
|
||||
|
||||
[tool.pyright]
|
||||
[tool.basedpyright]
|
||||
pythonPlatform = "All"
|
||||
pythonVersion = "3.11"
|
||||
typeCheckingMode = "standard"
|
||||
typeCheckingMode = "all"
|
||||
|
||||
reportUntypedFunctionDecorator = "error"
|
||||
reportUntypedClassDecorator = "error"
|
||||
reportUntypedNamedTuple = "error"
|
||||
reportTypeCommentUsage = "error"
|
||||
reportConstantRedefinition = "error"
|
||||
reportDeprecated = "warning"
|
||||
reportIncompatibleMethodOverride = "error"
|
||||
reportOverlappingOverload = "error"
|
||||
reportUnnecessaryIsInstance = "error"
|
||||
reportUnnecessaryCast = "error"
|
||||
reportUnnecessaryComparison = "error"
|
||||
reportUnnecessaryContains = "error"
|
||||
reportUnnecessaryTypeIgnoreComment = "error"
|
||||
reportImplicitOverride = "error"
|
||||
reportShadowedImports = "error"
|
||||
# Diagnostic behavior settings
|
||||
strictListInference = false
|
||||
strictDictionaryInference = false
|
||||
strictSetInference = false
|
||||
analyzeUnannotatedFunctions = true
|
||||
strictParameterNoneValue = true
|
||||
enableTypeIgnoreComments = true
|
||||
deprecateTypingAliases = true
|
||||
enableExperimentalFeatures = false
|
||||
disableBytesTypePromotions = true
|
||||
|
||||
# Diagnostic rules
|
||||
reportAny = false
|
||||
reportImplicitStringConcatenation = false
|
||||
reportUnreachable = "information"
|
||||
reportMissingTypeStubs = "information"
|
||||
reportUninitializedInstanceVariable = false # until https://github.com/DetachHead/basedpyright/issues/491
|
||||
reportMissingParameterType = false # ruff's flake8-annotations (ANN) already covers this + gives us more control
|
||||
|
||||
# Unknown type reporting rules (too strict for most code-bases)
|
||||
reportUnknownArgumentType = false
|
||||
reportUnknownVariableType = false
|
||||
reportUnknownMemberType = false
|
||||
reportUnknownParameterType = false
|
||||
reportUnknownLambdaType = false
|
||||
|
||||
[tool.pytest.ini_options]
|
||||
minversion = "6.0"
|
||||
|
|
Loading…
Reference in a new issue