#!/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