Привет!
На днях мы выпустили CLion 2018.3. Третий в этом году крупный релиз подытоживает нашу работу по двум важным направлениям развития — улучшению языковой поддержки и удаленной разработке.
Кроме того, мы, наконец:
- добавили средства профилирования кода;
- переделали команды в редакторе для сборки/пересборки кода на уровне одного файла, нескольких таргетов или всего проекта целиком;
- вместе с другими IDE на базе платформы IntelliJ добавили поддержку Git submodules и GitHub pull requests;
- улучшили средства универсального доступа к возможностям IDE (accessibility).
Подробнее об этих и других нововведениях читайте ниже. А чтобы попробовать новые возможности и улучшения, скачивайте бесплатную 30-дневную версию с нашего сайта.
Поддержка языка C++
Больше С++17
Парсер CLion научился понимать две новые возможности стандарта C++17 — fold expressions и deduction guides. С одной стороны, изменения в парсере — это еще не полная поддержка, но, как минимум, подсветка кода будет более правильная, а для случаев user-defined deduction guides IDE даже правильно выведет тип и его можно будет увидеть, например, при вызове информации о параметрах функции.
Clangd теперь и в навигации
В прошлый раз мы писали о том, что CLion теперь использует не только собственный языковой движок для работы с кодом на C/C++, но и еще один дополнительный, экспериментальный, сделанный на основе Clangd. Включив его для показа ошибок и предупреждений в редакторе, мы двинулись дальше и в CLion 2018.3 реализовали на его основе некоторые действия навигации по коду и поиска в коде.
Языковой движок на базе Clangd предоставляет результаты, которые впоследствии все равно объединяются с результатами, полученными из собственного движка CLion. Типичный пример — Find Usages (Alt+F7
): по открытым в редакторе файлам поиск осуществляет Clangd, а по остальным — наш собственный движок.
Примеры других действий, где дополнительно используется языковой движок на Clangd:
- Go to declaration (
Ctrl+B
/⌘B
) / Go to definition (Ctrl+Alt+B
/⌥⌘B
) - Подсветка всех включений символа, на котором стоит курсор
- Quick Documentation (
Ctrl+Q
/F1
)
Clangd включен по умолчанию и настраивается в Settings/Preferences | Languages & Frameworks | C/C++ | Clangd:
То есть можно независимо включать/выключать необходимую функциональность поверх Clangd — например, только показ ошибок или только навигацию. Если нужно полностью отключить использование Clangd, снимите все галочки в этом диалоге.
И, кстати, Clang-Tidy вполне можно запускать и без Clangd, но запуск через Clangd существенно улучшает производительность, так как использует AST-дерево, закешированное в Clangd.
Удаленная разработка
В релизе CLion 2018.1 появилась возможность на Windows работать с подсистемой Windows Subsystem for Linux (WSL). Это Linux-окружение, встроенное в Windows, позволяет собирать, запускать и отлаживать Linux-приложения на Windows. Мы тогда говорили, что специально реализовали поддержку WSL через ssh, то есть как удаленной подсистемы. Это был первый шаг к работе с полностью удаленными конфигурациями.
И вот в CLion 2018.3 мы объявили о поддержке первого большого варианта удаленной разработки:
- На локальной машине, где запускается CLion, может быть Linux, Windows или macOS.
- На удаленной машине, где CLion будет осуществлять сборку вашего приложения, запускать и отлаживать его, исполнять тесты, — пока может быть только Linux.
- Предполагается, что код находится на локальной машине. CLion сам синхронизирует его на удаленную машину, а обратно на локальную вытаскивает header search paths для быстрого резолва кода в редакторе. Синхронизация осуществляется через rsync для Linux или macOS в качестве локальных машин, и через sftp and gzip для Windows.
- Работает пока что только для проектов на CMake.
Настроить такую удаленную конфигурацию очень легко — надо просто создать удаленный тулчейн в Settings/Preferences | Build, Execution, Deployment | Toolchains и использовать его в каком-нибудь CMake Profile. Подробная инструкция есть в нашем англоязычном блоге и в онлайн-документации. Прогресс синхронизации с удаленным хостом отображается в окне File Transfer (View | Tool Windows | File Transfer), а изменить параметры соединения и пути к директориям на удаленной машине — в настройках Settings/Preferences | Build, Execution, Deployment | Deployment.
В этом направлении ожидается еще очень много работы. Сейчас, как видно, не поддерживаются варианты расположения кода сразу на удаленной машине, нет поддержки удаленной системы контроля версий, нет интеграции с удаленным терминалом, и есть множество мелких недочетов по установке самого соединения. Но главное есть — удаленная разработка с CLion теперь возможна!
Анализ производительности пользовательского кода
CLion 2018.3 дает возможность анализировать производительность кода. На Linux — предоставляется интеграция с Perf, на macOS — с DTrace. Новое действие доступно в меню Run, на панели навигации и в контекстном меню иконок запуска приложения. Результаты профилирования кода доступны в окне CPU Profiler (View | Tool Windows | CPU Profiler).
Подробно о том, что необходимо установить на компьютер, чтобы заработало профилирование кода, читайте в блоге или онлайн-документации.
Стоит отметить, что UI/UX пока несколько экспериментальный. Его планируется существенно улучшать в версиях 2019.x. Но уже есть полезные штуки, вроде возможности посмотреть все треды вместе или по одному, возможность навигации на исходный код и др.
Команды сборки и пересборки кода
Количество разнообразных комбинаций команд сборки так выросло, что мы решили вынести их все в отдельный пункт меню — Build. Там и сборка/пересборка всего проекта, и таргета all
из всех или из выбранного CMake профайла, и выбранной конфигурации, и одного конкретного файла:
Это, понятное дело, для CMake. Для compilation database там будет только команда пересборки конкретного файла.
Универсальные диалоги: Run Anything и Search Everywhere
С диалогом Search Everywhere (Double Shift
) пользователи CLion знакомы давно, как и с диалогом Find Action (Ctrl+Shift+A
/ ⇧⌘A
) для поиска команды или настройки по имени, и с диалогами навигации на файл, символ или класс по их имени. И вот теперь это, на самом деле, один и тот же диалог!
Отдельные диалоги превратились в отдельные вкладки, переключение работает через Tab
. Заодно мы устранили ряд проблем, связанных с этими диалогами, в т. ч. потери фокуса и некорректные размеры.
Другой новый универсальный диалог — Run Anything (Double Ctrl
). Из него можно запустить приложение в обычном режиме или из-под отладчика, а также открыть любой проект:
Проверки в сompilation_database.json
Compilation database — альтернативная проектная модель, которую уже некоторое время поддерживает CLion. Она очень удобна тем, что получить ее можно фактически из любой другой проектной модели, популярной или вообще кастомной. CLion умеет открывать проекты из compilation database, парсить правильно код и предоставлять все умные средства работы с кодом. Единственный минус — это отсутствие в данном формате информации о сборке всего проекта, так что собрать из IDE пока получится только отдельные файлы.
В этом релизе мы добавили в CLion схему для файлов сompilation_database.json, а на основе уже этой схемы реализовали проверки в самом файле. Например, некорректный тип значения проперти или вообще отсутствующая проперть:
Проверки могут быть очень полезны, если вы-таки решили написать такой файл руками или подправить имеющийся файл.
Производительность редактора и тесты
Во многих дампах от наших пользователей было видно, что существенные проблемы с производительностью IDE связаны с тем, как IDE определяет список имеющихся в проекте тестов. В версии 2018.3 мы сделали этот процесс ленивым, и теперь, если вы не открыли ни одного файла с тестами в редакторе, они не будут индексироваться. Кроме того, были произведены улучшения производительности при навигации на результаты тестов, автодополнении тестовых макросов и пр.
Улучшения в редакторе
Как известно, в окне Quick Documentation (Ctrl+Q
/ F1
) CLion умеет показывать не только документацию и комментарии к коду, но и выведенные типы для переменных и финальную подстановку в макросах. Эта финальная подстановка теперь отформатирована, и в ней подсвечиваются ключевые слова. Очень удобно для сложных макросов с несколькими уровнями вложения, например для Boost:
Комментарии TODO теперь можно делать многострочными, главное соблюсти отступ для второй и последующих строк — CLion автоматически поймет, что это часть комментария TODO:
Есть пользователи, для которых стандартные темы не удобны, так как не обладают достаточной контрастностью. Для них мы добавили специальную High-contrast Theme. Ее можно включить только в редакторе кода (Ctrl+`) или же для всей IDE (Settings/Preferences | Appearance & Behavior | Appearance | Theme).
Вместе с IntelliJ Platform мы переработали меню настроек плагинов в IDE (Settings/Preferences | Plugins). Теперь гораздо проще поддерживать установленные плагины в актуальном состоянии, а также сортировать и фильтровать огромный репозиторий существующих плагинов для IDE.
Система контроля версий
Еще одно важное платформенное изменение — это долгожданная поддержка Git submodules. Теперь все операции для работы с VCS в CLion учитывают и подмодули: клонирование проекта, его обновление, сравнения версий (diff) и пр.
Добавилось окно GitHub Pull Requests, в котором можно не только просмотреть все pull requests, но и искать/фильтровать их по автору или состоянию. А еще можно создать новую ветку из любого pull request буквально в один клик.
Демо
Традиционное видео о новых возможностях CLion 2018.3 на английском языке:
Что же дальше?
В следующем году мы планируем продолжать работу над вторым дополнительным языковым движком на базе Clangd — посмотрим, какие еще возможности IDE мы сможем на нем реализовать. Будем улучшать производительность редактора, доделывать и улучшать имеющиеся фичи; особенно разнообразной выглядит работа по поддержке удаленной разработки в CLion. Из интеграций планируем clang-format и, вероятно, тот или иной отладчик для Windows/MSVC.
А ключевым направлением для нас станет Embedded-разработка. Совсем недавно к нашей команде присоединился Elmot, автор очень популярного плагина для поддержки в CLion OpenOCD + STM32CubeMX. Илья будет продолжать интегрировать эту функциональность в IDE, мы же планируем в самое ближайшее время доделать memory view и переделать hex view.
Вопросы, пожелания, баг-репорты и просто мысли высказывайте в комментариях! Мы будем рады ответить.
Ваша команда JetBrains CLion
The Drive to Develop
Автор: anastasiak2512