tree-sitter-elm 4.3.3

Rust bindings for the tree sitter elm language parser
Documentation
#!/bin/bash

cd "$(dirname "$0")/.."

function checkout() {
  repo=$1; url=$2;
  if [ ! -d "$repo" ]; then
    git clone "https://github.com/$url" "$repo"
  fi

  pushd "$repo"
  git fetch && git reset --hard HEAD
  popd
}

echo "Getting libs"
libs_to_parse=$(grep -Po '"name":.*?[^\\]",' ./script/search.json | perl -pe 's/"name": "//; s/^"//; s/",$//')
libs_not_to_parse=$(grep -Po '".+"' ./script/error-packages.json | perl -pe 's/^"//; s/"$//')

for lib in $libs_to_parse; do
    if [[ ! $libs_not_to_parse == *$lib* ]]; then
      echo $lib
      checkout "examples-full/$lib" "$lib"
    fi
done

echo "Getting applications"
applications_to_parse=$(grep -Po '".+"' ./script/applications.json | perl -pe 's/^"//; s/"$//')

for project in $applications_to_parse; do
      echo $project
      checkout "examples-full/$project" "$project"
done

skipped_files=()
all_examples=$(find examples-full -name '*.elm')
known_failures=$(cat script/known-failures.txt)
examples_to_parse=$(
  for example in $all_examples; do
    if [[ ! $known_failures == *$example* ]]; then
      echo $example
    else
      skipped_files+=($example)
    fi
  done
)

start=`date +%s.%N`
tree_sitter_report=$(echo $examples_to_parse | xargs -n 1000 npx tree-sitter parse -q)
end=`date +%s.%N`

ret_code=$?

echo -e "-----------------------------------------------------------------\n$tree_sitter_report \n -----------------------------------------------------------------\n"

errors=$( echo "$tree_sitter_report" | sed '/^\s*$/d' | wc -l )

skipped=$( echo ${#skipped_files[@]} )
tried_to_parse=$( echo "$examples_to_parse" | wc -w )
parsed=$(bc -l <<< "$tried_to_parse-$errors")
total=$((tried_to_parse+skipped))
percent=$(bc -l <<< "100*$parsed/$total" )
runtime=$( echo "$end - $start" | bc -l )

printf "Successfully parsed %d of %d files (%.2f%%)\nSkipped: %d Failed: %d\nTook: %s\n" $parsed $total $percent $skipped $errors $runtime

exit $ret_code