diff options
author | Alexander Foremny <aforemny@posteo.de> | 2023-09-05 15:59:25 +0200 |
---|---|---|
committer | Alexander Foremny <aforemny@posteo.de> | 2023-09-05 16:00:14 +0200 |
commit | bd02726bca52e8e3343426d48b6e893ef77dc6cb (patch) | |
tree | 541534cbb528e330c149680619d5f98be521dfee /src/extract-generic.sh | |
parent | 3dae57727e5410b84f107d94212e641194c4b385 (diff) |
refactor extract-generic.sh
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 |