42 lines
1023 B
Bash
42 lines
1023 B
Bash
#!/usr/bin/env bash
|
||
# 语法检查 + 行尾规整
|
||
#
|
||
# 从 Windows 侧的 UNC 路径写文件会带 CRLF,PHP 能跑但和仓库里其余 LF 文件混排,
|
||
# diff 会整片变红。这里统一转成 LF 再 php -l。
|
||
#
|
||
# 用法:bash scripts/lint.sh [目录或文件 ...] 不带参数则检查 app/ routes/ config/
|
||
set -uo pipefail
|
||
|
||
cd "$(diname "$0")/.." || exit 1
|
||
|
||
TARGETS=("$@")
|
||
if [ ${#TARGETS[@]} -eq 0 ]; then
|
||
TARGETS=(app routes config database)
|
||
fi
|
||
|
||
mapfile -t FILES < <(find "${TARGETS[@]}" -type f -name '*.php' 2>/dev/null | sort)
|
||
|
||
if [ ${#FILES[@]} -eq 0 ]; then
|
||
echo "no php files under: ${TARGETS[*]}"
|
||
exit 0
|
||
fi
|
||
|
||
CRLF_FIXED=0
|
||
for f in "${FILES[@]}"; do
|
||
if grep -qU $'\r' "$f" 2>/dev/null; then
|
||
perl -pi -e 's/\r\n/\n/' "$f"
|
||
CRLF_FIXED=$((CRLF_FIXED + 1))
|
||
fi
|
||
done
|
||
|
||
FAILED=0
|
||
for f in "${FILES[@]}"; do
|
||
if ! out=$(php -l "$f" 2>&1); then
|
||
echo "$out"
|
||
FAILED=$((FAILED + 1))
|
||
fi
|
||
done
|
||
|
||
echo "checked=${#FILES[@]} crlf_fixed=${CRLF_FIXED} syntax_errors=${FAILED}"
|
||
[ "$FAILED" -eq 0 ]
|