#!/usr/bin/env bash # check_fmt # Runs gofumpt on all packages in the repo and checks that *_example_test.go files have wrapped lines. # Check if gofumpt is installed if ! command -v gofumpt &> /dev/null; then echo "gofumpt is not installed. Install it with: go install mvdan.cc/gofumpt@latest" exit 1 fi gofumpt_out="$(gofumpt -l .)" if [[ $gofumpt_out ]]; then echo "gofumpt check failed for:"; sed -e 's/^/ - /' <<< "$gofumpt_out"; exit 1; fi # Use the "github.com/walle/lll" tool to check that all lines in *_example_test.go files are # wrapped at 80 characters to keep them readable when rendered on https://pkg.go.dev. # Ignore long lines that are comments containing URI-like strings and testable example output # comments like "// Output: ...". # E.g ignored lines: # // "mongodb://ldap-user:ldap-pwd@localhost:27017/?authMechanism=PLAIN" # // (https://www.mongodb.com/docs/manual/core/authentication-mechanisms-enterprise/#security-auth-ldap). # // Output: {"myint": {"$numberLong":"1"},"int32": {"$numberLong":"1"},"int64": {"$numberLong":"1"}} lll_out="$(find . -type f -name "*_examples_test.go" | lll -w 4 -l 80 -e '^\s*\/\/(.+:\/\/| Output:)' --files)" if [[ $lll_out ]]; then echo "lll check failed for:"; sed -e 's/^/ - /' <<< "$lll_out"; exit 1; fi