Як відзначити свої TODO, FIXME і ERROR в Xcode


Цей пост є вільним перекладом статті How to highlight your TODOs, FIXMEs, & ERRORs in Xcode by Hector Matos
Це був самий звичайний день: я писав код, усував баги і взагалі все було чудово. Саме тоді я написав блок коду, до якого потрібно було повернутися пізніше. Це звичайний випадок, з яким ви теж ймовірно стикалися: потрібно було взаємодіяти з API який ще не був готовий. Я знав загальну структуру об'єкта, який отримаю по API, але я ще не міг протестувати роботу з ним. Як і будь-який інший розробник, я написав коментар, який виглядає так:

У цей момент я хотів би створити попередження в Xcode, таке ж як ми звикли робити в Objective-C з допомогою директив компілятора:

Але, на жаль, так не вийшло і я засумував.

Як людина дії, я зробив те, що і слід було: я діяв. Оказывается ви можете додати run-скрипт, щоб отримати необхідний функціонал.
RUN SCRIPT BUILD PHASES
Xcode підтримує внутрішні bash-команди або скрипти в різних фазах вашого циклу розробки. Ви можете запустити bash-скрипт в будь-який час до або після складання, запуску, тестування, профілювання, аналізу або навіть архівування!
Щоб зробити це, відкрийте "Build Phases" свого проекту в Xcode, натисніть на "+" зліва вгорі і потім з випадаючого меню виберіть "New Run Script Phase":

Потім ви побачите новий розділ в якому можете написати bash-скрипт. Якщо ви вже експерт з написання Swift-скриптів після прочитання поста scripting in swift, ви можете просто покласти файл зі скриптом у кореневий каталог проекту і викликати його з свого нового run-скрипта.

# Відзначаємо ваші TODO, FIXME і ERROR з допомогою "рідних" попереджень Xcode
тіло вашого run-скрипта помістіть ось цей чудовий код:
TAGS="TODO:|FIXME:"
find "${SRCROOT}" \( -name ".*.h" -or -name ".*.m" -or -name ".*.swift" \) -print0 | xargs -0 egrep --with-filename --line-number --only-matching "($TAGS).*\$" | perl -p -e "s/($TAGS)/ warning: \$1/"

З цього моменту ви будете бачити попередження коли поставите позначку TODO: або FIXME: в коментарі! Подивіться, як працює ця магія:

Не будемо зупинятися на досягнутому і виправимо скрипт таким чином, щоб підсвічувати помилки використовуючи //ERROR: в коментарях. Як ви знаєте, бувають ситуації, коли ми хочемо звернути особливу увагу, виділивши помилку за допомогою //ERROR:. Щоб зробити це, змініть ваш bash-скрипт:
TAGS="TODO:|FIXME:"
ERRORTAG="ERROR:"
find "${SRCROOT}" \( -name ".*.h" -or -name ".*.m" -or -name ".*.swift" \) -print0 | xargs -0 egrep --with-filename --line-number --only-matching "($TAGS).*\$|($ERRORTAG).*\$" | perl -p -e "s/($TAGS)/ warning: \$1/" | perl -p -e "s/($ERRORTAG)/ error: \$1/"

Не знаю як ви, але я, мабуть, самий забудькуватий людина у світі. В кінці дня у мене не завжди закінчено поточний фрагмент коду і мені подобається використовувати //ERROR: щоб нагадати самому собі над чим працювати завтра.

Коли моя IDE виглядає так, я одразу відчуваю, що необхідно закінчити вже розпочате. І не переживайте, помилки генеруються цим скриптом не перешкоджають складанні проекту.
ВИСНОВОК
У своїй повсякденній роботі ви завжди зіткнетеся з блоком коду, до якого потрібно буде повернутися пізніше, але зараз ви змушені поставити "латку" і рухатися далі. На жаль, навіть простого //TODO:, //FIXME: або //ERROR: в коментарі, просто недостатньо. Ви здивуєтеся скільки людей забувають про своїх //TODO:, //FIXME: і //ERROR: у проекті. Використання run-скрипта в цій ситуації — відмінний спосіб, щоб переконатися, що не пропустіть нічого у своєму циклі розробки. Сподіваюся це допоможе!
Щасливого кодинга, товариші ботаніки!
П. С. З коментарів до оригінального посаді вилучено ще одна модифікація скрипта, на випадок якщо вам все-таки потрібно перешкоджати складанні проекту при наявності позначок //ERROR: код:
TAGS="TODO:|FIXME:"
ERRORTAG="ERROR:"
OUTPUT=$(find "${SRCROOT}" \( -name ".*.h" -or -name ".*.m" -or -name ".*.swift" \) -print0 | xargs -0 egrep --with-filename --line-number --only-matching "($TAGS).*\$|($ERRORTAG).*\$" | perl -p -e "s/($TAGS)/ warning: \$1/" | perl -p -e "s/($ERRORTAG)/ error: \$1/")
ECHO "$OUTPUT"

if [[ $OUTPUT == *" error: "* ]]
then
exit 1
fi

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.