diff options
Diffstat (limited to 'src/extract-generic.sh')
-rwxr-xr-x | src/extract-generic.sh | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/src/extract-generic.sh b/src/extract-generic.sh new file mode 100755 index 0000000..0c84ec1 --- /dev/null +++ b/src/extract-generic.sh @@ -0,0 +1,44 @@ +#!/usr/bin/env bash + +set -efu + +input_file=${1-/dev/stdin} + +tree-grepper \ + --query "$TREE_GREPPER_LANGUAGE" "$TREE_GREPPER_QUERY" \ + --format json $input_file | + jq 'sort_by(.file)' | + jq '.[]' --indent 0 | + while read -r line; do + file=$(echo "$line" | jq -r .file) + file_type=$(echo "$line" | jq -r .file_type) + items=$(echo "$line" | + jq '.matches[] | { file: $file, file_type: $file_type, match: . }' --arg file "$file" --arg file_type "$file_type" | + jq '. | select(.match.text | test("TODO .+"))' + ) + if test -z "$items"; then + continue + fi + + echo "$items" | jq --slurp '.[]' --indent 0 | + while read -r item; do + start_row=$(echo "$item" | jq '.match.start.row') + end_row=$(echo "$item" | jq '.match.end.row') + + last_commit=$(git --no-pager blame -L "$start_row,$start_row" "$file" -p | + head -n 1 | + cut -d ' ' -f 1 + ) + + text=$(echo "$item" | + jq .match.text -r | + sed 's/^'"$LINE_COMMENT_START"' *TODO *//' | + sed 's/^'"$BLOCK_COMMENT_START"' *TODO *//' | + sed 's/ *'"$BLOCK_COMMENT_END"'$//') + + echo "$item" | jq '. + {"text": $text, "last_commit": $last_commit}' \ + --arg text "$text" \ + --arg last_commit "$last_commit" \ + -c + done + done |