Browse Source

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.
Andrew Kaster 7 months ago
parent
commit
91de0438fe
2 changed files with 41 additions and 1 deletions
  1. 8 1
      Meta/lint-ci.sh
  2. 33 0
      Meta/lint-swift.sh

+ 8 - 1
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}"

+ 33 - 0
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