2024-09-30 15:28:25 +00:00
#!/bin/bash -u
2019-01-16 01:31:51 +00:00
#
# script/lint
2019-01-19 04:37:51 +00:00
# mas
2019-01-16 01:31:51 +00:00
#
2021-03-22 02:17:28 +00:00
# Linting checks for development and CI.
2019-01-16 01:31:51 +00:00
#
2021-03-29 00:16:37 +00:00
# Reports style violations without making any modifications to the code.
#
# Please keep in sync with script/format.
#
2019-01-12 20:30:08 +00:00
2024-09-30 15:28:25 +00:00
set -o pipefail
2019-01-12 20:30:08 +00:00
2024-09-30 15:28:25 +00:00
mas_dir="$(readlink -fn "$(dirname "${BASH_SOURCE:-"${0}"}")/..")"
if ! cd -- "${mas_dir}"; then
printf $'Error: Could not cd into mas directory: %s\n' "${mas_dir}" >&2
exit 1
fi
2024-10-27 03:48:05 +00:00
printf $'==> 🚨 Linting mas (%s)\n' "$(script/version --write)"
2024-09-30 15:28:25 +00:00
2024-10-27 03:48:05 +00:00
for linter in git markdownlint periphery shellcheck shfmt swift-format swiftformat swiftlint yamllint; do
2024-09-30 15:28:25 +00:00
if [[ ! -x "$(command -v ${linter})" ]]; then
printf $'error: %s is not installed. Run \'script/bootstrap\' or \'brew install %s\'.\n' "${linter}" "${linter}"
2021-03-22 07:01:52 +00:00
exit 1
fi
done
2024-09-30 15:28:25 +00:00
exit_code=0
for source in Package.swift Sources Tests; do
2024-10-24 11:46:50 +00:00
printf -- $'--> 🦅 %s swift-format\n' "${source}"
2024-09-30 15:28:25 +00:00
swift-format lint --strict --recursive "${source}"
((exit_code |= "${?}"))
2024-10-24 11:46:50 +00:00
printf -- $'--> 🦅 %s swiftformat\n' "${source}"
2024-09-30 15:28:25 +00:00
script -q /dev/null swiftformat --lint --strict "${source}" |
2024-10-24 11:46:50 +00:00
(grep -vxE '(?:\^D\x08{2})?Running SwiftFormat\.{3}\r|\(lint mode - no files will be changed\.\)\r|Reading (?:config|swift-version) file at .*|\x1b\[32mSwiftFormat completed in \d+\.\d+s\.\x1b\[0m\r|0/\d+ files require formatting\.\r' || true)
2024-09-30 15:28:25 +00:00
((exit_code |= "${?}"))
2024-10-24 11:46:50 +00:00
printf -- $'--> 🦅 %s swiftlint\n' "${source}"
2024-09-30 15:28:25 +00:00
swiftlint --strict --quiet "${source}" 2> \
>((grep -vxF $'warning: Configuration option \'allow_multiline_func\' in \'opening_brace\' rule is deprecated. Use the option \'ignore_multiline_function_signatures\' instead.' || true) >&2)
((exit_code |= "${?}"))
2021-03-22 05:25:18 +00:00
done
2024-02-18 20:16:50 +00:00
2024-09-30 15:28:25 +00:00
printf -- $'--> 🐚 Bash shellcheck\n'
2021-06-09 01:56:27 +00:00
shellcheck --shell=bash script/*
2024-09-30 15:28:25 +00:00
((exit_code |= "${?}"))
printf -- $'--> 📜 Bash shfmt\n'
2024-03-31 17:05:04 +00:00
shfmt \
--diff \
--list \
--indent 2 \
--case-indent \
contrib/ script/
2024-09-30 15:28:25 +00:00
((exit_code |= "${?}"))
2021-03-22 02:17:28 +00:00
2024-09-30 15:28:25 +00:00
printf -- $'--> 〽️ Markdown\n'
2021-05-03 20:42:10 +00:00
markdownlint --config .markdownlint.json .github .
2024-09-30 15:28:25 +00:00
((exit_code |= "${?}"))
2021-05-03 20:42:10 +00:00
2024-09-30 15:28:25 +00:00
printf -- $'--> 🌳 Git\n'
PAGER='cat' git diff --check
((exit_code |= "${?}"))
2019-01-16 01:15:55 +00:00
2024-10-27 03:48:05 +00:00
printf -- $'--> 🖊 YAML\n'
yamllint .
((exit_code |= "${?}"))
2024-09-30 15:28:25 +00:00
printf -- $'--> 🌀 Periphery\n'
script -q /dev/null periphery scan --strict --quiet --disable-update-check |
2024-10-24 11:46:50 +00:00
(grep -vxE '(?:\x1b\[0;1;32m|\^D\x08{2})\* (?:\x1b\[0;0m\x1b\[0;1m)?No unused code detected\.(?:\x1b\[0;0m)?\r' || true)
2024-09-30 15:28:25 +00:00
((exit_code |= "${?}"))
exit "${exit_code}"