---
repos:
  - repo: local
    hooks:
      - id: ruff-check
        name: 🐶 Ruff Linter
        language: system
        types: [python]
        entry: poetry run ruff check --fix
        require_serial: true
        stages: [pre-commit, pre-push, manual]
      - id: ruff-format
        name: 🐶 Ruff Formatter
        language: system
        types: [python]
        entry: poetry run ruff format
        require_serial: true
        stages: [pre-commit, pre-push, manual]
      - id: check-ast
        name: 🐍 Check Python AST
        language: system
        types: [python]
        entry: poetry run check-ast
      - id: check-case-conflict
        name: 🔠 Check for case conflicts
        language: system
        entry: poetry run check-case-conflict
      - id: check-docstring-first
        name: ℹ️  Check docstring is first
        language: system
        types: [python]
        entry: poetry run check-docstring-first
      - id: check-executables-have-shebangs
        name: 🧐 Check that executables have shebangs
        language: system
        types: [text, executable]
        entry: poetry run check-executables-have-shebangs
        stages: [pre-commit, pre-push, manual]
      - id: check-json
        name: ｛ Check JSON files
        language: system
        types: [json]
        entry: poetry run check-json
      - id: check-merge-conflict
        name: 💥 Check for merge conflicts
        language: system
        types: [text]
        entry: poetry run check-merge-conflict
      - id: check-symlinks
        name: 🔗 Check for broken symlinks
        language: system
        types: [symlink]
        entry: poetry run check-symlinks
      - id: check-toml
        name: ✅ Check TOML files
        language: system
        types: [toml]
        entry: poetry run check-toml
      - id: check-xml
        name: ✅ Check XML files
        entry: poetry run check-xml
        language: system
        types: [xml]
      - id: check-yaml
        name: ✅ Check YAML files
        language: system
        types: [yaml]
        entry: poetry run check-yaml
      - id: codespell
        name: ✅ Check code for common misspellings
        language: system
        types: [text]
        exclude: ^poetry\.lock$
        entry: poetry run codespell
      - id: detect-private-key
        name: 🕵️  Detect Private Keys
        language: system
        types: [text]
        entry: poetry run detect-private-key
      - id: end-of-file-fixer
        name: ⮐  Fix End of Files
        language: system
        types: [text]
        entry: poetry run end-of-file-fixer
        stages: [pre-commit, pre-push, manual]
      - id: mypy
        name: 🆎 Static type checking using mypy
        language: system
        types: [python]
        entry: poetry run mypy
      - id: no-commit-to-branch
        name: 🛑 Don't commit to main branch
        language: system
        entry: poetry run no-commit-to-branch
        pass_filenames: false
        always_run: true
        args:
          - --branch=main
      - id: poetry
        name: 📜 Check pyproject with Poetry
        language: system
        entry: poetry check
        pass_filenames: false
        always_run: true
      - id: pylint
        name: 🌟 Starring code with pylint
        language: system
        types: [python]
        entry: poetry run pylint
      - id: pytest
        name: 🧪 Running tests and test coverage with pytest
        language: system
        types: [python]
        entry: poetry run pytest
        pass_filenames: false
      - id: trailing-whitespace
        name: ✄  Trim Trailing Whitespace
        language: system
        types: [text]
        entry: poetry run trailing-whitespace-fixer
        stages: [pre-commit, pre-push, manual]
      - id: yamllint
        name: 🎗 Check YAML files with yamllint
        language: system
        types: [yaml]
        entry: poetry run yamllint
