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

В ReSharper C++ 2024.3 улучшена производительность при работе с крупными решениями, реализованы новые возможности языка из стандартов C++23 и C23 и добавлен рефакторинг Move to Folder. В проектах Unreal Engine ReSharper C++ теперь предлагает автодополнение для тегов игрового процесса и аргументов макросов логирования, а также улучшенную поддержку делегатов.

Оптимизация производительности

При разработке ReSharper C++ 2024.3 мы постарались оптимизировать использование памяти при работе с крупными решениями. В результате теперь IDE потребляет гораздо меньше памяти. По результатам наших тестов, после первоначального индексирования потребление памяти снизилось примерно на 20% для проектов Unreal Engine и на 30% — для Chromium.

Эти улучшения в сочетании с уменьшением трафика памяти также ускорили процесс индексирования. Например, начальное индексирование проекта LLVM теперь происходит на 10% быстрее.

Возможности языка

В ReSharper C++ 2024.3 обеспечена полная поддержка основных возможностей C++23 благодаря внедрению суффиксов литералов для size_t и атрибутов в лямбда-выражениях. Кроме того, теперь выполняется вычисление свойства типа C++17 std::has_unique_object_representations.

Тем, кто пишет на C, ReSharper C++ предлагает поддержку ключевых слов typeof и typeof_unqual, а также макроса __has_c_attribute из C23.

Для улучшения совместимости с другими компиляторами помимо MSVC в ReSharper C++ реализованы несколько расширений GNU: диапазоны в switch-case, именованные параметры в вариативных макросах, атрибут transparent_union, а также __attribute__((aligned(...))). Кроме того, ReSharper C++ распознает много новых встроенных модулей компилятора, в том числе дополнительные свойства типов и сравнения чисел с плавающей точкой.

Unreal Engine

Функция автодополнения теперь предлагает доступные имена категорий и уровни детализации в аргументах макросов UE_LOG и UE_LOGFMT. Встроенные шаблоны Live Template с такими же именами помогут быстро добавить новые выражения логирования.

Теперь ReSharper C++ находит теги геймплея, определенные в проекте, и предлагает их в качестве вариантов автодополнения аргумента для функции FGameplayTag::RequestGameplayTag.

Улучшенная поддержка макроса UDELEGATE включает в себя автодополнение спецификаторов рефлексии в атрибутах макроса и отслеживание числа использований файлов Blueprints для членов класса в типах делегатов.

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

Рефакторинг Move to Folder

Благодаря рефакторингу Move to Folder переносить файлы C++ стало гораздо проще. Когда вы перемещаете файлы в новое место, рефакторинг обновляет директивы #include в соответствии с изменениями в структуре проекта.

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

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

Версия ReSharper C++ 2024.3 поддерживает многострочные комментарии To-do, позволяя обрабатывать текст с отступом, расположенный на идущих подряд строках, как единый объект To-do. Кроме того, если вам встретился объект To-do со ссылкой на внешнюю проблему, с помощью действия Peek To-do link (Ctrl+Shift+Click) ее можно посмотреть прямо в коде.

Теперь помощь при наборе текста автоматически вставляет пробел перед открывающей скобкой, когда включена опция форматирования Space before parentheses in control statements.

Новые настройки форматтера позволяют выбрать стиль скобок для свойств C++/CLI и настроить перенос строки перед try-блоком функции.

Генерация кода

Если в вашем проекте для документирующих комментариев используется синтаксис XML, а не Doxygen, теперь стиль шаблона документации по умолчанию легко изменить в настройках Code Generation. Кроме того, эта версия ReSharper C++ распознает документацию XML в комментариях /** ... */ и правильно отображает информацию в подсказках.

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

Интеграция с инструментами Сlang

В ReSharper C++ 2024.3 включены исполняемые файлы clang-tidy и clang-format из версии Clang 19. В них появились новые проверки и улучшения из свежей версии LLVM.

Комментарии // NOLINT(...) в вашем коде теперь отключают не только определенные проверки clang-tidy, но и соответствующие инспекции ReSharper.

В новой версии встроенный форматтер распознает комментарии // clang-format off и // clang-format on и отключает форматирование в обозначенных областях.

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