YAPF is a Python code formatter that automatically rewrites source to match a chosen style, using a clang-format–inspired algorithm to search for the “best” layout under your rules. Instead of relying on a fixed set of heuristics, it explores formatting decisions and chooses the lowest-cost result, aiming to produce code a human would write when following a style guide. You can run it as a command-line tool or call it as a library via FormatCode / FormatFile, making it easy to embed in editors, CI, and custom tooling. Styles are highly configurable: start from presets like pep8, google, yapf, or facebook, then override dozens of options in .style.yapf, setup.cfg, or pyproject.toml. It supports recursive directory formatting, line-range formatting, and diff-only output so you can check or fix just the lines you touched.
Features
- Performance helpers: Recursive formatting, --parallel for multiple files, and in-place edits with -i.
- Configurable styles: Use pep8, google, yapf, or facebook as a base and override fine-grained knobs in config files or --style flags.
- CLI and library APIs: Run from the terminal or call FormatCode / FormatFile programmatically.
- Partial / selective formatting: Reformat specific line ranges (--lines) or only changed hunks via yapf-diff.
- Editor & CI friendly: Editor plugins available; --diff and return codes enable easy CI enforcement.
- Ignore support: Exclude paths with .yapfignore or [tool.yapfignore] in pyproject.toml.