ci:
  autofix_prs: false
  autoupdate_schedule: 'monthly'

repos:
  - repo: https://github.com/pre-commit/pre-commit-hooks
    rev: v5.0.0
    hooks:
      - id: check-added-large-files
        args: ["--enforce-all", "--maxkb=300"]
        exclude: "^(\
            cextern/wcslib/C/flexed/.*|\
            CHANGES.rst|\
            astropy/extern/jquery/data/js/datatables.js|\
        )$"
        # Prevent giant files from being committed.
      - id: check-case-conflict
        # Check for files with names that would conflict on a case-insensitive
        # filesystem like MacOS HFS+ or Windows FAT.
      - id: check-json
        # Attempts to load all json files to verify syntax.
      - id: check-merge-conflict
        # Check for files that contain merge conflict strings.
      - id: check-symlinks
        # Checks for symlinks which do not point to anything.
      - id: check-toml
        # Attempts to load all TOML files to verify syntax.
      - id: check-xml
        # Attempts to load all xml files to verify syntax.
      - id: check-yaml
        # Attempts to load all yaml files to verify syntax.
        exclude: ".*(.github.*)$"
      - id: detect-private-key
        # Checks for the existence of private keys.
      - id: end-of-file-fixer
        # Makes sure files end in a newline and only a newline.
        exclude: ".*(data.*|extern.*|licenses.*|_static.*|_parsetab.py)$"
      # - id: fix-encoding-pragma  # covered by pyupgrade
      - id: trailing-whitespace
        # Trims trailing whitespace.
        exclude_types: [python]  # Covered by Ruff W291.
        exclude: ".*(data.*|extern.*|licenses.*|_static.*)$"

  - repo: https://github.com/pre-commit/pygrep-hooks
    rev: v1.10.0
    hooks:
      - id: rst-directive-colons
        # Detect mistake of rst directive not ending with double colon.
      - id: rst-inline-touching-normal
        # Detect mistake of inline code touching normal text in rst.
      - id: text-unicode-replacement-char
        # Forbid files which have a UTF-8 Unicode replacement character.

  - repo: https://github.com/codespell-project/codespell
    rev: v2.3.0
    hooks:
      - id: codespell
        args: ["--write-changes"]
        additional_dependencies:
          - tomli

  - repo: https://github.com/astral-sh/ruff-pre-commit
    rev: v0.6.9
    hooks:
      - id: ruff
        args: ["--fix", "--show-fixes"]
      - id: ruff-format

  - repo: https://github.com/scientific-python/cookie
    rev: 2024.08.19
    hooks:
      - id: sp-repo-review

  - repo: https://github.com/PyCQA/docformatter
    # using an untagged rev for forward compatibility with pre-commit 4.0
    # see https://github.com/PyCQA/docformatter/issues/289
    # This should be changed back to a tag when (>1.7.5) is released
    rev: 06907d0267368b49b9180eed423fae5697c1e909
    hooks:
      - id: docformatter
        additional_dependencies: [tomli]
        args: [--in-place, --config, ./pyproject.toml]
        exclude: |
          (?x)(
              test.*\.py |
              astropy/__init__\.py |
              astropy/_dev/ |
              astropy/config/ |
              astropy/conftest\.py |
              astropy/constants/ |
              astropy/convolution/ |
              astropy/coordinates/ |
              astropy/extern/ |
              astropy/io/ |
              astropy/logger\.py |
              astropy/modeling/ |
              astropy/nddata/ |
              astropy/samp/ |
              astropy/stats/ |
              astropy/table/ |
              astropy/tests/ |
              astropy/time/ |
              astropy/timeseries/ |
              astropy/uncertainty/ |
              astropy/units/ |
              astropy/utils/ |
              astropy/version\.py |
              astropy/visualization/ |
              astropy/wcs/ |
              docs/ |
              examples/
          )

  - repo: local
    hooks:
      - id: changelogs-rst
        name: changelog filenames
        language: fail
        entry: >-
          changelog files must be named <sub-package>/####.(bugfix|feature|api|perf).rst
          or ####.other.rst (in the root directory only)
        exclude: >-
          ^docs/changes/[\w\.]+/(\d+\.(bugfix|feature|api|perf)(\.\d)?.rst|.gitkeep)
        files: ^docs/changes/[\w\.]+/
      - id: changelogs-rst-other
        name: changelog filenames for other category
        language: fail
        entry: >-
          only "other" changelog files must be placed in the root directory
        exclude: >-
          ^docs/changes/(\d+\.other.rst|README.rst|template.rst)
        files: ^docs/changes/\d+.\w+.rst
