difftastic/vendor/tree-sitter-haskell/script/parse-example

51 lines
1.3 KiB
Bash

#!/usr/bin/env bash
# Usage: script/parse-examples [repo_name] [native|wasm]
# Exit immediately if a command exits with a non-zero status.
set -e
# Change directory to project root.
cd "$(dirname "$0")/.."
# Get the repository name
name=$1
repo=examples/$name
# Parse examples in 'native' or 'wasm' mode.
mode=${2:-native}
known_failures=$(cat "script/known-failures-$name.txt")
examples_to_parse=$(
for example in $(find "$repo" -name '*.hs'); do
if [[ ! $known_failures == *$example* ]]; then
echo $example
fi
done
)
if [ "$mode" == "native" ]; then
# Ensure the scanner was recompiled
tree-sitter test -f 'just compile it' >/dev/null
elif [ "$mode" == "wasm" ]; then
# Ensure tree-sitter-haskell.wasm was compiled
make node_modules/web-tree-sitter -s
make tree-sitter-haskell.wasm -s
fi
start=$(date '+%s.%N')
if [ "$mode" == "native" ]; then
echo $examples_to_parse | xargs -n 2000 tree-sitter parse -q
elif [ "$mode" == "wasm" ]; then
echo $examples_to_parse | xargs -n 2000 ./script/tree-sitter-parse.js
fi
end=$(date '+%s.%N')
skipped=$( echo $known_failures | wc -w )
parsed=$( echo $examples_to_parse | wc -w )
total=$((parsed+skipped))
percent=$(bc -l <<< "100*$parsed/$total")
duration=$(bc -l <<< "$end - $start")
printf "Successfully parsed %.2f%% of '$name' in %.4fs (%d of %d files)\n" $percent $duration $parsed $total