#!/bin/bash

set -e

# TODO: Fix these known issues:
#  - [ ] Don't parse `#` as a cpp directive when it is a variable operator.


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

# clone_repo OWNER NAME SHA
function clone_repo {
  owner=$1
  name=$2
  sha=$3

  path=examples/$name
  if [ ! -d "$path" ]; then
    git clone "https://github.com/$owner/$name" "$path"
  fi

  pushd "$path" && git fetch
  git reset --hard $sha
  popd
}

# parse_examples NAME
function parse_examples {
  name=$1

  repo=examples/$name

  # TODO: Fix known issues in known_failures_*.txt
  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
  )

  echo $examples_to_parse | xargs -n 2000 tree-sitter parse -q

  skipped=$( echo $known_failures | wc -w )
  parsed=$( echo $examples_to_parse | wc -w )
  total=$((parsed+skipped))
  percent=$(bc -l <<< "100*$parsed/$total")

  printf "Successfully parsed %.2f%% of $repo (%d of %d files)\n" $percent $parsed $total
}

clone_repo joshvera effects 08f5f36f2600362685af593f4b327e933b60bf97
clone_repo PostgRest postgrest f80cfbf165f951a062b3cbedac4556019905ca49
clone_repo GaloisInc ivory 3d00324ad1c113c7e70957ff6a6d636d271d0fc4

for name in effects postgrest ivory; do
  parse_examples $name
done
