https://github.com/astropy/astropy
Raw File
Tip revision: 0a06e9aef297dbc3d9334afad57b79acaa540fd3 authored by P. L. Lim on 05 April 2024, 20:35:05 UTC
Merge pull request #16277 from eerovaher/coord-matching-tests
Tip revision: 0a06e9a
.ruff.toml
extend = "pyproject.toml"
lint.ignore = [
    # NOTE: to find a good code to fix, run:
    # ruff --select="ALL" --statistics astropy/<subpackage>

    # flake8-annotations (ANN) : static typing
    "ANN001",  # Function argument without type annotation
    "ANN003",  # `**kwargs` without type annotation
    "ANN202",  # Private function without return type annotation
    "ANN401",  # Use of `Any` type

    # flake8-unused-arguments (ARG)
    "ARG001",  # unused-function-argument
    "ARG002",  # unused-method-argument
    "ARG003",  # unused-class-method-argument
    "ARG004",  # unused-static-method-argument
    "ARG005",  # unused-lambda-argument

    # flake8-bugbear (B)
    "B006",  # MutableArgumentDefault
    "B007",  # UnusedLoopControlVariable
    "B023",  # FunctionUsesLoopVariable
    "B028",  # No-explicit-stacklevel
    "B904",  # RaiseWithoutFromInsideExcept
    "B905",  # ZipWithoutExplicitStrict   # requires 3.10+

    # flake8-blind-except (BLE)
    "BLE001",  # blind-except

    # mccabe (C90) : code complexity
    # TODO: configure maximum allowed complexity.
    "C901",  # McCabeComplexity

    # pydocstyle (D)
    # Missing Docstrings
    "D100",  # undocumented-public-module
    "D101",  # undocumented-public-class
    "D103",  # undocumented-public-function
    "D104",  # undocumented-public-package
    "D205",  # blank-line-after-summary
    # Quotes Issues
    "D300",  # triple-single-quotes
    "D301",  # escape-sequence-in-docstring
    # Docstring Content Issues
    "D403",  # first-line-capitalized
    "D404",  # docstring-starts-with-this
    "D401",  # non-imperative-mood.
    "D414",  # empty-docstring-section
    "D419",  # docstring is empty

    # flake8-datetimez (DTZ)
    "DTZ001",  # call-datetime-without-tzinfo
    "DTZ005",  # call-datetime-now-without-tzinfo

    # pycodestyle (E, W)
    "E501",  # line-too-long
    "E721",  # type-comparison
    "E731",  # lambda-assignment

    # flake8-errmsg (EM)  : nicer error tracebacks
    "EM101",   # raw-string-in-exception
    "EM102",   # f-string-in-exception
    "EM103",   # dot-format-in-exception

    # eradicate (ERA)
    # NOTE: be careful that developer notes are kept.
    "ERA001",  # commented-out-code

    # flake8-executable (EXE)
    "EXE002",  # shebang-missing-executable-file

    # Pyflakes (F)
    "F841",  # unused-variable

    # flake8-boolean-trap (FBT)  : boolean flags should be kwargs, not args
    # NOTE: a good thing to fix, but changes API.
    "FBT001",  # boolean-positional-arg-in-function-definition
    "FBT002",  # boolean-default-value-in-function-definition
    "FBT003",  # boolean-positional-value-in-function-call

    # flake8-fixme (FIX)
    "FIX001",  # Line contains FIXME.  this should be fixed or at least FIXME replaced with TODO
    "FIX004",  # Line contains HACK. replace HACK with NOTE.

    # pep8-naming (N)
    # NOTE: some of these can/should be fixed, but this changes the API.
    "N801",  # invalid-class-name
    "N802",  # invalid-function-name
    "N803",  # invalid-argument-name
    "N804",  # invalid-first-argument-name-for-class-method
    "N805",  # invalid-first-argument-name-for-method
    "N807",  # dunder-function-name
    "N813",  # camelcase-imported-as-lowercase
    "N815",  # mixed-case-variable-in-class-scope
    "N816",  # mixed-case-variable-in-global-scope
    "N818",  # error-suffix-on-exception-name

    # NumPy-specific rules (NPY)
    "NPY002", # Replace legacy `np.random.rand` call with `np.random.Generator`  (2023-05-03)

    # Perflint (PERF)
    "PERF203",  # `try`-`except` within a loop incurs performance overhead
    "PERF401",  # Use a list comprehension to create a transformed list

    # Pylint (PLC, PLE, PLR, PLW)
    "PLE0101",  # return-in-init
    "PLR0124",  # Name compared with itself
    "PLR0402",  # ConsiderUsingFromImport
    "PLR0912",  # too-many-branches
    "PLR0913",  # too-many-args
    "PLR0915",  # too-many-statements
    "PLR1714",  # Consider merging multiple comparisons
    "PLR2004",  # MagicValueComparison
    "PLR5501",  # collapsible-else-if
    "PLW0603",  # global-statement
    "PLW2901",  # redefined-loop-name

    # flake8-pytest-style (PT)
    "PT001",   # pytest-fixture-incorrect-parentheses-style
    "PT003",   # pytest-extraneous-scope-function
    "PT004",   # pytest-missing-fixture-name-underscore
    "PT006",   # pytest-parametrize-names-wrong-type
    "PT007",   # pytest-parametrize-values-wrong-type
    "PT011",   # pytest-raises-too-broad
    "PT012",   # pytest-raises-with-multiple-statements
    "PT017",   # pytest-assert-in-exceptinstead
    "PT018",   # pytest-composite-assertion
    "PT022",   # pytest-useless-yield-fixture
    "PT023",   # pytest-incorrect-mark-parentheses-style

    # flake8-use-pathlib (PTH)
    "PTH100",  # os-path-abspath
    "PTH101",  # os-chmod
    "PTH102",  # os-mkdir
    "PTH103",  # os-makedirs
    "PTH104",  # os-rename
    "PTH107",  # os-remove
    "PTH108",  # os-unlink
    "PTH109",  # os-getcwd
    "PTH110",  # os-path-exists
    "PTH111",  # os-path-expanduser
    "PTH112",  # os-path-isdir
    "PTH113",  # os-path-isfile
    "PTH118",  # os-path-join
    "PTH119",  # os-path-basename
    "PTH120",  # os-path-dirname
    "PTH122",  # os-path-splitext
    "PTH123",  # builtin-open
    "PTH202",  # `os.path.getsize` should be replaced by `Path.stat().st_size`
    "PTH207",  # Replace `glob` with `Path.glob` or `Path.rglob`

    # flake8-return (RET)
    "RET501",  # unnecessary-return-none
    "RET502",  # implicit-return-value
    "RET503",  # implicit-return
    "RET504",  # unnecessary-assign
    "RET507",  # superfluous-else-continue

    # flake8-raise (RSE)
    "RSE102",  # unnecessary-paren-on-raise-exception

    # Ruff-specific rules (RUF)
    "RUF001",  # ambiguous-unicode-character-string
    "RUF002",  # ambiguous-unicode-character-docstring
    "RUF010",  # use conversion in f-string
    "RUF012",  # Mutable class attributes should be annotated with `typing.ClassVar`

    # flake8-bandit (S)
    "S101",  # Use of `assert` detected
    "S105",  # hardcoded-password-string
    "S110",  # try-except-pass
    "S112",  # try-except-continue
    "S301",  # suspicious-pickle-usage
    "S307",  # Use of possibly insecure function; consider using `ast.literal_eval`
    "S311",  # suspicious-non-cryptographic-randomness
    "S324",  # hashlib-insecure-hash-function
    "S506",  # UnsafeYAMLLoad
    "S310",  # Suspicious-url-open-usage
    "S603",  # `subprocess` call: check for execution of untrusted input
    "S607",  # Starting a process with a partial executable path

    # flake8-simplify (SIM)
    "SIM102",  # NestedIfStatements
    "SIM105",  # UseContextlibSuppress
    "SIM108",  # UseTernaryOperator
    "SIM114",  # if-with-same-arms
    "SIM115",  # OpenFileWithContextHandler
    "SIM117",  # MultipleWithStatements
    "SIM118",  # KeyInDict
    "SIM201",  # NegateEqualOp
    "SIM300",  # yoda condition

    # flake8-print (T20)
    "T201",  # PrintUsed

    # flake8-todos (TD)
    "TD001",  # Invalid TODO tag
    "TD003",  # Missing issue link on the line following this TODO
    "TD004",  # Missing colon in TODO
    "TD007",  # Missing space after colon in TODO

    # tryceratops (TRY)
    "TRY002",  # raise-vanilla-class
    "TRY003",  # raise-vanilla-args
    "TRY004",  # prefer-type-error
    "TRY201",  # verbose-raise
    "TRY301",  # raise-within-try

    # pyupgrade (UP)
    "UP038",  # isinstance using union separators. The code is slower as of Python 3.10-3.12

    # flake8-quotes (Q)
    "Q000",  # use double quotes
]
lint.unfixable = [
    "E711"  # NoneComparison. Hard to fix b/c numpy has it's own None.
]

