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

AppCode 2017.1: улучшенная поддержка Swift, новые возможности кодогенерации и многое другое

Привет! Недавно мы выпустили AppCode 2017.1, сейчас готовим первое обновление — пора рассказать обо всех изменениях в этой версии.

AppCode 2017.1: улучшенная поддержка Swift, новые возможности кодогенерации и многое другое - 1

Swift

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

Мы реализовали поддержку множества изменений в Swift 3, среди которых особенно хочется отметить:

  • SE-0005 [1] — улучшили и автодополнение, и навигацию, и в целом связку Objective-C и Swift AppCode стал понимать значительно лучше:

    AppCode 2017.1: улучшенная поддержка Swift, новые возможности кодогенерации и многое другое - 2

  • SE-0062 [2] — научились корректно парсить выражения с #keyPath (и изменения в синтаксисе #selector тоже):

    AppCode 2017.1: улучшенная поддержка Swift, новые возможности кодогенерации и многое другое - 3
    AppCode 2017.1: улучшенная поддержка Swift, новые возможности кодогенерации и многое другое - 4

  • SE-0091 [3] — доработали автодополнение для ключевых слов prefix, postfix, infix и реализовали корректную навигацию между декларацией оператора в протоколе и его реализацией. Кроме этого, теперь можно быстро сгенерировать заглушку для таких операторов через Override/Implement:

    AppCode 2017.1: улучшенная поддержка Swift, новые возможности кодогенерации и многое другое - 5

  • SE-0033 [4] — поддержали импорт констант из Objective-C с помощью __attribute__((swift_wrapper(struct))) и __attribute__((swift_wrapper(enum)))

С полным списком изменений можно ознакомиться вот тут [5].

Кроме этого, мы реализовали поддержку метатипов [6], научились корректно обрабатывать nullability audited regions [7] и nullability attributes [8] в Objective-C и улучшили резолв для super.init() и self.init().

Create from usage

В прошлой версии [9] мы реализовали возможность создавать переменные, функции, методы и даже свойства классов из их использований. А в этой мы сделали то же самое для типов (классов, структур, перечислений, протоколов) и их инициализаторов:

AppCode 2017.1: улучшенная поддержка Swift, новые возможности кодогенерации и многое другое - 6

Override/Implement

Override/Implement (^O/^I) позволяет генерировать определения сразу для нескольких методов какого-либо класса или протокола. В AppCode 2017.1 мы сделали диалог Override/Implement для Swift более удобным, а генерацию кода — более корректной:

  • Элементы в диалоге теперь показываются иерархично:

    AppCode 2017.1: улучшенная поддержка Swift, новые возможности кодогенерации и многое другое - 7

  • Для инициализаторов всегда отображается тип (convenience/required)
  • Перегрузки class-методов корректно генерируются, а перегружать статические методы мы больше не предлагаем
  • Optional-методы предлагаются только в случае вызова Override (^O)

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

Теперь AppCode умеет фильтровать список автодополнения для методов и функций не только по их названиям, но и по названиям их параметров:

AppCode 2017.1: улучшенная поддержка Swift, новые возможности кодогенерации и многое другое - 8

Кроме этого, мы добавили ключевые слова dynamic, lazy, postfix, prefix и indirect в список автодополнения там, где это необходимо.

Structure view

Нас долго просили добавить в Structure view (⌘7) и popup-окно File Structure (⌥F12) отображение комментариев вида //MARK, //TODO и //FIXME для Swift, и вот мы это сделали:

AppCode 2017.1: улучшенная поддержка Swift, новые возможности кодогенерации и многое другое - 9

Если нужен список только //TODO и //FIXME, можно, как и раньше, использовать TODO view (⌘6):

AppCode 2017.1: улучшенная поддержка Swift, новые возможности кодогенерации и многое другое - 10

C++

По традиции, улучшения поддержки C++, реализованные командой CLion, доступны и в AppCode. Про них можно прочитать в этом посте [10] в разделе C++14 и C++17.

IDE

Сообщения сборки

В окне сообщений сборки (⌘0) появилась возможность фильтрации сообщений по типу:

AppCode 2017.1: улучшенная поддержка Swift, новые возможности кодогенерации и многое другое - 11

Xcode-like breakpoints

По умолчанию, нажатие на breakpoint в продуктах IntelliJ убирает его, что иногда может мешать (например, если breakpoint срабатывает в случае определенного условия, заданного в его настройках). Теперь можно избежать подобной ситуации, выбрав Drag to the editor area в разделе настроек Preferences | Build, Execution, Deployment | Debugger | Remove breakpoint:

AppCode 2017.1: улучшенная поддержка Swift, новые возможности кодогенерации и многое другое - 12

Поддержка эмодзи

Как и все продукты JetBrains, AppCode теперь корректно отображает эмодзи в редакторе кода и различных окнах IDE:

AppCode 2017.1: улучшенная поддержка Swift, новые возможности кодогенерации и многое другое - 13

Find in Path

Изменилось окно полнотекстового поиска Find in Path — интерфейс стал лаконичнее, необходимость переключаться между несколькими вкладками в окне отпала:

AppCode 2017.1: улучшенная поддержка Swift, новые возможности кодогенерации и многое другое - 14

На этом все — читайте о других возможностях продукта у нас на сайте [11], следите за обновлениями в нашем англоязычном блоге [12], и задавайте любые возникшие вопросы в комментариях к этому посту.

Автор: yeswolf

Источник [13]


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

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

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

[1] SE-0005: https://youtrack.jetbrains.com/issue/OC-14199

[2] SE-0062: https://youtrack.jetbrains.com/issue/OC-14598

[3] SE-0091: https://youtrack.jetbrains.com/issue/OC-14412

[4] SE-0033: https://youtrack.jetbrains.com/issue/OC-14140

[5] тут: https://youtrack.jetbrains.com/issue/OC-13726

[6] поддержку метатипов: https://youtrack.jetbrains.com/issue/OC-14366

[7] nullability audited regions: https://youtrack.jetbrains.com/issue/OC-13932

[8] nullability attributes: https://youtrack.jetbrains.com/issue/OC-11980

[9] прошлой версии: https://habrahabr.ru/company/JetBrains/blog/318304/

[10] этом посте: https://habrahabr.ru/company/JetBrains/blog/325372/

[11] у нас на сайте: https://www.jetbrains.com/objc/whatsnew/

[12] англоязычном блоге: http://blog.jetbrains.com/objc/

[13] Источник: https://habrahabr.ru/post/326528/