diff --git a/.github/workflows/swiftfmt.yml b/.github/workflows/swiftfmt.yml new file mode 100644 index 00000000..c6b12dee --- /dev/null +++ b/.github/workflows/swiftfmt.yml @@ -0,0 +1,22 @@ +name: Swift format +on: + push: + branches: + - main + pull_request: + paths: + - ".github/workflows/swiftfmt.yml" + - "**.swift" +jobs: + swiftfmt: + name: Run swift format + runs-on: macos-latest + steps: + - name: Check out code + uses: actions/checkout@v4 + with: + show-progress: false + + # Re-enable in follow-up PR that does the formatting. + # - name: Check formating + # run: ./swift-format.sh check diff --git a/.swiftformatignore b/.swiftformatignore new file mode 100644 index 00000000..4a8d9f81 --- /dev/null +++ b/.swiftformatignore @@ -0,0 +1 @@ +ios/Pods/** \ No newline at end of file diff --git a/README.md b/README.md index 901d4544..2f85f8d2 100644 --- a/README.md +++ b/README.md @@ -41,6 +41,9 @@ dart format lib/ test/ -l 120 In Android Studio, set the line length using Preferences -> Editor -> Code Style -> Dart -> Line length, set it to 120. Enable auto-format with Preferences -> Languages & Frameworks -> Flutter -> Format code on save. +`./swift-format.sh` can be used to format Swift code in the repo. + +Once `swift-format` supports ignoring directories (), we can move to a method of running it more like what describes. # Release diff --git a/swift-format.sh b/swift-format.sh new file mode 100755 index 00000000..5a00291c --- /dev/null +++ b/swift-format.sh @@ -0,0 +1,50 @@ +#!/bin/bash +##===----------------------------------------------------------------------===## +## +## This source file is part of the Swift.org open source project +## +## Copyright (c) 2024 Apple Inc. and the Swift project authors +## Licensed under Apache License v2.0 with Runtime Library Exception +## +## See https://swift.org/LICENSE.txt for license information +## See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors +## +##===----------------------------------------------------------------------===## + +# Vendored from while is open. + +# This file has been modified to only check formatting, with no linting, and to require a `check` command flag to fail when formatting was performed. + +set -euo pipefail + +log() { printf -- "** %s\n" "$*" >&2; } +error() { printf -- "** ERROR: %s\n" "$*" >&2; } +fatal() { error "$@"; exit 1; } + + +if [[ -f .swiftformatignore ]]; then + log "Found swiftformatignore file..." + + log "Running swift format format..." + tr '\n' '\0' < .swiftformatignore| xargs -0 -I% printf '":(exclude)%" '| xargs git ls-files -z '*.swift' | xargs -0 xcrun swift-format --parallel --recursive --in-place + + # log "Running swift format lint..." + + # tr '\n' '\0' < .swiftformatignore | xargs -0 -I% printf '":(exclude)%" '| xargs git ls-files -z '*.swift' | xargs -0 swift format lint --strict --parallel +else + log "Running swift format format..." + git ls-files -z '*.swift' | xargs -0 xcrun swift-format --parallel --recursive --in-place + + # log "Running swift format lint..." + + # git ls-files -z '*.swift' | xargs -0 swift format lint --strict --parallel +fi + + +if [ "${1-default}" = "check" ]; then +log "Checking for modified files..." + +GIT_PAGER='' git diff --exit-code '*.swift' + +log "✅ Found no formatting issues." +fi \ No newline at end of file