or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

cli-commands.mdconfiguration.mdgit-integration.mdhooks.mdindex.mdlanguage-support.mdrepository-management.md
tile.json

tessl/pypi-pre-commit

A framework for managing and maintaining multi-language pre-commit hooks.

Workspace
tessl
Visibility
Public
Created
Last updated
Describes
pypipkg:pypi/pre-commit@4.3.x

To install, run

npx @tessl/cli install tessl/pypi-pre-commit@4.3.0

index.mddocs/

Pre-commit

A framework for managing and maintaining multi-language pre-commit hooks. Pre-commit enables automatic execution of code quality checks, linting, formatting, and testing before commits are made to version control systems, supporting multiple programming languages and providing a plugin-based architecture for extensibility.

Package Information

  • Package Name: pre-commit
  • Package Type: pypi
  • Language: Python
  • Installation: pip install pre-commit

Core Imports

import pre_commit

For programmatic API usage:

from pre_commit.main import main
from pre_commit.store import Store
from pre_commit.hook import Hook
from pre_commit.clientlib import load_config, load_manifest, HOOK_TYPES, STAGES
from pre_commit import git
from pre_commit import constants as C
from pre_commit.errors import FatalError, InvalidConfigError, InvalidManifestError
from pre_commit.util import cmd_output, CalledProcessError
from pre_commit.color import format_color, use_color
from pre_commit.output import write_line

Basic Usage

Command Line Interface

# Install git hook scripts
pre-commit install

# Run hooks on all files
pre-commit run --all-files

# Run hooks on staged files only
pre-commit run

# Auto-update hook versions
pre-commit autoupdate

# Validate configuration
pre-commit validate-config

Programmatic Usage

from pre_commit.main import main
from pre_commit.store import Store
from pre_commit.clientlib import load_config, InvalidConfigError
from pre_commit.errors import FatalError

# Run pre-commit programmatically
exit_code = main(['run', '--all-files'])

# Load and validate configuration with error handling
try:
    config = load_config('.pre-commit-config.yaml')
    print(f"Loaded config with {len(config['repos'])} repositories")
except InvalidConfigError as e:
    print(f"Configuration error: {e}")
except FatalError as e:
    print(f"Fatal error: {e}")

# Initialize store for hook management
store = Store()

# Example: Clone a repository for hook usage
repo_path = store.clone('https://github.com/psf/black', 'main')
print(f"Repository cloned to: {repo_path}")

Architecture

Pre-commit follows a modular architecture built around several key components:

  • CLI Commands: Command-line interface providing installation, execution, and management functionality
  • Hook System: Data structures and execution framework for individual hooks
  • Language Support: Plugin-based architecture supporting 22+ programming languages
  • Configuration Management: YAML-based configuration loading and validation
  • Git Integration: Deep integration with Git workflows and repository operations
  • Repository Management: Store system for managing hook repositories and environments

This design enables pre-commit to serve as a comprehensive framework for maintaining code quality across diverse development environments and language ecosystems.

Capabilities

CLI Commands

Complete command-line interface for installing, managing, and executing pre-commit hooks. Includes installation commands, hook execution, configuration management, and utility operations.

def main(argv: Sequence[str] | None = None) -> int

CLI Commands

Configuration Management

Configuration loading, validation, and schema definitions for .pre-commit-config.yaml and .pre-commit-hooks.yaml files.

load_config: functools.partial[dict[str, Any]]
# Partial function for loading .pre-commit-config.yaml files
# Usage: config = load_config(filename)

load_manifest: functools.partial[list[dict[str, Any]]]
# Partial function for loading .pre-commit-hooks.yaml files  
# Usage: hooks = load_manifest(filename)

Configuration

Hook System

Core data structures and management functions for pre-commit hooks, including hook representation, execution, and environment management.

class Hook(NamedTuple):
    src: str
    prefix: Prefix
    id: str
    name: str
    entry: str
    language: str
    alias: str
    files: str
    exclude: str
    types: Sequence[str]
    types_or: Sequence[str]
    exclude_types: Sequence[str]
    additional_dependencies: Sequence[str]
    args: Sequence[str]
    always_run: bool
    fail_fast: bool
    pass_filenames: bool
    description: str
    language_version: str
    log_file: str
    minimum_pre_commit_version: str
    require_serial: bool
    stages: Sequence[str]
    verbose: bool

