Files
AstroJS/devtools/replace-type.sh
T
2026-06-14 05:53:32 +08:00

65 lines
1.2 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
if [ "$#" -ne 1 ]; then
echo "usage: $0 <TypeName>"
echo "example: $0 System.utils.IKey"
exit 1
fi
type_name="$1"
from="type {$type_name}"
to="type {typeof $type_name}"
mapfile -t files < <(git grep -l -F "$from" -- '*.js')
if [ "${#files[@]}" -eq 0 ]; then
echo "No matches found for: $from"
exit 0
fi
echo "Replacing:"
echo " $from"
echo "with:"
echo " $to"
echo
for file in "${files[@]}"; do
echo "============================================================"
echo "$file"
echo "============================================================"
git grep -n -F "$from" -- "$file" || true
echo
while true; do
read -r -p "Replace in this file? [y/N/q/a] " ans
case "$ans" in
y|Y)
perl -0pi -e 's/\Q'"$from"'\E/'"$to"'/g' "$file"
echo "patched: $file"
break
;;
a|A)
for f in "${files[@]}"; do
perl -0pi -e 's/\Q'"$from"'\E/'"$to"'/g' "$f"
echo "patched: $f"
done
exit 0
;;
q|Q)
echo "aborted"
exit 0
;;
""|n|N)
echo "skipped: $file"
break
;;
*)
echo "Use y, n, q, or a."
;;
esac
done
echo
done