[lint.extend-per-file-ignores]
"__init__.py" = ["E402", "F401", "F403"]
"test_*.py" = [
    "RUF015",  # Prefer next({iterable}) over single element slice
]
# TODO: fix these, on a per-subpackage basis.
# When a general exclusion is being fixed, but it affects many subpackages, it
# is better to fix for subpackages individually. The general exclusion should be
# copied to these subpackage sections and fixed there.
"astropy/config/*" = [
    "PTH114",  # os-path-islink
    "PTH206",  # Replace `.split(os.sep)` with `Path.parts`
    "RET505",  # superfluous-else-return
    "RET506",  # superfluous-else-raise
]
"astropy/constants/*" = [
    "N817",  # camelcase-imported-as-acronym
    "RET505",  # superfluous-else-return
]
"astropy/convolution/*" = [
    "PLR0911",  # too-many-return-statements
    "RET505",  # superfluous-else-return
    "RET506",  # superfluous-else-raise
]
"astropy/coordinates/*" = [
    "DTZ007",  # call-datetime-strptime-without-zone
    "RET505",  # superfluous-else-return
]
"astropy/cosmology/*" = [
    "C408",  # unnecessary-collection-call
    "PT019",   # pytest-fixture-param-without-value
    "RET505",  # superfluous-else-return
    "RET506",  # superfluous-else-raise
]
"astropy/io/*" = [
    "G001",  # logging-string-format
    "G004",  # logging-f-string
    "PLR0911",  # too-many-return-statements
    "PTH116",  # os-stat
    "PTH117",  # os-path-isabs
    "RET505",  # superfluous-else-return
    "RET506",  # superfluous-else-raise
    "SLOT000",  # Subclasses of `str` should define `__slots__`
    "TD005",  # Missing issue description after `TODO`
    "TRY400",  # error-instead-of-exception
    "TRY300",  # Consider `else` block
]
"astropy/logger.py" = ["C408", "RET505"]
"astropy/modeling/*" = [
    "ANN201",  # Public function without return type annotation
    "PLR0911",  # too-many-return-statements
    "RET505",  # superfluous-else-return
    "RET506",  # superfluous-else-raise
    "SLOT001",  # Subclasses of `tuple` should define `__slots__`
    "TRY300",  # Consider `else` block
]
"astropy/nddata/*" = [
    "C408",
    "RET505",  # superfluous-else-return
    "RET506",  # superfluous-else-raise
]
"astropy/samp/*" = [
    "RET505",  # superfluous-else-return
    "RET506",  # superfluous-else-raise
]
"astropy/stats/*" = [
    "PLR0911",  # too-many-return-statements
    "RET505",  # superfluous-else-return
    "RET506",  # superfluous-else-raise
]
"astropy/table/*" = [
    "RET505",  # superfluous-else-return
    "RET506",  # superfluous-else-raise
    "S605",  # Starting a process with a shell, possible injection detected
    "TRY300",  # Consider `else` block
]
"astropy/tests/*" = ["C408", "RET505"]
"astropy/time/*" = [
    "FIX003",  # Line contains XXX.  replace XXX with TODO
    "PIE794",  # duplicate-class-field-definition
    "RET505",  # superfluous-else-return
    "RET506",  # superfluous-else-raise
]
"astropy/timeseries/*" = [
    "PLR0911",  # too-many-return-statements
    "RET505",  # superfluous-else-return
    "RET506",  # superfluous-else-raise
]
"astropy/units/*" = [
    "F821",  # undefined-name
    "N812",  # lowercase-imported-as-non-lowercase
    "PLR0911",  # too-many-return-statements
    "RET505",  # superfluous-else-return
    "RET506",  # superfluous-else-raise
    "TRY300",  # Consider `else` block
]
"astropy/uncertainty/*" = [
    "C408",
    "RET505",  # superfluous-else-return
    "RET506",  # superfluous-else-raise
]
"astropy/utils/*" = [
    "N811",  # constant-imported-as-non-constant
    "PLR0911",  # too-many-return-statements
    "RET505",  # superfluous-else-return
    "RET506",  # superfluous-else-raise
    "S321",  # Suspicious-ftp-lib-usage
    "TRY300",  # Consider `else` block
]
"astropy/visualization/*" = [
    "B015",
    "PLR0911",  # too-many-return-statements
    "RET505",  # superfluous-else-return
    "RET506",  # superfluous-else-raise
]
"astropy/wcs/*" = [
    "C408",  # unnecessary-collection-call
    "F821",  # undefined-name
    "S608",  # Posslibe SQL injection
    "RET505",  # superfluous-else-return
    "RET506",  # superfluous-else-raise
    "SIM202",  # NegateNotEqualOp
    "TRY300",  # Consider `else` block
]
"docs/*" = []
"examples/coordinates/*" = []
back to top