#!/usr/bin/env bash

# Cause the script to exit if a single command fails
set -e  # o pipefail -v

# Comma-separated list of files or directories to exclude.
EXCLUDE=${EXCLUDE:=".git,__pycache__,docs/source/conf.py,build,dist"}

# Comma-separated list of errors and warnings to ignore (or skip).
readonly _IGNORE_COMMAS="C812,C813,C814,C815,C816"
readonly _IGNORE_DOCSTRINGS="D100,D104,D200,D204,D205,D212,D301,D400,D401,D402,D412,D413,D415"
readonly _IGNORE_DARGLINT="DAR003,DAR103,DAR203"
readonly _IGNORE_RST_DOCSTRINGS="RST201,RST203,RST210,RST213,RST301,RST304"
readonly _IGNORE_WEMAKE="WPS0,WPS100,WPS101,WPS110,WPS111,WPS112,WPS125,WPS2,WPS300,WPS301,WPS305,WPS306,WPS309,WPS317,WPS323,WPS326,WPS331,WPS333,WPS335,WPS336,WPS337,WPS338,WPS342,WPS347,WPS348,WPS349,WPS350,WPS352,WPS402,WPS404,WPS405,WPS408,WPS410,WPS412,WPS414,WPS420,WPS421,WPS425,WPS426,WPS429,WPS430,WPS431,WPS432,WPS433,WPS434,WPS435,WPS440,WPS441,WPS5,WPS6"
readonly _IGNORE_OTHER="E203,E731,E800,E1101,I,N812,P101,S,W0221,W503,W504,W605"
IGNORE=${IGNORE:="${_IGNORE_COMMAS},${_IGNORE_DOCSTRINGS},${_IGNORE_DARGLINT},${_IGNORE_RST_DOCSTRINGS},${_IGNORE_WEMAKE},${_IGNORE_OTHER}"}

# Maximum allowed line (and doc) length for the entirety of this run.
# Defaults to 99 chars, suggested by PEP.
LINE_LENGTH=${LINE_LENGTH:=99}

# Quote to expect. Defaults to double quote.
QUOTES=${QUOTES:="double"}


flake8 --exclude="${EXCLUDE}" \
  --ignore "${IGNORE}" \
  --docstring-quotes "${QUOTES}" \
  --inline-quotes "${QUOTES}" \
  --multiline-quotes "${QUOTES}" \
  --max-doc-length "${LINE_LENGTH}" \
  --max-line-length "${LINE_LENGTH}" \
  --docstring-convention "google" \
  --docstring-style "google" \
  --strictness "short" \
  "$@"
