Что нового в ReSharper C++ 2023.3

В ReSharper C++ 2023.3 появился новый встроенный инструмент проверки правописания и грамматики, добавлены функции автодополнения и Find Usages для неактивного кода, обновлена поддержка C, C++, HLSL и многое другое. Наконец, в ReSharper C++ 2023.3 был значительно обновлен AI Assistant.

Официальная версия AI Assistant Публичный доступ

Мы официально выпустили своего ИИ-помощника AI Assistant, добавив ряд новых возможностей и улучшив уже известные функции, чтобы сделать вашу работу еще эффективнее. Обновления, сделанные в новой версии, позволяют лучше учитывать контекст проекта для действий на основе ИИ, а также включают в себя библиотеку подсказок.

Чтобы использовать AI Assistant как дополнительную функцию ReSharper C++, вам потребуется подписка JetBrains AI Service.

Обновления для HLSL и Unreal Engine

В HLSL 2021 появились C++-подобные шаблоны для функций и типов данных. В новой версии ReSharper C++ обеспечена полная поддержка шаблонов HLSL.

В ReSharper C++ 2023.3 теперь есть поддержка встроенного типа HLSL RayQuery и улучшена работа автодополнения кода для соответствующих флагов.

Новая инспекция поможет избежать распространенных ошибок, связанных с макросом помощника AddDynamic. Если функция динамического делегата не помечена макросом UFUNCTION, вы получите предупреждение.

Если вам временами еще приходится писать стереотипный код, помните, что сочетание клавиш Alt+Insert позволяет автоматически генерировать члены общего типа. В ReSharper C++ 2023.3 генерация хеш-функций настроена в соответствии с правилами Unreal Engine.

Если вы хотите разрабатывать на Unreal Engine в отдельной кросс-платформенной IDE, обратите внимание на Rider. Поддержка Unreal Engine в Rider соответствует возможностям ReSharper C++, поэтому в Rider 2023.3 вас ждут такие же улучшения.

Поддержка C и C++

Если вам иногда приходится проверять, доступен ли в текущей версии стандарта или компилятора определенный атрибут, вам пригодится проверка функций C++20. Используя __has_cpp_attribute(operand) в условиях препроцессинга, можно проверить, распознает ли компилятор атрибут, на который ссылается операнд. Новая версия ReSharper C++ корректно обрабатывает __has_cpp_attribute, и это позволило улучшить поддержку аннотаций атрибутов в стандартных библиотеках C++.

Мы добавили поддержку пакета pragma, используемого с ключевым словом __pragma. Синтаксис __pragma (pack) иногда используется в определениях макросов, поскольку там нельзя использовать директив #pragma. В подобных случаях ReSharper C++ теперь правильно вычисляет размер упакованных структур, и вы можете быть уверены в результатах анализа кода.

В ReSharper C++ добавлена поддержка некоторых функций C:

  • квалификатор типа C99 restrict, который можно использовать в объявлениях указателей;
  • выведение типов, constexpr и nullptr из C23.

Кроме того, мы добавили поддержку нескольких новых встроенных функций clang, например __is_const(), __is_member_pointer() и других, чтобы ReSharper C++ лучше работала с кросс-платформенным кодом.

Если вас интересует кросс-платформенная разработка на C и C++, рекомендуем ознакомиться с отдельной IDE CLion Nova, доступной по программе раннего доступа. Она создана на базе ReSharper C++ и на данный момент распространяется бесплатно: просто зарегистрируйтесь, начните писать код и не забудьте прислать нам отзыв!

Проверка правописания и грамматики

