
Hello GHC devs, I finally got to finish reworked Git hook validations[1] which are active effective immediately for the ghc.git repo: - A new whitespace linter that enforces 3 separate in variants for files with the suffixes .hs .hsc .lhs .cabal .c .h .lhs-boot .hs-boot .x .y the 3 invariants (i.e. if the particular invariant held before the commit, it ought to hold afterwards as well): 1. no TABs 2. no trailing whitespaces (NEW) 3. no missing final EOL (NEW) - A new commit msg linter The rationale is explained in http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html TLDR: The structural conventions enforced by the new linter avoid messing up the output of Git tooling; Editors with support for commit-msg syntax-coloring like Vim or Emacs also follow these conventions. This linter has soft (-> warnings) and hard limits (-> error/rejection) The most important hard limits are: - subject line (i.e. 1st line) 80-char max length (& 8-chars min len) - 2nd line must be empty (if it exists) - body lines (i.e. 3rd+ lines) 100-char max length For more details about additional checks see actual code in [1]; the linter tries to give verbose error/warning messages and pointing exactly to the offending lines. Comments/suggestions/debate/pull-requests/etc welcome! PS: the new validators can easily be tested locally on a Git tree (although I've only tested this on Linux): usage: validate-whitespace <git-dir> [<commit-id>+] and you can pass symbolic refs such as 'HEAD' for the <commit-id>, e.g. validate-whitespace ~/Work/ghc-tree/.git HEAD Cheers, hvr [1]: https://github.com/haskell-infra/git-haskell-org-hooks/tree/master/src