В 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++ распознает много новых встроенных модулей компилятора, в том числе дополнительные свойства типов и сравнения чисел с плавающей точкой.
Функция автодополнения теперь предлагает доступные имена категорий и уровни детализации в аргументах макросов 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 переносить файлы 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 в комментариях /** ... */ и правильно отображает информацию в подсказках.
Еще одна новая настройка позволяет контролировать, должны ли действия по генерации кода сохранять значения по умолчанию для аргументов функции при создании переопределяющих функций.
В ReSharper C++ 2024.3 включены исполняемые файлы clang-tidy и clang-format из версии Clang 19. В них появились новые проверки и улучшения из свежей версии LLVM.
Комментарии // NOLINT(...) в вашем коде теперь отключают не только определенные проверки clang-tidy, но и соответствующие инспекции ReSharper.
В новой версии встроенный форматтер распознает комментарии // clang-format off и // clang-format on и отключает форматирование в обозначенных областях.
В свежей версии ReSharper тоже много нового.