difftastic/vendor/tree-sitter-hack/bin/generate-corpus

57 lines
1.3 KiB
Bash

#!/bin/bash
set -e
source bin/require_sed
# This script creates corpus *.txt files expected by `tree-sitter test` in the format
# expected [0] based on *.php and *.exp files in test/cases.
#
# [0] https://tree-sitter.github.io/tree-sitter/creating-parsers#:~:text=Return%20statements
for cases_path in test/cases/*; do
corpus_name=$(basename $cases_path)
corpus_path="test/corpus/$corpus_name.txt"
echo "Generating $corpus_path"
cases="$(ls -d $cases_path/* | grep -E '^[^.]*\.exp$' | $sed -Ee 's/.exp$//' | sort -bu)"
printf "" >$corpus_path
first=1
for case in $cases; do
exp="$case.exp"
if [[ -f "$case.php" ]]; then
code="$case.php"
elif [[ -f "$case.hack" ]]; then
code="$case.hack"
elif [[ -f "$case.hhi" ]]; then
code="$case.hhi"
else
printf "Source file not found for $exp\n"
exit 1
fi
# Use the test case file name as the description
description=$(printf "$(basename $case)" | $sed -e 's/^\(.\)/\u\1/g' -e 's/-/ /g')
if [[ $first -eq 0 ]]; then
printf "\n" >>$corpus_path
else
first=0
fi
printf "==========================\n" >>$corpus_path
printf "$description\n" >>$corpus_path
printf "==========================\n\n" >>$corpus_path
cat $code >>$corpus_path
printf "\n---\n\n" >>$corpus_path
cat $exp >>$corpus_path
done
done