# pre-commit is a tool to perform a predefined set of tasks manually and/or
# automatically before git commits are made.
#
# Config reference: https://pre-commit.com/#pre-commit-configyaml---top-level
#
# Common tasks
#
# - Run on all files:   pre-commit run --all-files
# - Register git hooks: pre-commit install --install-hooks
#
repos:
  # Autoformat: Python code, syntax patterns are modernized
  - repo: https://github.com/asottile/pyupgrade
    rev: v3.4.0
    hooks:
      - id: pyupgrade
        args:
          - --py36-plus
        # We need the bootstrap.py script to be parsable with Python 3.5, so we
        # exclude it from the pyupgrade hook that will apply f-strings etc.
        exclude: bootstrap/bootstrap.py

  # Autoformat: Python code
  - repo: https://github.com/PyCQA/autoflake
    rev: v2.1.1
    hooks:
      - id: autoflake
        # args ref: https://github.com/PyCQA/autoflake#advanced-usage
        args:
          - --in-place

  # Autoformat: Python code
  - repo: https://github.com/pycqa/isort
    rev: 5.12.0
    hooks:
      - id: isort

  # Autoformat: Python code
  - repo: https://github.com/psf/black
    rev: 23.3.0
    hooks:
      - id: black

  # Autoformat: markdown, yaml
  - repo: https://github.com/pre-commit/mirrors-prettier
    rev: v3.0.0-alpha.9-for-vscode
    hooks:
      - id: prettier

  # Misc...
  - repo: https://github.com/pre-commit/pre-commit-hooks
    rev: v4.4.0
    # ref: https://github.com/pre-commit/pre-commit-hooks#hooks-available
    hooks:
      # Autoformat: Makes sure files end in a newline and only a newline.
      - id: end-of-file-fixer

      # Lint: Check for files with names that would conflict on a
      # case-insensitive filesystem like MacOS HFS+ or Windows FAT.
      - id: check-case-conflict

      # Lint: Checks that non-binary executables have a proper shebang.
      - id: check-executables-have-shebangs

  # Lint: Python code
  - repo: https://github.com/pycqa/flake8
    rev: "6.0.0"
    hooks:
      - id: flake8

# pre-commit.ci config reference: https://pre-commit.ci/#configuration
ci:
  autoupdate_schedule: monthly
