Releases

Релиз CLion 2021.1: глобальный анализ потоков данных, улучшения для удаленной работы, постфиксное автодополнение и многое другое

В JetBrains стартовал новый релизный год: все наши десктопные продукты обновились или обновятся в самое ближайшее время. Сегодня мы хотим поговорить о CLion 2021.1 — новейшей версии нашей кроссплатформенной IDE для разработки на C и C++.

CLion 2021.1

В этом обновлении много яркого и интересного:

  1. Анализатор кода

    • Глобальный анализ потоков данных
    • Интеграция Clazy
    • Новые проверки MISRA
  2. Удаленная работа

    • Проекты Makefile в удаленном режиме
    • Динамический анализ в удаленном режиме
    • Удаленный терминал
    • Инструмент для совместного редактирования кода
  3. Улучшения для различных типов проектов (CMake, Makefile, Qt)
  4. Постфиксное автодополнение для C и C++
  5. Отладчик
  6. Улучшения платформы 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.

К примеру, некоторые висячие указатели можно выявить только в глобальном режиме:

Dangling pointer

Точно так же с разыменовыванием некоторых нулевых ссылок:

Null dereferencing

С появлением режима глобального анализа потоков данных также стали возможны новые проверки:

  • Постоянный результат функции — сообщает о функциях, возвращаемое значение которых всегда является одной и той же константой.
  • Постоянный параметр — сообщает о функциях, в которых параметр всегда является одной и той же константой.
  • Недостижимые вызовы функций — обнаруживает функции, точки вызова которых никогда не будут достигнуты.

Call sites

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

Кстати, в качестве следующего улучшения анализатора кода мы планируем добавить Lifetime-проверки. Да-да, те самые из предложения Герба Саттера, и даже лучше!

Интеграция Clazy

