- PVSM.RU - https://www.pvsm.ru -

AppCode 2019.2: Swift 5.1, анализ покрытия кода тестами, отображение дизассемблированного кода и другое

Астрологи объявили неделю релизов в JetBrains, количество публикаций в блоге выросло втрое! На самом деле, это тоже релизный пост, так что если вы участвовали в EAP, вы уже обо всем знаете.

Если нет — обязательно заходите под кат, потому что в этом релизе у нас не только появился анализ покрытия кода тестами и отображение дизассемблированного кода, но еще и поддержка DSL на Ruby и куча прочего интересного!

Run With Coverage

Swift

Поддержка языка

Начали поддерживать Swift 5.1:

  • SE-0242 [1]: Synthesize default values for the memberwise initializer.
  • SE-0254 [2]: Static and class subscripts.
  • SE-0068 [3]: Expanding Swift Self to class members and value types.
  • SE-0260 [4]: Library Evolution for Stable ABIs.
  • SE-0258 [5]: Property Wrappers

Пока в процессе, степень готовности можно смотреть вот тут [6].

Сворачивание кода

Сделали сворачивание замыканий:

Closure folding

Подсветка

Нельзя так просто взять и подсветить строчку кода, не зная, с какими конкретно сущностями мы имеем дело. Поэтому полная подсветка возможна лишь после полного построения кэшей. А вот ключевые слова языка мы знаем заранее и подсветить их можем — теперь они для Swift подсвечиваются, даже если индексация с кэшированием еще не закончились:

Keywords

Генерация элементов перечислений

Продолжаем расширять области применения Create From Usage: теперь можно создать элемент перечисления из его использования в коде, просто нажав ⌥⏎:

Create From Usage

Поиск использований

Поиск использований в AppCode ищет конкретные кодовые конструкции (переменные, классы, функции, методы класса и т. д.) — это позволяет сильно сузить область поиска в сравнении с полнотекстовым. До недавнего времени для Swift мы отображали лишь где используется конкретная конструкция. В 2019.2 мы реализовали группировку использований по типу, так что теперь можно быстро понять еще и как мы используем переменную, функцию или класс:

Find Usages

Склейка строк кода

Ничего особенного, просто теперь можно склеить объявление и инициализацию переменной с помощью Join Lines (⌃⇧J):

Join Lines

Автоматические импорты

Есть такая система сборки — BUCK [7]. Система сборки BUCK по умолчанию использует header maps, поддержку которых мы год назад добавили [8], но не успели прокинуть ее же в автоимпорты. В результате, после нажатия ⌥⏎ вставлялся длиннющий путь к хедеру, который абсолютно не нужен. Теперь так не происходит, теперь все правильно.

Отладка

Отображение дизассемблированного кода

Коллеги из CLion сделали [9] отображение дизассемблированного кода для LLDB в версии 2019.1, а мы его творчески переиспользовали в этом релизе:

Disassembly View

Автодополнение

Еще одна полезная штука, изначально сделанная в CLion, — автодополнение команд отладчика в консоли LLDB по нажатию ⇥ (так же, как в обычной консоли):

LLDB commands completion

Анализ покрытия кода тестами

Наконец-то сделали, и сделали хорошо. Выбираем тестовую конфигурацию, жмем Run With Coverage и уходим дорабатывать тесты радуемся результату:

Run With Coverage

Слева в редакторе отображаются результаты покрытия:

Coverage Results

По нажатию на цветовой индикатор показывается плашка с количеством вызовов данного участка кода и полезными действиями:

Hit Count

Статистика покрытия отображается кратко в Project view, а более подробно — в отдельном окне:

Toolwindows

Сборка, запуск, отладка и тестирование во время индексации

Индексация и построение кэшей — небыстрый процесс, особенно на крупных проектах и особенно самая первая индексация. Тем не менее какие-то действия с проектом, пока она идет, сделать можно, например собрать или запустить приложение.

У нас долгое время эти действия блокировались, потому что для нормального использования конфигурации запуска необходимо было сначала построить кэши на проект. На самом деле, не так уж и необходимо, поэтому в версии 2019.2 мы решительно отвязали создание конфигураций запуска от кэширования, и теперь собрать, запустить, отладить или протестировать проект можно сразу же после его открытия:

Build, Run, Debug and Test during indexing

Интеграции

Плагин TextMate

Часто просят добавить поддержку какого-нибудь языка, который для AppCode не является основным. Иногда мы это делаем, если понимаем, что это действительно нужно многим пользователям, — так в какой-то момент мы перетянули к себе часть WebStorm, чтобы разработчикам на React Native и PhoneGap было удобно работать с HTML/CSS/JavaScript.

Потом появился плагин для Markdown [10], потому что любой README нужно иметь возможность удобно и быстро отредактировать. Еще есть плагин для AppleScript [11], сделанный одним из коллег просто потому, что ему ему было интересно написать поддержку языка.

Но впихнуть объять необъятное нельзя, поэтому реализовать поддержку всех языков мы не можем. Например, в iOS-разработке часто встречаются DSL, сделанные на Ruby (конфиги CocoaPods и Fastlane). Изначально запрос звучал как “включите поддержку Ruby целиком”, но на деле не так часто эти конфиги редактируются, и тащить из-за них пол-RubyMine не кажется разумным. В то же время, не иметь никакой поддержки тоже нехорошо.

В этом релизе коллеги из WebStorm включили в дефолтную установку плагин с поддержкой бандлов TextMate, который дает для кучи языков простенькую подсветку и автодополнение. Мы последовали их примеру, и теперь у нас это тоже есть:

TextMate Bundles Plugin

В силу некоторых противоречий в поддержке Fastlane со стороны самих этих бандлов, для Ruby DSL принцип конфигурации пока остается прежним (впрочем, можно поспособствовать исправлению [12] этой ситуации).

Плагин Shell Script

В проектах скрипты встречаются часто, поэтому мы подключили поддержку их редактирования:

Shell Script Plugin

Окно Commit

Точнее, больше нет никакого отдельного окна — теперь оно стало частью вкладки Local Changes:

Commit Window

На этом закончим. Все вопросы и пожелания пишите прямо тут в комментариях — будем рады ответить!

Команда AppCode

Автор: yeswolf

Источник [13]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/ios/325771

Ссылки в тексте:

[1] SE-0242: https://github.com/apple/swift-evolution/blob/master/proposals/0242-default-values-memberwise.md

[2] SE-0254: https://github.com/apple/swift-evolution/blob/master/proposals/0254-static-subscripts.md

[3] SE-0068: https://github.com/apple/swift-evolution/blob/master/proposals/0068-universal-self.md

[4] SE-0260: https://github.com/apple/swift-evolution/blob/master/proposals/0260-library-evolution.md

[5] SE-0258: https://github.com/apple/swift-evolution/blob/master/proposals/0258-property-wrappers.md

[6] тут: https://youtrack.jetbrains.com/issue/OC-18443

[7] BUCK: https://buck.build/

[8] добавили: https://blog.jetbrains.com/objc/2018/04/appcode-2018-1-1/

[9] сделали: https://habr.com/ru/company/JetBrains/blog/445646/

[10] Markdown: https://plugins.jetbrains.com/plugin/7793-markdown

[11] AppleScript: https://plugins.jetbrains.com/plugin/8149-applescript-support

[12] поспособствовать исправлению: https://youtrack.jetbrains.com/issue/OC-13269#focus=streamItem-27-3574361.0-0

[13] Источник: https://habr.com/ru/post/461949/?utm_campaign=461949&utm_source=habrahabr&utm_medium=rss