fprettify is an auto-formatter for modern Fortran code that imposes strict whitespace formatting, written in Python.
NOTE: I'm looking for help to maintain this repository, see #127.
- Line continuations are aligned with the previous opening delimiter
(/or with an assignment operator
=>. If none of the above is present, a default hanging indent is applied.
- Consistent amount of whitespace around operators and delimiters.
- Removal of extraneous whitespace and consecutive blank lines.
- Change letter case (upper case / lower case conventions) of intrinsics
- Tested for editor integration.
- By default, fprettify causes whitespace changes only and thus preserves revision history.
- fprettify can handle cpp and fypp preprocessor directives.
- Works only for modern Fortran (Fortran 90 upwards).
- Feature missing? Please create an issue.
- Python 3 (Python 2.7 no longer supported)
- ConfigArgParse: optional, enables use of config file
examples/*before.f90 (original Fortran files) with
examples/*after.f90 (reformatted Fortran files) to see what fprettify does. A quick demonstration:
program demo integer :: endif,if,elseif integer,DIMENSION(2) :: function endif=3;if=2 if(endif==2)then endif=5 elseif=if+4*(endif+& 2**10) elseif(endif==3)then function(if)=endif/elseif print*,endif endif end program
program demo integer :: endif, if, elseif integer, DIMENSION(2) :: function endif = 3; if = 2 if (endif == 2) then endif = 5 elseif = if + 4*(endif + & 2**10) elseif (endif == 3) then function(if) = endif/elseif print *, endif endif end program
The latest release can be installed using pip:
pip install --upgrade fprettify
Installation from source requires Python Setuptools:
pip install .
For local installation, use
conda install -c conda-forge fprettify
Autoformat file1, file2, ... inplace by
fprettify file1, file2, ...
The default indent is 3. If you prefer something else, use
--indent n argument.
In order to apply fprettify recursively to an entire Fortran project instead of a single file, use the
For more options, read
For editor integration, use
For instance, with Vim, use fprettify with
gq by putting the following commands in your
autocmd Filetype fortran setlocal formatprg=fprettify\ --silent
fprettify can be deactivated for selected lines: a single line followed by an inline comment starting with
!& is not auto-formatted and consecutive lines that are enclosed between two comment lines
!&> are not auto-formatted. This is useful for cases where manual alignment is preferred over auto-formatting. Furthermore, deactivation is necessary when non-standard Fortran syntax (such as advanced usage of preprocessor directives) prevents proper formatting. As an example, consider the following snippet of fprettify formatted code:
A = [-1, 10, 0, & 0, 1000, 0, & 0, -1, 1]
In order to manually align the columns, fprettify needs to be deactivated by
A = [-1, 10, 0, & !& 0, 1000, 0, & !& 0, -1, 1] !&
or, equivalently by
!&< A = [-1, 10, 0, & 0, 1000, 0, & 0, -1, 1] !&>
The testing mechanism allows you to easily test fprettify with any Fortran project of your choice. Simply clone or copy your entire project into
fortran_tests/before and run
python setup.py test. The directory
fortran_tests/after contains the test output (reformatted Fortran files). If testing fails, please submit an issue!