Development Status
- 4 - Beta
Intended Audience
- Developers
Operating System
- OS Independent
Programming Language
- Python :: 3
- Python :: 3.10
- Python :: 3.11
- Python :: 3.12
- Python :: 3.13
- Python :: 3.14
Topic
- Software Development :: Quality Assurance
mlinter
A standalone linter for Hugging Face Transformers modeling files. It enforces structural conventions on every modeling_*.py, modular_*.py, and configuration_*.py file under src/transformers/models.
Installation
pip install git+https://github.com/huggingface/transformers-mlinter@main
When working on the transformers repo, mlinter is included in the quality extras:
pip install -e ".[quality]"
How rule registration works
- Rule metadata lives in
mlinter/rules.toml. - The TOML schema is versioned with a top-level
version = 1. Custom files passed with--rules-tomlmust use the same schema version. - Executable TRF rules are auto-discovered from
trf*.pymodules in themlinter/package. - Each module must define a
check(tree, file_path, source_lines) -> list[Violation]function. - The module name determines the rule id:
trf003.py→TRF003. - A
RULE_IDmodule-level constant is set automatically by the discovery mechanism. - Every discovered rule must have a matching entry in the TOML file, and every TOML rule must have a matching module. Import-time validation fails if either side is missing.
- Suppressions use
# trf-ignore: TRFXXXon the same line or the line immediately above the flagged construct.
How to add a new TRF rule
- Add a
[rules.TRFXXX]entry tomlinter/rules.toml. - Fill in
description,default_enabled,explanation.what_it_does,explanation.why_bad, andexplanation.diff. Optional model-level exceptions go inallowlist_models. - Create a new module
mlinter/trfXXX.pywith acheck(tree, file_path, source_lines) -> list[Violation]function. - Use the
RULE_IDmodule constant instead of hardcoding"TRFXXX"inside the check. - Add or update focused tests in
tests/.
CLI usage
Run from the root of a transformers checkout:
# Check all modeling, modular, and configuration files
mlinter
# Only check files changed against a git base ref
mlinter --changed-only --base-ref origin/main
# List all available TRF rules and their default state
mlinter --list-rules
# Use a custom rules TOML instead of the bundled mlinter/rules.toml
mlinter --rules-toml /path/to/custom-rules.toml
# Show the installed mlinter version
mlinter --version
# Show detailed documentation for one rule
mlinter --rule TRF001
# Enable additional rules on top of the defaults
mlinter --enable-rules TRF003
# Enable every TRF rule, including ones disabled by default
mlinter --enable-all-trf-rules
# Emit GitHub Actions error annotations
mlinter --github-annotations
When installed from a git checkout or a git+https://... URL, mlinter --version includes a short commit hash suffix such as 0.1.1+gabcdef1.
You can also invoke it as a Python module:
python -m mlinter
The lint cache is stored in the user cache directory instead of next to the installed package:
$XDG_CACHE_HOME/mlinter/.mlinter_cache.json on Linux, ~/Library/Caches/mlinter/.mlinter_cache.json on macOS, and %LOCALAPPDATA%\mlinter\.mlinter_cache.json on Windows.
Python API
Import the supported Python API from the package root:
from mlinter import TRF001, analyze_file, model_dir_name, render_rules_reference
mlinter.mlinter and mlinter._helpers are implementation modules and may change without a compatibility promise.
Development
git clone https://github.com/huggingface/transformers-mlinter
cd transformers-mlinter
pip install -e ".[dev]"
Run the tests:
pytest tests/
Releasing
See docs/release.md for the current release process.