difftastic/vendored_parsers/tree-sitter-hack/bin/test-examples

82 lines
1.7 KiB
Bash

#!/bin/bash
set -e
source bin/require_fd
while [[ $# -gt 0 ]]; do
case $1 in
--filter)
filter=$2
shift
shift
;;
--count)
count=1
shift
;;
--name-only)
name_only=1
shift
;;
*)
break
;;
esac
done
function filter-hack() {
grep -E --color=never '.*\.(hack|php)$' | sort -u
}
function find-hack() {
$fd '\.(hack|php)$' "$@" | sort -u
}
function print-results() {
if [[ "$count" -eq 1 ]]; then
failures="$(cat /dev/stdin | filter-hack | wc -l | tr -d ' ')"
# Very important
if [[ "$filures" -eq 1 ]]; then
echo "$failures failure"
else
echo "$failures failures"
fi
elif [[ "$name_only" -eq 1 ]]; then
filter-hack
else
cat /dev/stdin
fi
}
hhvm_failures="examples/hhvm-failures.txt"
hhvm_tests="examples/hhvm/hphp/hack/test"
# The HHVM repo has tests that verify intentional errors. We aren't doing that (yet).
# Filter out intentionally failing Hack files.
if ! test -f "$hhvm_failures"; then
printf "\033[1mGetting known HHVM failures...\033[0m\n"
find-hack $hhvm_tests |
xargs -n 256 bin/hh-errors 2>/dev/null |
filter-hack >$hhvm_failures
echo "$(wc -l <$hhvm_failures | tr -d ' ') known HHVM failures"
fi
printf "\033[1mGetting Tree-sitter examples errors...\033[0m\n"
find-hack $(ls -d examples/*/ | grep -v 'examples/hhvm') |
xargs -r bin/ts-errors |
print-results
comm -13 <(sort $hhvm_failures) <(find-hack $hhvm_tests | grep -E "$filter") |
# Looks interesting, but I think too experimental to support yet?
grep -v 'examples/hhvm/hphp/hack/test/pocket_universes' |
grep -v 'examples/hhvm/hphp/hack/test/typecheck/goto' |
xargs -r -n 256 bin/ts-errors |
print-results