mirror of
https://github.com/dense-analysis/ale.git
synced 2025-12-07 21:24:33 +08:00
Merge pull request #3471 from kevinclark/3448-fix-unittests
Make test/scripts/custom-checks portable
This commit is contained in:
5
test/script/check-duplicate-tags
Executable file
5
test/script/check-duplicate-tags
Executable file
@@ -0,0 +1,5 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -e
|
||||
|
||||
grep --exclude=tags -roh '\*.*\*$' doc | sort | uniq -d
|
||||
@@ -15,14 +15,13 @@ while read -r; do
|
||||
if [[ "$REPLY" =~ ^! ]]; then
|
||||
language="${REPLY/!/}"
|
||||
else
|
||||
# shellcheck disable=SC2001
|
||||
echo "$language - $REPLY"
|
||||
fi
|
||||
done < <(
|
||||
grep '^\*\|^ *\*' doc/ale-supported-languages-and-tools.txt \
|
||||
| sed -e '1,2d' \
|
||||
| sed 's/^\* */!/' \
|
||||
| sed 's/^ *\* *\|!!\|\^\|(.*)\|`//g' \
|
||||
| sed -E 's/^ *\* *|!!|\^|\(.*\)|`//g' \
|
||||
| sed 's/ *$//'
|
||||
) > "$doc_file"
|
||||
|
||||
@@ -30,13 +29,12 @@ while read -r; do
|
||||
if [[ "$REPLY" =~ ^! ]]; then
|
||||
language="${REPLY/!/}"
|
||||
else
|
||||
# shellcheck disable=SC2001
|
||||
echo "$language - $REPLY"
|
||||
fi
|
||||
done < <(
|
||||
grep '^\*\|^ *\*' supported-tools.md \
|
||||
| sed 's/^\* */!/' \
|
||||
| sed 's/^ *\* *\|:floppy_disk:\|:warning:\|(.*)\|\[\|\].*\|-n flag//g' \
|
||||
| sed -E 's/^ *\* *|:floppy_disk:|:warning:|\(.*\)|\[|\].*|-n flag//g' \
|
||||
| sed 's/ *$//'
|
||||
) > "$readme_file"
|
||||
|
||||
|
||||
11
test/script/check-tag-alignment
Executable file
11
test/script/check-tag-alignment
Executable file
@@ -0,0 +1,11 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
exit_code=0
|
||||
|
||||
# Documentation tags need to be aligned to the right margin, so look for
|
||||
# tags which aren't at the right margin.
|
||||
grep ' \*[^*]\+\*$' doc/ -r \
|
||||
| awk '{ sep = index($0, ":"); if (length(substr($0, sep + 1 )) < 79) { print } }' \
|
||||
| grep . && exit_code=1
|
||||
|
||||
exit $exit_code
|
||||
22
test/script/check-tag-references
Executable file
22
test/script/check-tag-references
Executable file
@@ -0,0 +1,22 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -e
|
||||
|
||||
exit_code=0
|
||||
tag_regex='[gb]\?:\?\(ale\|ALE\)[a-zA-Z_\-]\+'
|
||||
|
||||
tags="$(mktemp -t tags.XXXXXXXX)"
|
||||
refs="$(mktemp -t refs.XXXXXXXX)"
|
||||
# Grep for tags and references, and complain if we find a reference without
|
||||
# a tag for the reference. Only our tags will be included.
|
||||
grep --exclude=tags -roh "\\*$tag_regex\\*" doc | sed 's/*//g' | sort -u > "$tags"
|
||||
grep --exclude=tags -roh "|$tag_regex|" doc | sed 's/|//g' | sort -u > "$refs"
|
||||
|
||||
exit_code=0
|
||||
|
||||
if ! [[ $(comm -23 $refs $tags | wc -l) -eq 0 ]]; then
|
||||
exit_code=1
|
||||
fi
|
||||
|
||||
rm "$tags"
|
||||
rm "$refs"
|
||||
@@ -35,7 +35,7 @@ sed -n "$toc_start_line,$toc_end_line"p doc/ale.txt \
|
||||
> "$toc_file"
|
||||
|
||||
# Get all of the doc files in a natural sorted order.
|
||||
doc_files="$(/usr/bin/env ls -1v doc | grep ^ale- | sed 's/^/doc\//' | paste -sd ' ' -)"
|
||||
doc_files="$(/usr/bin/env ls -1v doc | grep '^ale-' | sed 's/^/doc\//' | paste -sd ' ' -)"
|
||||
|
||||
# shellcheck disable=SC2086
|
||||
grep -h '\*ale-.*-options\|^[a-z].*\*ale-.*\*$' $doc_files \
|
||||
|
||||
@@ -13,7 +13,7 @@ echo 'Custom warnings/errors follow:'
|
||||
echo
|
||||
|
||||
set -o pipefail
|
||||
docker run -a stdout "${docker_flags[@]}" test/script/custom-linting-rules . || exit_code=$?
|
||||
docker run "${docker_flags[@]}" test/script/custom-linting-rules . || exit_code=$?
|
||||
set +o pipefail
|
||||
echo
|
||||
|
||||
@@ -23,7 +23,10 @@ echo '========================================'
|
||||
echo 'Duplicate tags follow:'
|
||||
echo
|
||||
|
||||
grep --exclude=tags -roh '\*.*\*$' doc | sort | uniq -d || exit_code=$?
|
||||
set -o pipefail
|
||||
docker run "${docker_flags[@]}" test/script/check-duplicate-tags . || exit_code=$?
|
||||
set +o pipefail
|
||||
echo
|
||||
|
||||
echo '========================================'
|
||||
echo 'Checking for invalid tag references'
|
||||
@@ -31,14 +34,9 @@ echo '========================================'
|
||||
echo 'Invalid tag references tags follow:'
|
||||
echo
|
||||
|
||||
tag_regex='[gb]\?:\?\(ale\|ALE\)[a-zA-Z_\-]\+'
|
||||
|
||||
# Grep for tags and references, and complain if we find a reference without
|
||||
# a tag for the reference. Only our tags will be included.
|
||||
diff -u \
|
||||
<(grep --exclude=tags -roh "\\*$tag_regex\\*" doc | sort -u | sed 's/*//g') \
|
||||
<(grep --exclude=tags -roh "|$tag_regex|" doc | sort -u | sed 's/|//g') \
|
||||
| grep '^+[^+]' && exit_code=1
|
||||
set -o pipefail
|
||||
docker run "${docker_flags[@]}" test/script/check-tag-references || exit_code=$?
|
||||
set +o pipefail
|
||||
|
||||
echo '========================================'
|
||||
echo 'diff supported-tools.md and doc/ale-supported-languages-and-tools.txt tables'
|
||||
@@ -46,7 +44,9 @@ echo '========================================'
|
||||
echo 'Differences follow:'
|
||||
echo
|
||||
|
||||
test/script/check-supported-tools-tables || exit_code=$?
|
||||
set -o pipefail
|
||||
docker run "${docker_flags[@]}" test/script/check-supported-tools-tables || exit_code=$?
|
||||
set +o pipefail
|
||||
|
||||
echo '========================================'
|
||||
echo 'Look for badly aligned doc tags'
|
||||
@@ -54,18 +54,18 @@ echo '========================================'
|
||||
echo 'Badly aligned tags follow:'
|
||||
echo
|
||||
|
||||
# Documentation tags need to be aligned to the right margin, so look for
|
||||
# tags which aren't at the right margin.
|
||||
grep ' \*[^*]\+\*$' doc/ -r \
|
||||
| awk '{ sep = index($0, ":"); if (length(substr($0, sep + 1 )) < 79) { print } }' \
|
||||
| grep . && exit_code=1
|
||||
set -o pipefail
|
||||
docker run "${docker_flags[@]}" test/script/check-tag-alignment || exit_code=$?
|
||||
set +o pipefail
|
||||
|
||||
echo '========================================'
|
||||
echo 'Look for table of contents issues'
|
||||
echo '========================================'
|
||||
echo
|
||||
|
||||
test/script/check-toc || exit_code=$?
|
||||
set -o pipefail
|
||||
docker run "${docker_flags[@]}" test/script/check-toc || exit_code=$?
|
||||
set +o pipefail
|
||||
|
||||
echo '========================================'
|
||||
echo 'Check Python code'
|
||||
|
||||
@@ -53,17 +53,29 @@ check_errors() {
|
||||
regex="$1"
|
||||
message="$2"
|
||||
include_arg=''
|
||||
exclude_arg=''
|
||||
|
||||
if [ $# -gt 2 ]; then
|
||||
include_arg="--include $3"
|
||||
fi
|
||||
|
||||
if [ $# -gt 3 ]; then
|
||||
shift
|
||||
shift
|
||||
shift
|
||||
|
||||
while (( "$#" )); do
|
||||
exclude_arg="$exclude_arg --exclude $1"
|
||||
shift
|
||||
done
|
||||
fi
|
||||
|
||||
for directory in "${directories[@]}"; do
|
||||
# shellcheck disable=SC2086
|
||||
while read -r; do
|
||||
RETURN_CODE=1
|
||||
echo "$REPLY $message"
|
||||
done < <(grep -H -n "$regex" $include_arg "$directory"/**/*.vim \
|
||||
done < <(grep -H -n "$regex" $include_arg $exclude_arg "$directory"/**/*.vim \
|
||||
| grep -v 'no-custom-checks' \
|
||||
| grep -o '^[^:]\+:[0-9]\+' \
|
||||
| sed 's:^\./::')
|
||||
@@ -92,7 +104,7 @@ if (( FIX_ERRORS )); then
|
||||
done
|
||||
fi
|
||||
|
||||
# The arguments are: regex, explanation, [filename_filter]
|
||||
# The arguments are: regex, explanation, [filename_filter], [list, of, exclusions]
|
||||
check_errors \
|
||||
'^function.*) *$' \
|
||||
'Function without abort keyword (See :help except-compat)'
|
||||
@@ -114,7 +126,10 @@ check_errors '==?' "Use 'is?' instead of '==?'. 0 ==? 'foobar' is true"
|
||||
check_errors '!=#' "Use 'isnot#' instead of '!=#'. 0 !=# 'foobar' is false"
|
||||
check_errors '!=?' "Use 'isnot?' instead of '!=?'. 0 !=? 'foobar' is false"
|
||||
check_errors '^ *:\?echo' "Stray echo line. Use \`execute echo\` if you want to echo something"
|
||||
check_errors $'name.:.*\'[a-z_]*[^a-z_0-9][a-z_0-9]*\',$' 'Use snake_case names for linters' '*/ale_linters/*'
|
||||
# Exclusions for grandfathered-in exceptions
|
||||
exclusions="clojure/clj_kondo.vim elixir/elixir_ls.vim go/golangci_lint.vim swift/swiftformat.vim"
|
||||
# shellcheck disable=SC2086
|
||||
check_errors $'name.:.*\'[a-z_]*[^a-z_0-9][a-z_0-9]*\',$' 'Use snake_case names for linters' '*/ale_linters/*' $exclusions
|
||||
# Checks for improving type checks.
|
||||
check_errors $'\\(==.\\?\\|is\\) type([\'"]\+)' "Use 'is v:t_string' instead"
|
||||
check_errors '\(==.\?\|is\) type([0-9]\+)' "Use 'is v:t_number' instead"
|
||||
|
||||
Reference in New Issue
Block a user