# Pre-commit hooks for claude-howto project # Run `pre-commit install` to set up hooks # Run `pre-commit run --all-files` to check all files default_language_version: python: python3.11 repos: # Ruff - Fast Python linter and formatter - repo: https://github.com/astral-sh/ruff-pre-commit rev: v0.8.2 hooks: - id: ruff name: ruff-lint args: [--fix, --exit-non-zero-on-fix] types_or: [python, pyi] files: ^scripts/ - id: ruff-format name: ruff-format types_or: [python, pyi] files: ^scripts/ # Bandit - Security linter - repo: https://github.com/PyCQA/bandit rev: 1.7.10 hooks: - id: bandit name: bandit-security args: [-c, scripts/pyproject.toml] additional_dependencies: ["bandit[toml]"] types: [python] files: ^scripts/ exclude: ^scripts/tests/ # Standard pre-commit hooks - repo: https://github.com/pre-commit/pre-commit-hooks rev: v5.0.0 hooks: - id: check-yaml name: check-yaml args: [--allow-multiple-documents] - id: check-toml name: check-toml - id: end-of-file-fixer name: fix-end-of-file - id: trailing-whitespace name: fix-trailing-whitespace - id: check-added-large-files name: check-large-files args: [--maxkb=1000] - id: check-merge-conflict name: check-merge-conflict # mypy - Type checking - repo: https://github.com/pre-commit/mirrors-mypy rev: v1.13.0 hooks: - id: mypy name: mypy-type-check args: [--config-file, scripts/pyproject.toml] files: ^scripts/ exclude: ^scripts/tests/ # Local doc quality hooks (mirrors CI checks — CI is a 2nd pass of these) - repo: local hooks: - id: markdown-lint name: markdown-lint language: node entry: markdownlint args: ['--ignore', 'node_modules', '--ignore', '.venv', '--config', '.markdownlint.json'] types: [markdown] additional_dependencies: ['markdownlint-cli'] - id: cross-references name: cross-references language: system entry: python scripts/check_cross_references.py pass_filenames: false types: [markdown] - id: mermaid name: mermaid-syntax language: system entry: python scripts/check_mermaid.py pass_filenames: false types: [markdown] verbose: true - id: link-check name: link-check language: system entry: python scripts/check_links.py pass_filenames: false types: [markdown] verbose: true - id: build-epub name: build-epub language: system entry: uv run scripts/build_epub.py pass_filenames: false files: ^(.*\.md|scripts/build_epub\.py)$ # Vietnamese documentation checks - repo: local hooks: - id: vietnamese-markdown-lint name: vietnamese-markdown-lint language: node entry: markdownlint args: ['--ignore', 'node_modules', '--ignore', '.venv', '--config', '.markdownlint.json'] files: ^vi/.*\.md$ additional_dependencies: ['markdownlint-cli'] - id: vietnamese-cross-references name: vietnamese-cross-references language: system entry: python scripts/check_cross_references.py --lang vi pass_filenames: false files: ^vi/.*\.md$ - id: vietnamese-mermaid name: vietnamese-mermaid-syntax language: system entry: python scripts/check_mermaid.py pass_filenames: false files: ^vi/.*\.md$ verbose: true - id: vietnamese-link-check name: vietnamese-link-check language: system entry: python scripts/check_links.py pass_filenames: false files: ^vi/.*\.md$ verbose: true - id: vietnamese-build-epub name: vietnamese-build-epub language: system entry: uv run scripts/build_epub.py --lang vi pass_filenames: false files: ^(vi/.*\.md|scripts/build_epub\.py)$