Привет, Хабр! В JetBrains стартовал новый релизный год: все наши десктопные продукты обновились или обновятся в самое ближайшее время. Сегодня мы хотим поговорить о CLion 2021.1 — новейшей версии нашей кроссплатформенной IDE для разработки на C и C++. В этом обновлении много яркого и интересного:  Анализатор кода   Глобальный анализ потоков данных   Интеграция Clazy   Новые проверки MISRA   Удаленная работа   Проекты Makefile в удаленном режиме   Динамический анализ в удаленном режиме   Удаленный терминал   Инструмент для совместного редактирования кода   Улучшения для различных типов проектов (CMake, Makefile, Qt)   Постфиксное автодополнение для C и C++   Отладчик   Улучшения платформы IntelliJ и обновления плагинов  Новую версию можно скачать с нашего сайта и попробовать бесплатно в течение 30 дней. Если у вас есть активная подписка на CLion или All Products Pack, просто обновите версию на 2021.1. Напоминаем, что при покупке годовой подписки на любой продукт предоставляется резервная бессрочная лицензия. А теперь поговорим о нововведениях и улучшениях в версии 2021.1 подробнее.  Анализ потоков данных — это мощный инструмент, который позволяет находить такие ошибки или потенциально проблемные места в вашем коде, которые не найдет компилятор. Ошибки висячих указателей (dangling pointer), разыменование нулевой ссылки (null dereferencing), неиспользуемый или недоступный код, бесконечные циклы и бесконечная рекурсия (это, кстати, не всегда ошибка, иногда такие вещи используются нарочно, но предупрежден — значит вооружен, как говорится) и многое другое.   Нам интересно реализовывать сложные инструменты анализа кода в наших продуктах — они помогают выявлять больше потенциальных проблем еще на стадии написания кода в редакторе. Анализ потоков данных (DFA) появился в CLion очень давно, а в 2020 году мы переписали его на Clang для увеличения производительности и точности анализа. В 2021 мы расширили и переработали анализатор, чтобы он поддерживал режим глобального анализа потоков данных. В чем разница между локальным и глобальным анализом? Локальный анализ потоков данных работает в контексте тела функции и анализирует код только в нем. Такой анализ использовался в CLion до версии 2020.3 включительно.  Глобальный анализ потоков данных работает в контексте единицы трансляции (TU), позволяя увидеть более сложные связи и выявить больше проблем. Он появился только сейчас, в CLion 2021.1.  К примеру, некоторые висячие указатели можно выявить только в глобальном режиме: Точно так же с разыменовыванием некоторых нулевых ссылок:  С появлением режима глобального анализа потоков данных также стали возможны новые проверки: Постоянный результат функции — сообщает о функциях, возвращаемое значение которых всегда является одной и той же константой.  Постоянный параметр — сообщает о функциях, в которых параметр всегда является одной и той же константой.  Недостижимые вызовы функций — обнаруживает функции, точки вызова которых никогда не будут достигнуты.  Как часто бывает, пока мы обобщали анализ потоков данных и создавали глобальный режим, у нас произошло множество улучшений в самом алгоритме. Поэтому производительность не только не ухудшилась (чего можно было бы ожидать, так как теперь собирается и анализируется больше данных), но даже по некоторым параметрам улучшилась. Подробности и результаты наших измерений мы приводим в отдельном (англоязычном) посте. Кстати, в качестве следующего улучшения анализатора кода мы планируем добавить Lifetime-проверки. Да-да, те самые из предложения Герба Саттера, и даже лучше!  Мы продолжаем улучшать поддержку Qt-проектов. Нет, поддержку QML из коробки пока не завезли :( Но мы добавили в наш языковой движок на базе Clang интеграцию с Clazy — анализатором для кода Qt. В редакторе CLion теперь доступны соответствующие проверки кода и быстрые исправления:    Настройки анализатора можно найти в Settings/Preferences | Editor | Inspections | C/C++ | General | Clazy. Стоит обратить внимание на параметр level — уровень важности проверок Clazy. В данный момент CLion 2021.1 поддерживает версию CLazy 1.8.   CLion поддерживает все больше проверок стандартов MISRA C 2012 и MISRA C++ 2008. До поддержки всех проверок нам пока далеко, однако вот полный список тех, которые мы уже поддержали.   Мы планируем поддержать все проверки стандартов MISRA и начать работу над стандартом AUTOSAR. Смотрите видео об улучшениях встроенного анализатора кода от нашего девелопер-адвоката Фила Нэша:  В CLion 2021.1 появилась базовая поддержка удаленного режима разработки для проектов Makefile. Чтобы воспользоваться ей, достаточно указать удаленный тулчейн в разделе Settings/Preferences | Build, Execution, Deployment | Makefile и перезагрузить проект.  Пока что самое большое ограничение — отсутствие поддержки шагов для преконфигурации. То есть работать все будет, только если в корне вашего проекта уже есть Makefile. Есть и другие ограничения.  Мы стремимся к единообразию возможностей IDE для всех тулчейнов, моделей проектов и конфигураций, и теперь Google Sanitizers, Valgrind Memcheck и анализ покрытия кода работают в том числе с удаленными тулчейнами. Кстати, что касается анализа покрытия кода, теперь вам также доступен анализ покрытия ветвей кода (в дополнению к анализу покрытия строчек).   Таким образом, в зависимости от используемого тулчейна CLion предлагает следующие метрики: Покрытие строк кода (Line coverage) — то, что считает инструмент GCC/gcov. В частности, используя его, для строки return 0; int c; вы вполне можете получить покрытие 100%.  Покрытие выражений (Statement coverage) — то, что считает инструмент LLVM/llvm-cov. Здесь делается честный подсчет покрытия по выражениям, и для примера, приведенного выше, 100% вы не получите.  Покрытие ветвей кода (Branch coverage) — работает и в GCC/gcov, и в LLVM/llvm-cov с версии 12.0.0. Следует помнить, что GCC/gcov учитывает ветви, сгенерированные на этапе компиляции, а LLVM/llvm-cov — нет. Поэтому вы с трудом добьетесь от gcov покрытия 100% при наличии таких вот «‎скрытых веток»‎, возникающих, в частности, из-за обработки исключений.   При работе с удаленным проектом порой возникает желание выполнить какую-то команду на удаленном хосте (в папке проекта). Разумеется, в CLion вы можете открыть ssh-сессию на удаленной машине. Однако если вы используете настройки по умолчанию, вам еще предстоит найти папку проекта (узнать путь, по которому IDE ее синхронизировала). Мы решили упростить эту процедуру. Новое действие Tools | Open Remote Host Terminal сразу переходит в папку проекта на удаленном хосте. Удаленный хост соответствует выбранному удаленному профилю, а локальный — первому удаленному профилю, найденному в проекте.  Code With Me — наш новый инструмент для совместной удаленной разработки и парного программирования. Мы про него уже писали в прошлый релиз, когда он только появился и был доступен по программе раннего доступа. Коротко об изменениях:   Сервис теперь доступен официально, программа раннего доступа завершена.    Соответствующий плагин включен в CLion 2021.1 по умолчанию.   О том, входит ли Code with Me в вашу подписку и какие мы предлагаем коммерческие планы, можно узнать на нашем сайте.   Все планы включают: аудио- и видеозвонки, поддержку совместного редактирования кода, режим полной синхронизации, умный анализ кода и многое другое.  И хотя пока не все возможности CLion доступны в режиме совместного редактирования, сервис уже умеет довольно много. Пробуйте и рассказывайте нам о своих впечатлениях!  Мы уже поговорили о поддержке проектов Makefile в режиме удаленной разработки и анализаторе Clazy для проектов на Qt. Но в CLion 2021.1 есть и другие улучшения для различных типов проектов.   Обновление включает версию CMake 3.19 (кстати, это первая версия, поддерживающая Apple Silicon — чип M1. Мы также успели поправить критическую проблему с версией CMake 3.20 — теперь ее тоже можно использовать в CLion 2021.1, но по умолчанию эта версия CMake пока не включена в поставку CLion.   Профили CMake, которые вы настраиваете через IDE, теперь можно сохранить в VCS. Для этого выберите опцию Share в разделе Settings/Preferences | Build, Execution, Deployment | CMake, после чего вы сможете закоммитить файл cmake.xml в систему контроля версий вместе с проектом. Предвосхищая вопрос из зала: поддержка CMake Presets будет, работа над ней начнется уже в ближайший релиз (CPP-22906).  Основное обновление для проектов Makefile — начальная поддержка удаленных тулчейнов. Кроме того, мы встроили в CLion плагин Makefile Language, разработку которого наша команда также взяла на себя. Плагин обеспечивает подсветку синтаксиса make, быстрый доступ к документации, действие Find Usages для таргетов, а также различные возможности навигации и автодополнения кода для Makefile.    Помимо встроенного анализатора Clazy, разработчики Qt-проектов могут пользоваться обновленным диалогом создания нового класса — Qt UI Class:   Появилась возможность указать пространство имен и вписать произвольный класс в качестве родительского класса. А еще мы добавили раскладку клавиатуры QtCreator. Видео от Фила Нэша об улучшениях для различных типов проектов:  Хотели ли вы иметь для языков C и C++ унифицированный синтаксис вызова функций (UFCS)? Теперь он вам не нужен! С новой возможностью постфиксного автодополнения кода на C и C++ вы сможете передать только что написанное выражение в свободную функцию в качестве первого аргумента. Введите выражение, поставьте точку и выберите свободную функцию из списка вариантов автодополнения:   С помощью постфиксного автодополнения также можно обернуть только что написанное выражение в одну из типичных языковых конструкций: Среди шаблонов есть циклы, конструкции приведения типов и многое другое. Полный список вы найдете в разделе Settings/Preferences | Editor | General | Postfix Completion. Видео от Фила Нэша с примерами того, насколько полезным может быть постфиксное автодополнение:  В этом обновлении мы доработали отладку дампов памяти:    В настройках конфигурации теперь можно указать sysroot. Это поможет находить библиотечные символы при отладке дампов приложений, собранных в других системах.   Для LLDB теперь возможна отладка дампа памяти приложений, собранных без отладочной информации, если эта информация отдельно указана в настройках отладчика (в виде файла символов). Раньше это работало только для GDB, а теперь доступно и для пользователей LLDB.  Действие Set Execution Point теперь работает не только для кода на C/C++, но и для ассемблерного кода: Рекомендуем использовать это действие с осторожностью. Например, важно не пропустить шаг инициализации переменных.  Множество улучшений «приезжает» в CLion из платформы IntelliJ. Например, те, что связаны с системами контроля версий:   Возможность выбирать профиль инспекций кода, которые запускаются перед коммитом   Шаблоны Git-коммитов   Действие Save to Shelf и др.  А еще CLion очень популярен среди Rust-разработчиков. И в плагине IntelliJ Rust мы тоже добавили множество улучшений — про них мы выпустили отдельный пост в нашем англоязычном блоге. Скажем лишь коротко, что мы добавили рефакторинг Change Signature и улучшили поддержку условной компиляции, а действие Find Usages теперь доступно для функций Cargo. Также хочется упомянуть плагин для поддержки языка Swift. Вы спросите: “Зачем это нужно в CLion, когда есть AppCode!?” Да, но AppCode доступен только для Mac, а Swift теперь работает и на Ubuntu, и на Windows. Поддержка Swift на платформе Windows — это именно то, что мы добавили. Всю работу проделали наши коллеги из продукта AppCode. А если вам интересно, как же начать программировать на Swift под Windows, читайте пост в блоге Appcode. На этом у нас все. Если вы дочитали до конца, напишите в комментариях свое любимое сочетание клавиш в CLion, если таковое имеется. Спасибо за внимание! Оставляйте ваши вопросы, мысли и предложения в комментариях — нам интересно, что вы думаете, и мы всегда рады помочь! Команда CLionThe Drive to Develop Разработчик и ПММ