Giter VIP home page Giter VIP logo

fortran-linter's Introduction

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 include ,, ; 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)

TODO list

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

fortran-linter's People

Contributors

cphyc avatar leliel12 avatar pre-commit-ci[bot] avatar pums974 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.