Skip to main content

A linter for Fortran files

Project description

Fortran linter

This linter works on a line-by-line basis to enforce some rules regarding the format of Fortran files.

The linter does not ship with any grammar and is solely based on regular expressions. This allows to easily add new rules, but this implies some limitations.

Installation

There are 2 ways of installing the linter. The recommended one is through pip

pip install fortran-linter

The other way is to clone this repository and install it from the local copy:

git clone https://github.com/cphyc/fortran-syntax.git
cd fortran-syntax
pip install .

Please note that depending on your installation, you may have to add sudo to the pip install line. This is due to the fact that the package is shipped with a script fortran-linter. For some installation, the creation of this file may require root access.

Usage

This tool checks for fortran syntax against a few rules. To print a list of all the warnings for a file, run:

fortran-linter myfile.f90 --syntax-only

To autofix (most) warnings in place, do:

fortran-linter myfile.f90 -i

The original file will be backup'ed into myfile.f90.orig. All the safe fixes will be done and stored in the file myfile.f90.

For more help, you can type

fortran-linter -h

Rules

Here is a non-comprehensive set of rules that are enforced:

  • Punctuation should be followed by a space, this includes ,, ; and ).
  • Binary operators (==, +, ...) should be surrounded by spaces
  • The following special characters are surrounded by at least one space: ::, =.
  • A line should not exceed 120 characters (this is somehow already extreme). The maximum line length can be controlled from the CLI.
  • One should use use mpi instead of include "mpif.h". Note that this is not fixed by default as it may break codes where include "mpif.h" follows and implicit none statement.
  • Spaces are preferred over tabs, trailing whitespaces are cleaned.
  • Warnings are raised if you use real(8) :: foo. One should rather use integer, parameter :: dp = selected_real_kind(15); real(dp) :: foo or use iso_fortran_env; real(real64) :: foo
  • print statements should look like print *, "something"
  • write statements should look like write(*, *) "something"
  • Lines should be indented consistently (by default, using an indentation of 4 spaces)
  • FORD Compatibility: !! and !> are preserved and treated as comments like ! with one space after and at least one space before.

TODO list

  • ship on pip
  • add more rules (this one will never end)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

fortran_linter-1.1.3.tar.gz (3.5 MB view details)

Uploaded Source

Built Distribution

fortran_linter-1.1.3-py3-none-any.whl (15.8 kB view details)

Uploaded Python 3

File details

Details for the file fortran_linter-1.1.3.tar.gz.

File metadata

  • Download URL: fortran_linter-1.1.3.tar.gz
  • Upload date:
  • Size: 3.5 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.12.3

File hashes

Hashes for fortran_linter-1.1.3.tar.gz
Algorithm Hash digest
SHA256 a5337e19ec13243011760dda6ed4c3c41eb9b9ad2983cf34179b4829c23ed5f2
MD5 f16c54dbd8364bd0850f10997afd42b3
BLAKE2b-256 44706377bd3337e2cd9984b648c076772958e59e99be2b0ada10b1953f4cf418

See more details on using hashes here.

File details

Details for the file fortran_linter-1.1.3-py3-none-any.whl.

File metadata

File hashes

Hashes for fortran_linter-1.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 d7c0560b84029ad8226e5d67725fcc426dfd99f849d81bf54bcba24c6f143670
MD5 4c1d2988e0b17d697b01c43cae735553
BLAKE2b-256 c415355dd25b830d4a2d59c72fc12652aa48a49e90dfb8ab92e681ffe1278ce4

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page