# install the pre-commit hooks:
#
#    ❯ pre-commit install --hook-type pre-commit
#    pre-commit installed at .git/hooks/pre-commit
#
#    ❯ pre-commit install --hook-type pre-push
#    pre-commit installed at .git/hooks/pre-push
#
# run all linters liks:
#
#    ❯ pre-commit run --all-files
#    isort....................................................................Passed
#    black....................................................................Passed
#    ruff.....................................................................Passed
#    flake8...................................................................Passed
#    mypy.....................................................................Passed
#
# run a single linter like:
#
#    ❯ pre-commit run --all-files isort
#    isort....................................................................Passed

repos:
-   repo: local
    hooks:
    -   id: isort
        name: isort
        stages: [commit, push, manual]
        language: system
        entry: isort
        args: 
        -   "--length-sort"
        -   "--profile"
        -   "black"
        -   "--line-length=120"
        -   "--skip-glob"
        -   "*_pb2.py"
        -   "capa/"
        -   "scripts/"
        -   "tests/"
        -   "web/rules/scripts/"
        always_run: true
        pass_filenames: false

-   repo: local
    hooks:
    -   id: black
        name: black
        stages: [commit, push, manual]
        language: system
        entry: black
        args: 
        -   "--line-length=120"
        -   "--extend-exclude"
        -   ".*_pb2.py"
        -   "capa/"
        -   "scripts/"
        -   "tests/"
        -   "web/rules/scripts/"
        always_run: true
        pass_filenames: false

-   repo: local
    hooks:
    -   id: ruff
        name: ruff
        stages: [commit, push, manual]
        language: system
        entry: ruff
        args: 
        -   "check"
        -   "--config"
        -   ".github/ruff.toml"
        -   "capa/"
        -   "scripts/"
        -   "tests/"
        -   "web/rules/scripts/"
        always_run: true
        pass_filenames: false

-   repo: local
    hooks:
    -   id: flake8
        name: flake8
        stages: [push, manual]
        language: system
        entry: flake8
        args: 
        -   "--config"
        -   ".github/flake8.ini"
        -   "--extend-exclude"
        -   "capa/render/proto/capa_pb2.py,capa/features/extractors/binexport2/binexport2_pb2.py"
        -   "capa/"
        -   "scripts/"
        -   "tests/"
        -   "web/rules/scripts/"
        always_run: true
        pass_filenames: false

-   repo: local
    hooks:
    -   id: mypy
        name: mypy
        stages: [push, manual]
        language: system
        entry: mypy
        args: 
        -   "--check-untyped-defs"
        -   "--ignore-missing-imports"
        -   "--config-file=.github/mypy/mypy.ini"
        -   "capa/"
        -   "scripts/"
        -   "tests/"
        -   "web/rules/scripts/"
        always_run: true
        pass_filenames: false

-   repo: local
    hooks:
    -   id: deptry
        name: deptry
        stages: [push, manual]
        language: system
        entry: deptry .
        always_run: true
        pass_filenames: false

-   repo: local
    hooks:
    -   id: pytest-fast
        name: pytest (fast)
        stages: [manual]
        language: system
        entry: pytest
        args: 
        -   "tests/"
        -   "--ignore=tests/test_binja_features.py"
        -   "--ignore=tests/test_ghidra_features.py"
        -   "--ignore=tests/test_ida_features.py"
        -   "--ignore=tests/test_viv_features.py"
        -   "--ignore=tests/test_main.py"
        -   "--ignore=tests/test_scripts.py"
        always_run: true
        pass_filenames: false

