company_banner

AppCode 2020.1: улучшения быстродействия, автодополнение до конца индексации, генерация документации и многое другое

    Всем привет, в этом посте рассказываем про новый AppCode 2020.1, который мы выпустили буквально вчера.


    КПДВ


    Быстродействие


    AppCode 2020.1 стал значительно быстрее работать с проектами на чистом Swift и смешанными проектами на Swift/Objective-C. Часть работы, делавшейся непосредственно при открытии файла и при этом каждый раз после открытия проекта, мы перенесли на момент индексации и стали кешировать результаты. Что это дало: первоначальное индексирование стало чуть дольше, зато все последующие — быстрее, как и скорость появления подсветки, работа автодополнения и вообще любых действий, связанных с кодом:


    Скорость работы


    Кроме всего этого, оптимизировали автодополнение для параметров функций и методов, локальных переменных и глобальных переменных, объявленных в текущем файле. Этот сценарий использования встречается часто, поэтому автодополнение стало еще быстрее.


    Убрали причину подвисания “Loading…” при открытии файла (под капотом там оказалась достаточно нетривиальная оптимизация парсинга бинарных выражений).


    Все это вместе позволяет работать намного более комфортно, чем раньше.


    Автодополнение во время индексации


    Мы стараемся сделать как можно большее количество действий IDE доступным еще до конца индексации. Так, в AppCode 2019.2 мы реализовали возможность собирать, запускать, отлаживать и тестировать проект, даже если индексация еще в процессе. В этом релизе к таким возможностям добавилось автодополнение:


    Автодополнение во время индексации


    Для того чтобы это сделать, мы творчески переиспользовали SourceKit. Пока в этом режиме не работают плэйсхолдеры для параметров (вставляется просто текст), нет возможности быстро переключаться между параметрами методов и функций, но даже с этими ограничениями нам кажется удобным иметь автодополнение как можно раньше.


    Документация для кода


    Закрываем старые запросы, добиваем консистентность: теперь для Swift можно сгенерировать комментарий для любой кодовой конструкции просто напечатав /// и нажав :


    Документация для кода


    Иерархия типов


    Доделали окно иерархии типов для Swift — теперь оно есть, и работает так же, как в Objective-C:


    Иерархия типов


    Структурное представление кода


    Оно же Structure view. Добавили три режима сортировки элементов: по алфавиту, по типу и по области видимости:


    Структурное представление кода


    Проверки кода и быстрые исправления


    В прошлом релизе добавили достаточно много быстрых исправлений для Swift, в этом — еще одно новое и пара проверок:


    • Замена if на guard:Замена if на guard
    • Проверка на наличие ненужных круглых скобок: Проверка на наличие ненужных круглых скобок
    • И отдельная проверка такого же типа для замыканий: Ненужные скобки в замыканиях

    Просмотр определения типа


    Раньше можно было посмотреть определение любого символа в коде через Quick Definition (⌥Space), а теперь можно сделать то же самое для типа этого символа через Quick Type Definition:


    Quick Type Definition


    Touch Bar


    В предыдущих версиях интеграцию Touch Bar в AppCode пришлось выключить из-за вызванных ей проблем с быстродействием. Отличная новость — проблемы мы ликвидировали, Touch Bar снова работает.


    Режим LightEdit


    Теперь для обычного редактирования текста весь проект открывать не нужно, достаточно просто открыть файл с Welcome Screen, или через командную строку с помощью скрипта запуска, сгенерированного для IDE. Будет открыт только этот файл — быстро, легко, просто.


    Дзен-режим


    Многие знают про дополнительные режимы для UI в AppCode, например режим Presentation, название которого говорит само за себя (кстати, очень удобно показывать демки с ним), а также Distraction Free, в котором окно IDE выглядит как минималистичный текстовый редактор без окон, тулбаров и прочего. С дзен-режимом все просто — это полноэкранный Distraction Free, чтобы совсем ни на что не отвлекаться.


    JetBrains Mono


    Шрифты мы любим, а крутые моноширинные шрифты, сделанные специально для разработчиков — особенно. Теперь шрифтом по умолчанию у нас и в других IDE от JetBrains будет JetBrains Mono (и, конечно же, он поддерживает лигатуры).


    На этом все. Коротко про планы на будущее — над поддержкой SPM пока работаем, целимся в следующий релиз, работать над быстродействием также продолжим.


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


    Команда AppCode

    JetBrains
    Делаем эффективные инструменты для разработчиков

    Комментарии 8

      0
      Мне очень понравился шрифт JetBrains-Mono. Я его поставил не только шрифтом разработки в NetBeans, но и шрифтом терминала. Этот шрифт позволил мне уменьшить размер шрифта терминала с 15 pt до 11 pt без особенного ущерба для читаемости. А в NetBeans так вообще с 18 pt до 12 pt. СПАСИБО!
        0
        А есть сравнения по скорости с Xcode? А то даже пробовать страшновато, после того как свежая Андроид студия на IntelliJ начала переключать табы с задержкой на 1-2 секунды на топовом маке.
        XCode не супер удобный, но, субъективно, быстрый.
          +1
          Нет, потому что у нас разные идеологии кэширования. Мы кэшируем при открытии проекта и инкрементально добиваем кэш во время изменений кода. Это занимает больше времени на старте, но избавляет от отвалившейся подсветки и действий project-wide потом. Xcode индексирует при открытии проекта, а потом добивает кэш во время сборки. Кэш у него проще, времени при открытии требует меньше, но регулярно отваливается при редактировании кода, потому что инкрементальная достройка кэшей в ряде случаев = досборка проекта, что тяжелее.
          0
          Скажите, для генерации комментариев есть какие-то ограничения? У меня часто не работает. Пока не нашел как-то логики где работает, а где нет, какой-то рандом.

          И уже последние пару месяцев или больше очень сильно мешает баг youtrack.jetbrains.com/issue/OC-19718, то есть перестала работать подсказка типов, всегда надо проваливаться внутрь функций/классов, чтобы выяснить типы. Очень сильно сказывается на скорости кодинга, пока терплю, но думаю откатиться на старую версию.

          Не смотря на баги, огромное спасибо за вашу работу.
            0
            Скажите, для генерации комментариев есть какие-то ограничения? У меня часто не работает.

            По логике быть не должно, разве что код-анализу надо пройти для этого. Конкретный пример бы.

            баг youtrack.jetbrains.com/issue/OC-19718

            Тут пока не можем воспроизвести. Не повторяется так, как описывает отрепортивший.
            0
            И скажите как-то может влиять на работу IDE перебивка вашего пути до DerivedData на свой путь через symlink и запуск вашей IDE не из /Applications, а из другого места? DerivedData я маплю на RAM, чтобы зря не расходовать ресурс диска, да и должно работать быстрее. Иногда вижу в логах AppCode ошибку что-то типо com.java.xxx.Cannot_Read_Open_Something_In_Virtual_File_Path, может ли это быть именно из-за этого?
              0

              С запуском не из /Applications проблем точно не будет. C симлинком DerivedData всё несколько сложнее. Если содержимое DerivedData не копируется между разными местами, то в принципе, проблем быть не должно, но если вдруг почему-то появятся, нам стоит об этом сообщить.


              com.java.xxx.Cannot_Read_Open_Something_In_Virtual_File_Path

              Сложно сказать. Отправьте, пожалуйста, логи в саппорт. Мы посмотрим и попробуем понять, чем это может быть вызвано.

                0
                Спасибо. Попробую следующий раз отправить багрепорт.

            Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

            Самое читаемое