From 91de0438fedb9bfe9551677512f016a2377d9f48 Mon Sep 17 00:00:00 2001 From: Andrew Kaster Date: Wed, 28 Aug 2024 22:36:14 -0600 Subject: [PATCH] Meta: Add swift-format linter script swift-format is available in the Xcode 16 Beta and homebrew. We will need some extra docs to tell Linux developers how to get it on their distribution. This also makes use of the fact that you can pass git diff a colon delimited pattern to include ':*pattern' or exclude ':!*pattern' matching files, which is pretty neat. --- Meta/lint-ci.sh | 9 ++++++++- Meta/lint-swift.sh | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+), 1 deletion(-) create mode 100755 Meta/lint-swift.sh diff --git a/Meta/lint-ci.sh b/Meta/lint-ci.sh index 45cd41beaa6..cc1638ca3c7 100755 --- a/Meta/lint-ci.sh +++ b/Meta/lint-ci.sh @@ -43,11 +43,18 @@ else echo -e "[${GREEN}SKIP${NC}]: IPCMagicLinter (in Meta/lint-ci.sh)" fi -if Meta/lint-clang-format.sh --overwrite-inplace "$@" && git diff --exit-code; then +if Meta/lint-clang-format.sh --overwrite-inplace "$@" && git diff --exit-code -- ':*.cpp' ':*.h' ':*.mm'; then echo -e "[${GREEN}OK${NC}]: Meta/lint-clang-format.sh" else echo -e "[${RED}FAIL${NC}]: Meta/lint-clang-format.sh" ((FAILURES+=1)) fi +if Meta/lint-swift.sh "$@" && git diff --exit-code -- ':*.swift'; then + echo -e "[${GREEN}OK${NC}]: Meta/lint-swift.sh" +else + echo -e "[${RED}FAIL${NC}]: Meta/lint-swift.sh" + ((FAILURES+=1)) +fi + exit "${FAILURES}" diff --git a/Meta/lint-swift.sh b/Meta/lint-swift.sh new file mode 100755 index 00000000000..8b0a210c6ca --- /dev/null +++ b/Meta/lint-swift.sh @@ -0,0 +1,33 @@ +#!/usr/bin/env bash + +set -e + +script_path=$(cd -P -- "$(dirname -- "$0")" && pwd -P) +cd "${script_path}/.." || exit 1 + +if [ "$#" -eq "0" ]; then + files=() + while IFS= read -r file; do + files+=("$file") + done < <( + git ls-files '*.swift' + ) +else + files=() + for file in "$@"; do + if [[ "${file}" == *".swift" ]] ; then + files+=("${file}") + fi + done +fi + +if (( ${#files[@]} )); then + if ! command -v swift-format >/dev/null 2>&1 ; then + echo "swift-format is not available, but Swift files need linting! Either skip this script, or install swift-format." + exit 1 + fi + swift-format -i "${files[@]}" + echo "Maybe some files have changed. Sorry, but swift-format doesn't indicate what happened." +else + echo "No .swift files to check." +fi