default_language_version:
  python: python3.7

repos:
  - repo: https://github.com/pre-commit/pre-commit-hooks
    rev: v4.3.0
    hooks:
      # list of supported hooks: https://pre-commit.com/hooks.html
      - id: trailing-whitespace
      - id: end-of-file-fixer
      - id: check-docstring-first
      - id: check-yaml
      - id: debug-statements
      - id: detect-private-key
      - id: check-toml
      - id: check-case-conflict
      - id: check-added-large-files
        args: [--maxkb=1000]
      - id: check-json
      - id: check-merge-conflict
      - id: check-shebang-scripts-are-executable
      - id: fix-byte-order-marker
      - id: fix-encoding-pragma
        args: [--remove]
      - id: mixed-line-ending
        args: [--fix=lf]

  # python code formatting
  - repo: https://github.com/psf/black
    rev: 22.6.0
    hooks:
      - id: black
        args: [--line-length, "79"]
        language_version: python3.7

  # python import sorting
  # - repo: https://github.com/PyCQA/isort
  #   rev: 5.12.0
  #   hooks:
  #     - id: isort
  #       args:
  #         [
  #           "--line-length=79",
  #           "--multi-line=3",
  #           "--profile=black",
  #           "--filter-files",
  #         ]
  #       language_version: python3.7

  # python upgrading syntax to newer version
  # - repo: https://github.com/asottile/pyupgrade
  #   rev: v2.32.1
  #   hooks:
  #     - id: pyupgrade
  #       args: [--py38-plus]

  # python docstring formatting
  - repo: https://github.com/myint/docformatter
    rev: v1.4
    hooks:
      - id: docformatter
        args: [--in-place, --wrap-summaries=79, --wrap-descriptions=79]

  # python check (PEP8), programming errors and code complexity
  - repo: https://github.com/PyCQA/flake8
    rev: 4.0.1
    hooks:
      - id: flake8
        args:
          [
            "--extend-ignore",
            "E203,E402,E501,F401,F841",
            "--exclude",
            "logs/*,data/*",
          ]

  # python security linter
  - repo: https://github.com/PyCQA/bandit
    rev: "1.7.1"
    hooks:
      - id: bandit
        args: ["-s", "B101"]

  # yaml formatting
  - repo: https://github.com/pre-commit/mirrors-prettier
    rev: v2.7.1
    hooks:
      - id: prettier
        types: [yaml]

  # shell scripts linter
  - repo: https://github.com/shellcheck-py/shellcheck-py
    rev: v0.8.0.4
    hooks:
      - id: shellcheck

  # md formatting
  - repo: https://github.com/executablebooks/mdformat
    rev: 0.7.14
    hooks:
      - id: mdformat
        args: ["--number"]
        additional_dependencies:
          - mdformat-gfm
          - mdformat-tables
          - mdformat_frontmatter
          # - mdformat-toc
          # - mdformat-black

  # jupyter notebook cell output clearing
  # - repo: https://github.com/kynan/nbstripout
  #   rev: 0.5.0
  #   hooks:
  #     - id: nbstripout

  # jupyter notebook linting
  - repo: https://github.com/nbQA-dev/nbQA
    rev: 1.4.0
    hooks:
      - id: nbqa-black
        args: ["--line-length=79"]
      - id: nbqa-isort
        args: ["--profile=black"]
      - id: nbqa-flake8
        args:
          [
            "--extend-ignore=E203,E402,E501,F401,F841",
            "--exclude=logs/*,data/*",
          ]