
exclude: ^(.secrets|docs|misc|tests/deprecated)/

repos:
  - repo: https://github.com/astral-sh/ruff-pre-commit
    rev: v0.13.0
    hooks:
      - id: ruff-check   # linter
      - id: ruff-format  # formatter

  - repo: https://github.com/cdce8p/python-typing-update
    rev: v0.7.0
    hooks:
      # Run `python-typing-update` hook manually from time to time
      # to update python typing syntax.
      # Will require manual work, before submitting changes!
      # prek run --hook-stage manual python-typing-update --all-files
      - id: python-typing-update
        stages: [manual]
        args:
          - --py311-plus
          - --force
          - --keep-updates
        files: ^(src|tests|docs)/.+\.py$

  - repo: https://github.com/codespell-project/codespell
    rev: v2.4.1
    hooks:
      - id: codespell
        args:
          - --ignore-words-list=childs,IndexT,OT,ser
          - --skip="./.*,*.csv,*.json,*.ambr"
          - --quiet-level=2
        exclude_types: [csv, json, html]
        exclude: ^(tests/.+/fixtures|tests/.+/snapshots)/

  - repo: https://github.com/pre-commit/pre-commit-hooks
    rev: v6.0.0
    hooks:
      - id: check-executables-have-shebangs
      # id: check-json  # don't enable this one
      # - id: no-commit-to-branch
      #   args:
      #     - --branch=master
      #     - --branch=stable
      - id: check-toml
      - id: check-yaml
      - id: debug-statements
      - id: end-of-file-fixer
      - id: mixed-line-ending
      - id: trailing-whitespace

  - repo: https://github.com/pre-commit/pygrep-hooks
    rev: v1.10.0
    hooks:
      - id: python-check-blanket-noqa
      - id: python-check-blanket-type-ignore
      # id: python-no-eval
      - id: python-no-log-warn

  - repo: local
    hooks:
      # entry: '[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+'  # email address

    - id: debugs
      name: check for DEBUG flags
      entry: '_DBG_.*=.*True'
      language: pygrep
      args: [-i]
      exclude: (.pre-commit-config.yaml|^tests/.*\.py$)  # avoid false +ve

    - id: secrets
      name: check for secrets
      entry: '#.*(secret|password|pwd)'
      language: pygrep
      args: [-i]
      exclude: .pre-commit-config.yaml  # avoid false +ve

    - id: style_1
      name: check for 'as exc:' (should be 'as err:')
      entry: ' as exc:'
      language: pygrep
      args: [-i]
      exclude: .pre-commit-config.yaml  # avoid false +ve

    # - id: private imports
    #   name: check for private imports
    #   entry: 'from .* import _.*'
    #   language: pygrep
    #   args: [-i]
    #   exclude: .pre-commit-config.yaml  # avoid false +ve


  # We do not use pre-commit/mirrors-mypy, as it comes with opinionated defaults
  # (like --ignore-missing-imports) and is difficult to configure to run
  # with the dependencies correctly installed.

  # - repo: https://github.com/pre-commit/mirrors-mypy
  #   rev: v1.8.0
  #   hooks:
  #   - id: mypy
  #     additional_dependencies: [voluptuous==0.14.1]
  #     args: ["--config-file", "./pyproject.toml"]
