refactor: add FORCE_LINT arg

This commit is contained in:
Vlad Suhomlinov 2021-09-13 18:47:37 +03:00
parent 5a6dd866f7
commit 9e8d088017
1 changed files with 44 additions and 31 deletions

View File

@ -12,14 +12,19 @@
# SRCROOT - project directory. # SRCROOT - project directory.
# PODS_ROOT - cocoapods installation directory (eg. ${SRCROOT}/Pods). # PODS_ROOT - cocoapods installation directory (eg. ${SRCROOT}/Pods).
# #
# Available environment variables:
# FORCE_LINT - lint all project.
#
# Optional environment variables: # Optional environment variables:
# SWIFTLINT_EXECUTABLE - path to swiftlint executable. # SWIFTLINT_EXECUTABLE - path to swiftlint executable.
# SWIFTLINT_CONFIG_PATH - path to swiftlint config. # SWIFTLINT_CONFIG_PATH - path to swiftlint config.
# SCRIPT_INPUT_FILE_COUNT - number of files listed in "Input files" of build phase. # SCRIPT_INPUT_FILE_COUNT - number of files listed in "Input files" of build phase.
# SCRIPT_INPUT_FILE_{N} - file path to directory that should be checked. # SCRIPT_INPUT_FILE_{N} - file path to directory that should be checked.
# FORCE_LINT - lint all project.
# #
# Example of usage: # Example of usage:
# swiftlint.sh # swiftlint.sh
# FORCE_LINT=true; swiftlint.sh
# swiftlint.sh Pods/Swiftlint/swiftlint build-scripts/xcode/.swiftlint.yml # swiftlint.sh Pods/Swiftlint/swiftlint build-scripts/xcode/.swiftlint.yml
# #
@ -41,37 +46,45 @@ if [ -z "${SWIFTLINT_CONFIG_PATH}" ]; then
fi fi
fi fi
# Xcode упадет, если будем использовать большое количество Script Input Files, if [ ! -z "${FORCE_LINT}" ]; then
# так как просто переполнится стек - https://unix.stackexchange.com/questions/357843/setting-a-long-environment-variable-breaks-a-lot-of-commands # Если задана переменная FORCE_LINT, то проверяем все файлы проекта
# Поэтому воспользуемся "скрытым" параметром Swiflint - https://github.com/realm/SwiftLint/pull/3313 for SOURCE_DIR in ${SOURCES_DIRS}; do
# Создадим временный файл swiftlint_files с префиксом @ и в нем уже определим список файлов ${SWIFTLINT_EXECUTABLE} autocorrect --path ${SOURCE_DIR} --config ${SWIFTLINT_CONFIG_PATH}
# необходимых для линтовки :) ${SWIFTLINT_EXECUTABLE} --path ${SOURCE_DIR} --config ${SWIFTLINT_CONFIG_PATH}
done
else
# Xcode упадет, если будем использовать большое количество Script Input Files,
# так как просто переполнится стек - https://unix.stackexchange.com/questions/357843/setting-a-long-environment-variable-breaks-a-lot-of-commands
# Поэтому воспользуемся "скрытым" параметром Swiflint - https://github.com/realm/SwiftLint/pull/3313
# Создадим временный файл swiftlint_files с префиксом @ и в нем уже определим список файлов
# необходимых для линтовки :)
lint_files_path="${SRCROOT}/build_phases/swiftlint_files" lint_files_path="${SRCROOT}/build_phases/swiftlint_files"
if [ ! -z "${lint_files_path}" ]; then if [ ! -z "${lint_files_path}" ]; then
> ${lint_files_path} # Если файл существует, то просто его очистим > ${lint_files_path} # Если файл существует, то просто его очистим
else else
touch ${lint_files_path} # Если файла нет, то создадим его touch ${lint_files_path} # Если файла нет, то создадим его
fi
# Проходимся по папкам, которые требуют линтовки
for SOURCE_DIR in ${SOURCES_DIRS}; do
# Отбираем файлы, которые были изменены или созданы
source_unstaged_files=$(git diff --diff-filter=d --name-only ${SOURCE_DIR} | grep "\.swift$")
source_staged_files=$(git diff --diff-filter=d --name-only --cached ${SOURCE_DIR} | grep "\.swift$")
if [ ! -z "${source_unstaged_files}" ]; then
echo "${source_unstaged_files}" >> ${lint_files_path}
fi
if [ ! -z "${source_staged_files}" ]; then
echo "${source_staged_files}" >> ${lint_files_path}
fi
done
swiftlint_files_path="@${lint_files_path}"
${SWIFTLINT_EXECUTABLE} autocorrect --path ${swiftlint_files_path} --config ${SWIFTLINT_CONFIG_PATH} --force-exclude --use-alternative-excluding
${SWIFTLINT_EXECUTABLE} --path ${swiftlint_files_path} --config ${SWIFTLINT_CONFIG_PATH} --force-exclude --use-alternative-excluding
fi fi
# Проходимся по папкам, которые требуют линтовки
for SOURCE_DIR in ${SOURCES_DIRS}; do
# Отбираем файлы, которые были изменены или созданы
source_unstaged_files=$(git diff --diff-filter=d --name-only ${SOURCE_DIR} | grep "\.swift$")
source_staged_files=$(git diff --diff-filter=d --name-only --cached ${SOURCE_DIR} | grep "\.swift$")
if [ ! -z "${source_unstaged_files}" ]; then
echo "${source_unstaged_files}" >> ${lint_files_path}
fi
if [ ! -z "${source_staged_files}" ]; then
echo "${source_staged_files}" >> ${lint_files_path}
fi
done
swiftlint_files_path="@${lint_files_path}"
${SWIFTLINT_EXECUTABLE} autocorrect --path ${swiftlint_files_path} --config ${SWIFTLINT_CONFIG_PATH} --force-exclude --use-alternative-excluding
${SWIFTLINT_EXECUTABLE} lint --path ${swiftlint_files_path} --config ${SWIFTLINT_CONFIG_PATH} --force-exclude --use-alternative-excluding