93 lines
2.9 KiB
Bash
Executable File
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
|