Meta: Add swift-format linter script
Some checks are pending
CI / Lagom (false, NO_FUZZ, ubuntu-22.04, Linux, GNU) (push) Waiting to run
CI / Lagom (false, FUZZ, ubuntu-22.04, Linux, Clang) (push) Waiting to run
CI / Lagom (false, NO_FUZZ, macos-14, macOS, Clang) (push) Waiting to run
CI / Lagom (true, NO_FUZZ, ubuntu-22.04, Linux, Clang) (push) Waiting to run
Package the js repl as a binary artifact / build-and-package (macos-14, macOS, macOS-universal2) (push) Waiting to run
Package the js repl as a binary artifact / build-and-package (ubuntu-22.04, Linux, Linux-x86_64) (push) Waiting to run
Run test262 and test-wasm / run_and_update_results (push) Waiting to run
Lint Code / lint (push) Waiting to run
Push notes / build (push) Waiting to run

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.
This commit is contained in:
Andrew Kaster 2024-08-28 22:36:14 -06:00 committed by Andrew Kaster
parent 2575cfb14c
commit 91de0438fe
Notes: github-actions[bot] 2024-10-01 19:34:01 +00:00
2 changed files with 41 additions and 1 deletions

View file

@ -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}"

33
Meta/lint-swift.sh Executable file
View file

@ -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