Add dev-ghost-doctor.sh (t-shadow check + runtime clean + restart) and dev-ultra-restore.sh (deep clean with --full/--no-start/--check flags). Improve check-no-t-shadow.sh patterns for broader t-variable detection. Clean-dev-runtime now runs guardrail check automatically. Remove --force from vite dev. Add npm script shortcuts for all new tools.
47 lines
1.5 KiB
Bash
47 lines
1.5 KiB
Bash
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
SRC_DIR="${ROOT_DIR}/src"
|
|
|
|
echo "Checking for forbidden i18n 't' shadowing patterns in .svelte files..."
|
|
|
|
had_issues=0
|
|
|
|
check_pattern() {
|
|
local label="$1"
|
|
local pattern="$2"
|
|
if rg -n --glob '*.svelte' "${pattern}" "${SRC_DIR}" >/tmp/qbz_t_shadow_check.out 2>/dev/null; then
|
|
echo
|
|
echo "Found ${label}:"
|
|
cat /tmp/qbz_t_shadow_check.out
|
|
had_issues=1
|
|
fi
|
|
}
|
|
|
|
# Template loop variable shadowing.
|
|
check_pattern "template each-loop shadowing (as t)" '\{#each[^\n]*\bas t\b'
|
|
|
|
# Plain variable/function-loop names using `t`.
|
|
check_pattern "variable declaration named t" '\b(const|let|var)\s+t\b'
|
|
check_pattern "for-loop variable named t" 'for\s*\(\s*(const|let|var)\s+t\b'
|
|
|
|
# Callback parameters named `t` (single or parenthesized).
|
|
check_pattern "arrow callback parameter named t" '\bt\s*=>|\(\s*t(?:\s*:[^)]*)?\s*\)\s*=>|\(\s*[^,)]*,\s*t(?:\s*:[^)]*)?\s*\)\s*=>'
|
|
|
|
# get(t) is fragile in Svelte files that import i18n store `t`.
|
|
check_pattern "get(t) usage in .svelte files" '\bget\s*\(\s*t\s*\)'
|
|
|
|
# Lightweight same-line checks for $derived expressions.
|
|
check_pattern "store translation access inside \$derived (same line)" '\$derived(?:\.by)?\([^)]*(\$t\(|get\(t\))'
|
|
check_pattern "usage of t inside \$derived (same line)" '\$derived(?:\.by)?\([^)]*\bt\b'
|
|
|
|
|
|
if [[ "${had_issues}" -ne 0 ]]; then
|
|
echo
|
|
echo "check-no-t-shadow: FAIL"
|
|
exit 1
|
|
fi
|
|
|
|
echo "check-no-t-shadow: OK"
|