ffmt
A fast, configurable Fortran formatter with support for Fypp, Doxygen, and OpenACC/OpenMP directives. Written in Rust. Installable via pip.
Documentation | Configuration | Changelog
Installation
Or via Cargo:
Quick start
|
Features
- Code -- indentation, whitespace normalization, keyword casing, named ends, line wrapping, operator modernization (
.eq.->==), double-colon enforcement, trailing semicolon removal - Comments -- rewrapping, inline spacing (S102),
!<alignment,!&/& !cleanup, format suppression (! ffmt off/on) - Structure -- blank line management around openers/closers/
#ifdef, declaration::alignment, declaration/use compaction - Preprocessor -- Fypp (
#:if,$:,@:), C preprocessor (#ifdef), OpenACC (!$acc), OpenMP (!$omp) - Opt-in -- multi-statement splitting, assignment alignment,
&column alignment, use-statement reformatting
Most options accept true, false, or "preserve". See the configuration reference for all options.
Configuration
Create ffmt.toml or add [tool.ffmt] to pyproject.toml:
= 4
= 132
= "lower"
= true
= true
[]
= true
= false
CI
# GitHub Actions
- uses: sbryngelson/ffmt@latest
with:
args: "--check src/"
# pre-commit
repos:
- repo: https://github.com/sbryngelson/ffmt
rev: v0.3.3
hooks:
- id: ffmt
Other Fortran formatters
| Formatter | Language | Status | Notes |
|---|---|---|---|
| fprettify | Python | Unmaintained | Free-form only. Fypp support. |
| findent | C | Active | Indentation and fixed/free conversion. |
| Codee Formatter | Proprietary | Active | Commercial. Tree-sitter based. |
| LFortran fmt | Rust | In development | AST-based. |
| Fortitude | Rust | Active | Linter with auto-fix. |
License
MIT