diff --git a/dev/lint-python b/dev/lint-python index f738af9c4976..67c54662b6a2 100755 --- a/dev/lint-python +++ b/dev/lint-python @@ -21,10 +21,16 @@ SCRIPT_DIR="$( cd "$( dirname "$0" )" && pwd )" SPARK_ROOT_DIR="$(dirname "$SCRIPT_DIR")" # Exclude auto-generated configuration file. PATHS_TO_CHECK="$( cd "$SPARK_ROOT_DIR" && find . -name "*.py" )" +DOC_PATHS_TO_CHECK="$( cd "$SPARK_ROOT_DIR" && find . -name "*.py" | grep -vF 'functions.py' )" PYCODESTYLE_REPORT_PATH="$SPARK_ROOT_DIR/dev/pycodestyle-report.txt" +PYDOCSTYLE_REPORT_PATH="$SPARK_ROOT_DIR/dev/pydocstyle-report.txt" PYLINT_REPORT_PATH="$SPARK_ROOT_DIR/dev/pylint-report.txt" PYLINT_INSTALL_INFO="$SPARK_ROOT_DIR/dev/pylint-info.txt" +PYDOCSTYLEBUILD="pydocstyle" +EXPECTED_PYDOCSTYLEVERSION="2.1.1" +PYDOCSTYLEVERSION=$(python -c 'import pkg_resources; print(pkg_resources.get_distribution("pydocstyle").version)' 2> /dev/null) SPHINXBUILD=${SPHINXBUILD:=sphinx-build} + SPHINX_REPORT_PATH="$SPARK_ROOT_DIR/dev/sphinx-report.txt" cd "$SPARK_ROOT_DIR" @@ -67,19 +73,36 @@ python "$PYCODESTYLE_SCRIPT_PATH" --config=dev/tox.ini $PATHS_TO_CHECK >> "$PYCO pycodestyle_status="${PIPESTATUS[0]}" if [ "$compile_status" -eq 0 -a "$pycodestyle_status" -eq 0 ]; then - lint_status=0 + echo "pycodestyle checks passed." + rm "$PYCODESTYLE_REPORT_PATH" else - lint_status=1 -fi - -if [ "$lint_status" -ne 0 ]; then echo "pycodestyle checks failed." cat "$PYCODESTYLE_REPORT_PATH" rm "$PYCODESTYLE_REPORT_PATH" - exit "$lint_status" + exit 1 +fi + +# Check python document style, skip check if pydocstyle is not installed. +if hash "$PYDOCSTYLEBUILD" 2> /dev/null; then + if [[ "$PYDOCSTYLEVERSION" == "$EXPECTED_PYDOCSTYLEVERSION" ]]; then + pydocstyle --config=dev/tox.ini $DOC_PATHS_TO_CHECK >> "$PYDOCSTYLE_REPORT_PATH" + pydocstyle_status="${PIPESTATUS[0]}" + + if [ "$compile_status" -eq 0 -a "$pydocstyle_status" -eq 0 ]; then + echo "pydocstyle checks passed." + rm "$PYDOCSTYLE_REPORT_PATH" + else + echo "pydocstyle checks failed." + cat "$PYDOCSTYLE_REPORT_PATH" + rm "$PYDOCSTYLE_REPORT_PATH" + exit 1 + fi + + else + echo "The pydocstyle version needs to be latest 2.1.1. Skipping pydoc checks for now" + fi else - echo "pycodestyle checks passed." - rm "$PYCODESTYLE_REPORT_PATH" + echo >&2 "The pydocstyle command was not found. Skipping pydoc checks for now" fi # Check that the documentation builds acceptably, skip check if sphinx is not installed. diff --git a/dev/tox.ini b/dev/tox.ini index 583c1eaaa966..a9d419068b2e 100644 --- a/dev/tox.ini +++ b/dev/tox.ini @@ -17,3 +17,5 @@ ignore=E402,E731,E241,W503,E226,E722,E741,E305 max-line-length=100 exclude=cloudpickle.py,heapq3.py,shared.py,python/docs/conf.py,work/*/*.py,python/.eggs/* +[pydocstyle] +ignore=D100,D101,D102,D103,D104,D105,D106,D107,D200,D201,D202,D203,D204,D205,D206,D207,D208,D209,D210,D211,D212,D213,D214,D215,D300,D301,D302,D400,D401,D402,D403,D404,D405,D406,D407,D408,D409,D410,D411,D412,D413,D414