DailyView/Carthage/Checkouts/facebook-ios-sdk/scripts/build_phase_swiftlint.sh
2025-12-30 16:40:31 +08:00

93 lines
2.9 KiB
Bash
Executable File

#!/bin/bash
# Copyright (c) Meta Platforms, Inc. and affiliates.
# All rights reserved.
#
# This source code is licensed under the license found in the
# LICENSE file in the root directory of this source tree.
# If $PROJECT_DIR is set, this is running from within Xcode from a project subfolder
if [ -n "$PROJECT_DIR" ]; then
cd .. # cd one level up to find the .swiftlint.yml file
PROJECT_DIR_NAME=${PROJECT_DIR##*/} # ex FBSDKShareKit
fi
GIT_ROOT=$(git rev-parse --show-toplevel 2>/dev/null)
# Get list of changed files
# shellcheck disable=SC2207
IFS=$'\n' CHANGED_FILES=($(git -P diff --name-only --diff-filter=MA main...HEAD && git -P diff --name-only --diff-filter=MA HEAD))
SWIFTLINT_PATH="internal/tools/swiftlint"
SWIFTFORMAT_PATH="internal/tools/swiftformat"
# If we don't have access to the internal directory, use whatever version is installed
if [ -d "$SWIFTFORMAT_PATH" ]; then
SWIFTLINT_PATH=$(which swiftlint)
SWIFTFORMAT_PATH=$(which swiftformat)
fi
# Lint changes from the current revision and uncommitted changes
if [ ${#CHANGED_FILES[@]} -eq 0 ]; then
echo "No files changed."
exit
fi
# Run the script from the comand line and pass in "--debug" as an argument for debugging
# i.e. scripts/build_phase_swiftlint.sh --debug
if [ "$1" = "--debug" ]; then
printf "\\nCHANGED_FILES:\\n"
printf "%s\n" "${CHANGED_FILES[@]}"
fi
# SwiftLint doesn't dedup file path args
# shellcheck disable=SC2207
IFS=$'\n' UNIQUE_SWIFT_FILES=($(printf '%s\n' "${CHANGED_FILES[@]}" | sort -u | grep ".*\.swift$"))
if [ ${#UNIQUE_SWIFT_FILES[@]} -eq 0 ]; then
echo "No Swift files to lint."
exit
fi
if [ "$1" = "--debug" ]; then
printf "\\nUNIQUE_SWIFT_FILES:\\n"
printf "%s\n" "${UNIQUE_SWIFT_FILES[@]}"
fi
# Fix for issue in which a file was added in a previous commit but is removed in the working copy
LINTABLE_FILES=()
for file in "${UNIQUE_SWIFT_FILES[@]}"; do
if [[ -e $file ]]; then
LINTABLE_FILES+=("$file")
elif [ "$1" = "--debug" ]; then
echo "FILE DOES NOT EXIST: $file"
fi
done
if [ "$1" = "--debug" ]; then
printf "\\nLINTABLE_FILES:\\n"
printf "%s\n" "${LINTABLE_FILES[@]}"
fi
# Run SwiftFormat
if [ -n "$SWIFTFORMAT_PATH" ]; then
if [ -n "$PROJECT_DIR_NAME" ]; then # if within Xcode filter by kit name
$SWIFTFORMAT_PATH --lint "${LINTABLE_FILES[@]}" 2>&1 | grep "$PROJECT_DIR_NAME" || true
else
$SWIFTFORMAT_PATH --lint "${LINTABLE_FILES[@]}"
fi
else
echo "warning: SwiftFormat not installed. Install with 'brew install swiftformat' or from https://github.com/nicklockwood/SwiftFormat"
fi
# Run SwiftLint
if [ -n "$SWIFTLINT_PATH" ]; then
if [ -n "$PROJECT_DIR_NAME" ]; then # if within Xcode filter by kit name
$SWIFTLINT_PATH lint "${LINTABLE_FILES[@]}" | grep "$PROJECT_DIR_NAME" || true
else
$SWIFTLINT_PATH lint "${LINTABLE_FILES[@]}"
fi
else
echo "warning: SwiftLint not installed, Install with 'brew install swiftlint' or from https://github.com/realm/SwiftLint"
fi