qmlfmt: detect array destructuring and skip file to avoid breakage.

This commit is contained in:
ItsLemmy
2025-10-17 11:03:48 -04:00
parent 702cd1d283
commit fae2535d00
+19 -4
View File
@@ -10,10 +10,25 @@ command -v qmlfmt &>/dev/null || { echo "qmlfmt not found" >&2; exit 1; }
format_file() { qmlfmt -e -b 360 -t 2 -i 2 -w "$1" || { echo "Failed: $1" >&2; return 1; }; }
export -f format_file
mapfile -t files < <(find "${1:-.}" -name "*.qml" -type f)
[ ${#files[@]} -eq 0 ] && { echo "No QML files found"; exit 0; }
# Find all .qml files
mapfile -t all_files < <(find "${1:-.}" -name "*.qml" -type f)
[ ${#all_files[@]} -eq 0 ] && { echo "No QML files found"; exit 0; }
echo "Formatting ${#files[@]} files..."
printf '%s\0' "${files[@]}" | \
echo "Scanning ${#all_files[@]} files for array destructuring..."
safe_files=()
for file in "${all_files[@]}"; do
# Checks for a comma inside brackets followed by an equals sign aka "array destructuring"
# as this ES6 syntax is not supported by qmlfmt and will result in breakage.
if grep -qE '\[.*,.*\]\s*=' "$file"; then
echo "-> Skipping (Array destructuring detected): $file" >&2
else
safe_files+=("$file")
fi
done
[ ${#safe_files[@]} -eq 0 ] && { echo "No safe files to format after filtering."; exit 0; }
echo "Formatting ${#safe_files[@]} files..."
printf '%s\0' "${safe_files[@]}" | \
xargs -0 -P "${QMLFMT_JOBS:-$(nproc)}" -I {} bash -c 'format_file "$@"' _ {} \
&& echo "Done" || { echo "Errors occurred" >&2; exit 1; }