Pull request checklist

Please review the following items before submitting a pull request. This list can also be used when reviewing pull requests.

  • Verify that new files have a license with correct file name.
  • Run git diff on all modified files to look for spurious changes such as #include <iostream>.
  • If you added code that causes the compiler to emit a new error message, make sure that you also added a test that causes that error message to appear and verifies its correctness.
  • Annotate the code and tests with appropriate references to constraint and requirement numbers from the Fortran standard. Do not include the text of the constraint or requirement, just its number.
  • Alphabetize arbitrary lists of names.
  • Check dereferences of pointers and optionals where necessary.
  • Ensure that the scopes of all functions and variables are as local as possible.
  • Try to make all functions fit on a screen (40 lines).
  • Build and test with both GNU and clang compilers.
  • When submitting an update to a pull request, review previous pull request comments and make sure that you've actually made all of the changes that were requested.

Follow the style guide

The following items are taken from the C++ style guide. But even though I've read the style guide, they regularly trip me up.

  • Run clang-format using the git-clang-format script from LLVM HEAD.
  • Make sure that all source lines have 80 or fewer characters. Note that clang-format will do this for most code. But you may need to break up long strings.
  • Review declarations for proper use of constexpr and const.
  • Follow the C++ naming guidelines
  • Ensure that the names evoke their purpose and are consistent with existing code.
  • Used braced initializers.
  • Review pointer and reference types to make sure that you're using them appropriately. Note that the C++ style guide contains a section that describes all of the pointer types along with their characteristics.
  • Declare non-member functions static when possible. Prefer static functions over functions in anonymous namespaces.