Hooks

Git Integration

Git repository utilities and integration functions for working with staged files, repository state, and Git workflow integration.

def get_root() -> str
def get_staged_files(cwd: str | None = None) -> list[str]
def get_all_files() -> list[str]

Git Integration

Language Support

Multi-language support system with plugin-based architecture for 22+ programming languages including Python, JavaScript, Go, Rust, and more.

class Language(Protocol):
    def get_default_version(self) -> str
    def install_environment(self, prefix: Prefix, version: str, additional_dependencies: Sequence[str]) -> None
    def run_hook(self, prefix: Prefix, version: str, cmd: Sequence[str], **kwargs) -> tuple[int, bytes]

Language Support

Repository Management

Repository and hook environment management through the Store system, including cloning, caching, and cleanup operations.

class Store:
    def clone(self, repo: str, ref: str, deps: Sequence[str] = ()) -> str
    def make_local(self, deps: Sequence[str]) -> str
    def select_all_repos(self) -> list[tuple[str, str, str]]

Repository Management

Constants and Error Handling

Constants

CONFIG_FILE: str = '.pre-commit-config.yaml'
MANIFEST_FILE: str = '.pre-commit-hooks.yaml'
LOCAL_REPO_VERSION: str = '1'
DEFAULT: str = 'default'
VERSION: str  # Package version string

# Hook types and stages
HOOK_TYPES: tuple[str, ...] = (
    'commit-msg', 'post-checkout', 'post-commit', 'post-merge',
    'post-rewrite', 'pre-commit', 'pre-merge-commit', 'pre-push',
    'pre-rebase', 'prepare-commit-msg'
)
STAGES: tuple[str, ...] = (*HOOK_TYPES, 'manual')

# Repository types
LOCAL: str = 'local'
META: str = 'meta'

# Color constants
RED: str
GREEN: str
YELLOW: str
TURQUOISE: str
SUBTLE: str
NORMAL: str
COLOR_CHOICES: tuple[str, ...] = ('auto', 'always', 'never')

Exceptions

class FatalError(RuntimeError):
    """Base exception for fatal errors"""

class InvalidConfigError(FatalError):
    """Configuration validation errors"""

class InvalidManifestError(FatalError):
    """Manifest validation errors"""

class CalledProcessError(RuntimeError):
    """Enhanced subprocess error with stdout/stderr capture"""
    returncode: int
    cmd: tuple[str, ...]
    stdout: bytes
    stderr: bytes | None

Utility Functions

Core utility functions for process execution, file operations, and resource management.

def cmd_output(*cmd: str, **kwargs: Any) -> tuple[int, str, str | None]:
    """Execute command and return exit code, stdout, stderr as strings"""

def cmd_output_b(*cmd: str, check: bool = True, **kwargs: Any) -> tuple[int, bytes, bytes | None]:
    """Execute command and return exit code, stdout, stderr as bytes"""

def make_executable(filename: str) -> None:
    """Make file executable"""

def resource_text(filename: str) -> str:
    """Read text from package resource file"""

def clean_path_on_failure(path: str) -> Generator[None, None, None]:
    """Context manager that removes path on exception"""

Color Support

Functions for colored terminal output.

def format_color(text: str, color: str, use_color_setting: bool) -> str:
    """Format text with ANSI color codes"""

def use_color(setting: str) -> bool:
    """Determine if color should be used based on setting"""

def add_color_option(parser: argparse.ArgumentParser) -> None:
    """Add --color argument to argument parser"""

Output Functions

Terminal output utilities with optional logging support.

def write(s: str, stream: IO[bytes] = sys.stdout.buffer) -> None:
    """Write string to byte stream"""

def write_line(s: str | None = None, **kwargs: Any) -> None:
    """Write line to output with optional logging"""

def write_line_b(s: bytes | None = None, stream: IO[bytes] = sys.stdout.buffer, logfile_name: str | None = None) -> None:
    """Write line as bytes to output with optional logging"""