Мы продолжаем улучшать поддержку Qt-проектов. Нет, поддержку QML из коробки пока не завезли :( Но мы добавили в наш языковой движок на базе Clang интеграцию с Clazy — анализатором для кода Qt. В редакторе CLion теперь доступны соответствующие проверки кода и быстрые исправления:

Clazy integration

Настройки анализатора можно найти в Settings/Preferences | Editor | Inspections | C/C++ | General | Clazy. Стоит обратить внимание на параметр level — уровень важности проверок Clazy. В данный момент CLion 2021.1 поддерживает версию CLazy 1.8.

Новые проверки MISRA

CLion поддерживает все больше проверок стандартов MISRA C 2012 и MISRA C++ 2008. До поддержки всех проверок нам пока далеко, однако вот полный список тех, которые мы уже поддержали.

MISRA checks

Мы планируем поддержать все проверки стандартов MISRA и начать работу над стандартом AUTOSAR.

Смотрите видео об улучшениях встроенного анализатора кода от нашего девелопер-адвоката Фила Нэша:

Удаленная работа

Проекты Makefile в удаленном режиме

В CLion 2021.1 появилась базовая поддержка удаленного режима разработки для проектов Makefile. Чтобы воспользоваться ей, достаточно указать удаленный тулчейн в разделе Settings/Preferences | Build, Execution, Deployment | Makefile и перезагрузить проект.

Remote makefiles

Пока что самое большое ограничение — отсутствие поддержки шагов для преконфигурации. То есть работать все будет, только если в корне вашего проекта уже есть Makefile. Есть и другие ограничения.

Динамический анализ в удаленном режиме

Мы стремимся к единообразию возможностей IDE для всех тулчейнов, моделей проектов и конфигураций, и теперь Google Sanitizers, Valgrind Memcheck и анализ покрытия кода работают в том числе с удаленными тулчейнами. Кстати, что касается анализа покрытия кода, теперь вам также доступен анализ покрытия ветвей кода (в дополнению к анализу покрытия строчек).

Branch coverage

Таким образом, в зависимости от используемого тулчейна CLion предлагает следующие метрики:

  1. Покрытие строк кода (Line coverage) — то, что считает инструмент GCC/gcov. В частности, используя его, для строки return 0; int c; вы вполне можете получить покрытие 100%.
  2. Покрытие выражений (Statement coverage) — то, что считает инструмент LLVM/llvm-cov. Здесь делается честный подсчет покрытия по выражениям, и для примера, приведенного выше, 100% вы не получите.
  3. Покрытие ветвей кода (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 — наш новый инструмент для совместной удаленной разработки и парного программирования. Мы про него уже писали в прошлый релиз, когда он только появился и был доступен по программе раннего доступа. Коротко об изменениях:

  1. Сервис теперь доступен официально, программа раннего доступа завершена.
  2. Соответствующий плагин включен в CLion 2021.1 по умолчанию.
  3. О том, входит ли Code with Me в вашу подписку и какие мы предлагаем коммерческие планы, можно узнать на нашем сайте.
  4. Все планы включают: аудио- и видеозвонки, поддержку совместного редактирования кода, режим полной синхронизации, умный анализ кода и многое другое.

И хотя пока не все возможности CLion доступны в режиме совместного редактирования, сервис уже умеет довольно много. Пробуйте и рассказывайте нам о своих впечатлениях!

Улучшения для различных типов проектов (CMake, Makefile, Qt)

Мы уже поговорили о поддержке проектов Makefile в режиме удаленной разработки и анализаторе Clazy для проектов на Qt. Но в CLion 2021.1 есть и другие улучшения для различных типов проектов.

CMake

Обновление включает версию 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

Основное обновление для проектов Makefile — начальная поддержка удаленных тулчейнов. Кроме того, мы встроили в CLion плагин Makefile Language, разработку которого наша команда также взяла на себя. Плагин обеспечивает подсветку синтаксиса make, быстрый доступ к документации, действие Find Usages для таргетов, а также различные возможности навигации и автодополнения кода для Makefile.

Makefile Language

Qt

Помимо встроенного анализатора Clazy, разработчики Qt-проектов могут пользоваться обновленным диалогом создания нового класса — Qt UI Class:

Qt UI Class dialog

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

А еще мы добавили раскладку клавиатуры QtCreator.

Видео от Фила Нэша об улучшениях для различных типов проектов:

Постфиксное автодополнение для C и C++

Хотели ли вы иметь для языков C и C++ унифицированный синтаксис вызова функций (UFCS)? Теперь он вам не нужен! С новой возможностью постфиксного автодополнения кода на C и C++ вы сможете передать только что написанное выражение в свободную функцию в качестве первого аргумента. Введите выражение, поставьте точку и выберите свободную функцию из списка вариантов автодополнения:

Postfix free function

С помощью постфиксного автодополнения также можно обернуть только что написанное выражение в одну из типичных языковых конструкций:

Postfix templates

Среди шаблонов есть циклы, конструкции приведения типов и многое другое. Полный список вы найдете в разделе Settings/Preferences | Editor | General | Postfix Completion.

Видео от Фила Нэша с примерами того, насколько полезным может быть постфиксное автодополнение:

Отладчик

В этом обновлении мы доработали отладку дампов памяти:

  • В настройках конфигурации теперь можно указать sysroot. Это поможет находить библиотечные символы при отладке дампов приложений, собранных в других системах.
  • Для LLDB теперь возможна отладка дампа памяти приложений, собранных без отладочной информации, если эта информация отдельно указана в настройках отладчика (в виде файла символов). Раньше это работало только для GDB, а теперь доступно и для пользователей LLDB.

Действие Set Execution Point теперь работает не только для кода на C/C++, но и для ассемблерного кода:

Debug disasm

Рекомендуем использовать это действие с осторожностью. Например, важно не пропустить шаг инициализации переменных.

Улучшения платформы IntelliJ и обновления плагинов

Множество улучшений «приезжает» в 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, если таковое имеется :)

Спасибо за внимание! Оставляйте ваши вопросы, мысли и предложения в комментариях — нам интересно, что вы думаете, и мы всегда рады помочь!

Ваша команда CLion
The Drive to Develop

Оригинал статьи опубликован на habr.com:
https://habr.com/ru/company/JetBrains/blog/551476/

image description

Discover more

News Releases

CLion 2021.1: New Code Analysis Options, Updates to Remote Mode, and Postfix Completion

The first release of the year, CLion 2021.1, is now available!

This new version provides an overhaul for code analysis, allowing it to catch more potential issues and guideline inconsistencies, enhances the debugging experience, and improves the capabilities of remote mode. In addition to the improved C and C++ experience, CLion 2021.1 introduces updated Rust and Swift support and valuable changes from the IntelliJ Platform.

CLion 2021.1 release

To update to the new version, you can use the Toolbox App or a snap package (on Ubuntu), download the installer from our website, or apply the patch update to upgrade from the last 2020.3 build.

DOWNLOAD CLION 2021.1

In this release:

Code analysis

Catching issues as early as possible and checking your code against the guidelines is essential for improving code quality. An IDE can help with this task by running code inspections and highlighting potential issues on the fly in the code editor.

In CLion 2021.1 we’ve focused on improving the variety and accuracy of code analysis checks available to users in three main areas:

  1. Including a global DFA (which takes a whole translation unit of a program as a single unit for analysis), in addition to the local DFA (which works within a single function).
  2. Integrating Clazy, a Qt-oriented static code analyzer.
  3. Introducing more checks from MISRA C 2012 and MISRA C++ 2008.

Let’s take a look at all three.

Data flow analysis (DFA) tracks the flow of data in your code and detects potential issues based on that analysis. It’s capable of detecting dangerous cases like dangling pointers, null dereferencing, or variables escaping their scope. CLion previously ran these checks locally, within the body of a single function. In v2021.1, CLion includes global DFA, which runs these inspections on translation units. This catches the same issues in a wider range of situations.

Dangling pointer

Global DFA is not just an improvement to local DFA, it also makes it possible to run additional checks that are only possible in global mode:

  • Constant function result – reports functions whose return values appear to always be the same constant.
  • Constant parameter – reports functions where a parameter appears to always be the same constant.
  • Unreachable function calls – detects functions whose call sites are never executed.

Unreachable function calls

While introducing global DFA we reworked many of the underlined algorithms, which improved analysis performance. Read more about it in this separate blog post.

If you are working on a Qt-based project in CLion, you’ll be happy to learn that Clazy, a Qt-specific code analyzer, is now integrated into CLion’s Clangd-based engine. You’ll now get Clazy checks and quick-fixes right in the editor!

Clazy integration

The inspection severity level and the Clazy check level can be configured in Settings/Preferences | Editor | Inspections | C/C++ | General | Clazy.

To wrap up with the code analysis update in CLion 2021.1, we’d like to mention that we’ve added another pack of MISRA C 2012 and MISRA C++ 2008 checks. Not all checks are supported, but the improvement over the previous release is significant. The full list of available checks is maintained on our confluence page and allows you to easily track our progress.

Now it’s demo time! Watch a recent update to code analysis in CLion in this short video from Phil Nash, our developer advocate:

Enhancements for various project types

In addition to the new code analysis support we’ve added for Qt with the Clazy analyzer, we’ve also improved the Qt experience from a project model standpoint by implementing a small redesign for the New Qt UI Class dialog. You can now:

  • Specify the namespace.
  • Type a custom name for the parent class (previously you could only select from a few predefined options).

Qt UI Class

If you are working on a Qt-based project, you’ll be interested in the Qt Creator keymap, which is now bundled into CLion.

We have continued to improve Makefile project support in CLion. In this release we’ve bundled the Makefile Language plugin (previously third-party), which provides syntax highlighting in Makefile, quick documentation, Find Usages for targets, and a variety of navigation and code completion actions. We’ve also started working on remote mode support for Makefile projects.

Remote Makefile

It now works in a limited number of use cases. Makefile should be present in the project directory, and please note that if a pre-configure step is required, CLion can’t automate it for now. Check out the other limitations and known issues.

For CMake, we’ve added the ability to share CMake Profiles. Tick the Share setting in Settings/Preferences | Build, Execution, Deployment | CMake, and then commit cmake.xml to VCS:

cmake.xml to VCS

CLion 2021.1 also bundles CMake 3.19. This is the first CMake version to support Apple Silicon (M1 chip).

Whichever build system you are using, Project View gives you an overview of the files in your project. Source files located outside of the project root are now grouped under the External Sources node in the Project tree. This helps prevent the top-level crowding of these files.

External Sources

Time for another demo from Phil:

Open Project wizard

When you first get started with CLion or open a project for the first time in CLion, some additional configuration is often required. A new Open Project wizard is here to help!

The first step is the Toolchains configuration. It is shown only if CLion is being launched for the first time and settings were not imported. This step is essential, since no project can be opened and loaded in CLion without a toolchain configured.

The second step only appears for CMake projects, and it’s about CMake Profiles configuration. It is displayed if the project is opened for the first time (if the .idea directory is missing), if workspace.xml is missing from .idea, or if all the profiles are disabled. Of course, you can step back to the Toolchains configuration from CMake Profiles:

Open Project Wizard

Before you even see the wizard, CLion will ask you if you trust the project you are opening. The concept of trusted projects is designed to mitigate the risks associated with opening projects from unknown and untrusted sources. It’s a consequence of the approach that modern build systems are using, where they rely on code execution for building the project model that the IDE needs in order to understand the project structure and its dependencies. You can read more about the solution implemented in our IDEs in this blog post. Here’s what you’ll see in CLion when opening a CMake, Makefile, or Gradle project for the first time, for example from a VCS:

Trusted projects

Debugger

In CLion 2021.1, GDB and LLDB have reached feature parity for core dump debugging in CLion! To achieve this, we’ve added the ability to explicitly set symbol files when debugging a core dump for non-symbolized binary. Users can now also set sysroot in the corresponding run configuration. This will help localize library symbols when debugging core dumps from binaries built on other systems:

Core Dump configuration

The Set Execution Point action lets you jump to an arbitrary line of code in the editor during a debug session and is now available in the disassembly view.

Check out another demo from Phil on the debugger enhancements, as well as our new page fully dedicated to Debugger abilities in CLion.

Remote development and dynamic analysis tools

In addition to support for remote Makefile projects, CLion introduces a variety of further enhancements to remote mode! Dynamic analysis tools – Google Sanitizers, Valgrind Memcheck, and Code Coverage – now work with remote toolchains. And speaking of Code Coverage, CLion 2021.1 can now also calculate Branch Coverage in addition to line coverage. Let’s run unit tests with code coverage on a demo project remotely, from a local Mac to the remote Linux machine. The results can be inspected in the Coverage tool window:

Branch Coverage

Branch coverage is enabled by default and can be adjusted in Settings/Preferences | Build, Execution, Deployment | Coverage, but it only works with GCC/gcov or version 12.0.0 and higher of LLVM/llvm-cov. Read more in this blog post.

When you work with remote projects, you might need to adjust something manually or check the remote directory containing your project. There is a remote terminal in the IDE and a new Tools | Open Remote Host Terminal action that directly opens the project directory on the remote host.

We also would like to mention Code With Me, the new built-in service for remote collaborative development and pair programming. Code With Me connects remote teams in a feature-rich collaborative environment and helps boost productivity, no matter where the team members are based. The essential IDE features, such as smart code insight, navigation, remote unit testing, and debugging, are available for participants during collaborative sessions. Teams can simultaneously edit code, track changes with diff previews, and follow each other in the shared project. The embedded audio and video calls, along with chat messaging, help software developers discuss the code, share their knowledge, and cooperate more efficiently.

For those who must follow strict security policies, Code With Me has an on-premises version. The service can be installed and run securely on the company’s own private network. To learn more about the availability of Code With Me with your current JetBrains license, check out the pricing page.

Postfix completion for C and C++

Sometimes you may want to type a collection and then wrap it with the for loop to iterate through it. Or you may need to get a type and then create a shared or unique pointer of this type, or wrap a given expression with one of the C++ style casts. In all these scenarios, you can start with an expression and then wrap it with some “action”, which is represented by a language construct, even though the “action” goes first in the final code. CLion 2021.1 introduces postfix completion for C and C++ to support this approach to coding.

Postfix completion templates

You will find a long list of postfix templates that work this way in Settings/Preferences | Editor | General | Postfix Completion.

If you miss the Uniform Function Call Syntax (UFCS) in C and C++, the new postfix completion feature offers a very similar experience. You can use postfix code completion to pass the expression you’ve just typed to a free function as the first argument:

Postfix completion for free function

Learn more in this blog post, and watch it in action:

By the way, this feature isn’t new in our C++ tools. In ReSharper C++, our C++ extension for Visual Studio, we also have a similar postfix completion ability.

VCS support enhancements

There are a bunch of updates coming to CLion from the IntelliJ Platform. This includes a number of VCS support enhancements:

  • Code inspection profiles that you can select to execute before committing changes to VCS
  • Support for custom commit message templates in Git
  • A new Save to Shelf action (which allows you to copy your changes to the Shelf while keeping them in the local changes)

Rust and Swift plugin updates

The IntelliJ Rust plugin team has prepared a lot of fixes and improvements. Read more about them here. We just want to take a moment to highlight the new structured view for the compiler’s build output, the new Change Signature refactoring, updates to the Rename refactoring, and the ability to use Find Usages for Cargo features.

Thanks to the AppCode team, the Swift plugin is now available in CLion on Windows! You can find a few tips on how to get the toolchain, as well as information about some known issues, in this blog post.

That’s it! We encourage you to give CLion 2021.1 a try. Update today if you have an active subscription, or start your free 30-day trial to evaluate the new features!

DOWNLOAD CLION 2021.1

Your CLion team
JetBrains
The Drive to Develop

image description