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

в 11:15, , рубрики: appcode, iOS, objective-c, swift, xcode, Блог компании JetBrains, мобильная разработка, разработка мобильных приложений, разработка под iOS

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

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

Run With Coverage

Swift

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

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

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

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

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

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

Closure folding

Подсветка

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

Keywords

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

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

Create From Usage

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

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

Find Usages

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

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

Join Lines

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

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

Отладка

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

Коллеги из CLion сделали отображение дизассемблированного кода для 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, потому что любой README нужно иметь возможность удобно и быстро отредактировать. Еще есть плагин для AppleScript, сделанный одним из коллег просто потому, что ему ему было интересно написать поддержку языка.

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

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

TextMate Bundles Plugin

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

Плагин Shell Script

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

Shell Script Plugin

Окно Commit

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

Commit Window

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

Команда AppCode

Автор: yeswolf

Источник


* - обязательные к заполнению поля