Новый инструмент проверки правописания и грамматики в ReSharper — JetBrains Grazie. Grazie поддерживает более 20 языков и находит как ошибки в естественных языках, так и в языках программирования, поддерживаемых ReSharper (C#, C++, VB.NET), языках разметки текста (HTML, XML, XAML) и комментариях. Добавить в Grazie другие естественные языки можно в меню ReSharper Options | Grammar and Spelling | General.

Обратите внимание, что проверка грамматики в комментариях doxygen в настоящее время недоступна.

Работа с неактивным кодом

Работая с кодом для определенных платформ или конфигураций, вы периодически обнаруживаете, что редактируете неактивный в данный момент код в ветках условных блоков препроцессинга. Раньше функция автодополнения предлагала для неактивного кода только макросы. В версии ReSharper C++ 2023.3 она была доработана и теперь в подобных случаях предлагает символы из глобальной области доступа.

Действие Find Usages теперь показывает возможные использования в неактивном коде и телах макросов. Ранее для этого надо было использовать Find Usages Advanced, а затем изучать текстовые соответствия. Теперь Find Usages по умолчанию показывает возможные использования в телах макросов и неактивном коде. Они группируются в отдельные разделы, чтобы их можно было отличить от использований в активном коде.

Анализ кода

Вы можете использовать специальные атрибуты ReSharper в C++, чтобы анализ кода в ReSharper был точнее и полнее. В ReSharper C++ 2023.3 мы добавили помимо [[rscpp::...]] префикс [[jetbrains::...]] для существующих атрибутов [[jetbrains::format]], [[jetbrains::guard]] и [[jetbrains::has_side_effects]].

Новый атрибут [[jetbrains::pass_by_value]] позволяет отключить инспекцию Pass value by const reference для параметров функции. Подробнее.

Мы добавили ряд инспекций на некорректное использование ключевого слова export в модулях C++20. Теперь ReSharper C++ предлагает удалить экспорт, если другое объявление экспорта уже включает текущее объявление или если объявление не является частью блока модульного интерфейса, и его нельзя экспортировать. Кроме того, вам будет предложено переместить export, если вы пытаетесь создать шаблон из объявления экскорта вместо того, чтобы экспортировать объявление шаблона.

Мы обновили встроенный Clang-Tidy до версии Clang 17 — теперь он включает обновления из свежей версии LLVM.

Некоторые проверки Clang-Tidy выдают подробную информацию, помимо текста предупреждения. Новая версия ReSharper C++ показывает эти дополнительные сведения в виде подсказки.

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

Теперь ReSharper C++ предлагает быстрое исправление для удаления избыточных операторов условий и упрощения тернарных условных выражений.

Помощь при написании кода

Меню Generate, которое можно вызвать сочетанием клавиш Alt+Insert, помогает быстро сгенерировать стереотипный код. В ReSharper C++ 2023.3 добавлено новое действие для генерации деструкторов.

Если его вызвать в полиморфном классе, действие использует настройки стиля синтаксиса, чтобы вставить нужные спецификаторы virtual и (или) override. Стиль тела сгенерированного деструктора можно настроить на странице параметров Code Editing | C++ | Code Generation.

Директивы #pragma region и #pragma endregion позволяют указать сворачиваемый блок кода. Как и в случае с другими соответствующими директивами, перейти от одной к другой можно, вызвав действие Go to Declaration на директиве #pragma, или с помощью новой встроенной подсказки с именем региона.

Кроме того, в окне File Structure теперь можно легко свернуть регионы и перейти к соответствующим блокам кода.

В коде C следует использовать void в списке параметров функции, чтобы указать, что она не принимает никакие аргументы. Новая версия ReSharper C++ сохраняет этот специальный параметр void при вызове рефакторингов Extract method или Change signature, при генерации определения для функции или при создании новой функции из ее использования.

Встроенные подсказки ссылок теперь содержат отдельный текст [>>], чтобы перенаправляющие ссылки были сразу видны.

Новое действие Generate inline definitions помогает быстро сгенерировать тела для нескольких функций одновременно. Как и уже существующее действие Generate definitions, новое действие доступно, если выбрать в редакторе имя класса или несколько объявлений функций.

Когда вы вызываете рефакторинги Introduce parameter и Introduce field на вложенном выражении, новая версия ReSharper позволяет явно выбрать целевое выражение, а не автоматически применяет рефакторинг к внешней его части.

Для упрощения навигации по коду символы, появившиеся в результате макроподстановки, теперь будут скрыты в окнах Go to и File Structure. Это очень удобно, если макросы добавляют при раскрытии много дополнительных символов, например декларации тест-кейсов в популярных фреймворках юнит-тестирования.

Форматирование кода

В ReSharper C++ 2023.3 появилось несколько новых параметров форматирования:

  • разрыв строки перед -> в типах trailing return type;
  • разрыв строки после -> в типах trailing return type;
  • пробелы внутри пустых блоков;
  • возможность добавления комментариев после {.

Мы также обновили встроенный исполняемый файл clang-format до версии Clang 17 и реализовали поддержку настройки clang-format InsertNewlineAtEOF и при импорте настроек форматтера из конфигурационного файла .clang-format, и при использовании clang-format вместо встроенного форматтера.

В свежей версии ReSharper тоже много нового.