В ReSharper C++ добавлен рефакторинг Safe Delete для безопасного удаления символов из исходного кода. Для современных проектов на C++ поддерживается ряд новых возможностей C++20 и C++23, включая модули стандартной библиотеки C++23. Также в этой версии появился встроенный помощник на основе искусственного интеллекта AI Assistant, который помогает решать каждодневные задачи.
Есть бесплатная пробная версия на 30 дней
AI Assistant не встроен в ReSharper, его нужно устанавливать отдельно. Доступ к AI Assistant временно ограничен, и вы можете оказаться в листе ожидания.
Подробнее об AI Assistant и его установке через Toolbox App или установщик dotUltimate читайте в документации.
В ReSharper C++ 2023.2 появился встроенный помощник на основе искусственного интеллекта AI Assistant. Это чат-бот, специально разработанный для ответов на вопросы по программированию: он помогает находить проблемы в коде, выполнять рефакторинг, документировать код и решать другие каждодневные задачи.
AI Assistant учитывает язык и технологии, используемые в вашем проекте, и соответствующим образом адаптирует ответы, экономя ваше время и силы.
Вставляйте фрагменты исходного кода прямо в вопрос к ассистенту. ReSharper распознает код, который вы добавили в чат, и правильно его отформатирует, а модель искусственного интеллекта объяснит логику, лежащую в основе кода, и поможет вам обнаружить проблемы, выполнить рефакторинг и задокументировать код.
Выражение if consteval
— это новый способ вычисления констант в C++23, который развивает идею consteval
и std::is_constant_evaluated()
из C++20. Если вычисление выражения if consteval
происходит во время вычисления константы, то выполняется следующая составная конструкция. В противном случае выполняется ветвь else
.
В ReSharper C++ добавлена поддержка if consteval
и набор соответствующих инспекций:
consteval if
всегда является константой;std::is_constant_evaluated
всегда вычисляется в константу;if
можно заменить на if consteval
. ReSharper C++ теперь поддерживает именованные модули std
и std.compat
, появившиеся в стандартной библиотеке C++23. Если вы работаете в Visual Studio 17.6 или более поздней версии, можете использовать import std
или import std.compat
, чтобы импортировать стандартную библиотеку целиком вместо использования прекомпилированного заголовочного файла или включения конкретных заголовочных файлов стандартной библиотеки.
До выхода C++23 все операторы должны были быть нестатическими функциями-членами класса. Однако операторы вызова часто используются с функциями-объектами без членов, и если позволить операторам в этом случае быть статическими, то можно повысить эффективность кода. В C++23 статическими могут быть как operator()
, так и operator[]
.
Мы активно работаем над улучшением поддержки модулей C++20, исправляя проблемы, которые возникают при работе над реальными проектами, использующими модули. При внутренней обработке модулей ReSharper C++ теперь отбрасывает объявления, которые не достижимы из других объявлений, что значительно повышает производительность модулей, включающих большое количество заголовочных файлов в глобальный фрагмент модуля.
Кроме того, мы добавили несколько изменений для улучшения поддержки модулей в проектах CMake. ReSharper C++ теперь распознает файлы .cppm
как интерфейсы модулей и включает экспериментальную поддержку модулей, расположенных вне папки проекта.
Новый атрибут [[no_unique_address]]
из в C++20 указывает, что для нестатического члена данных класса не требуется уникальный адрес, что позволяет компилятору более эффективно размещать члены класса. ReSharper C++ теперь учитывает [[no_unique_address]]
при вычислении размера объекта.
ReSharper C++ 2023.2 также поддерживает недавно принятый отчет о дефекте C++20, который позволяет инициализировать массив char
или unsigned char
строковым литералом UTF-8.
В ReSharper C++ появился рефакторинг Safe Delete для безопасного удаления символов из исходного кода. Его можно применять в отношении классов, функций, переменных, перечисляемых типов, пространств имен и даже концептов.
Для вызова рефакторинга поместите курсор на символ, который нужно удалить, и нажмите Alt+Del или выберите Safe Delete в меню Refactor This.
Прежде чем удалять символ, ReSharper C++ находит его использования и показывает превью изменений в исходном коде — так вы можете убедиться, что не будет удалено ничего лишнего. При попытке удаления сложной сущности, такой как класс или пространство имен, ReSharper C++ рекурсивно проверит использование всех ее членов.
В этой версии мы ускорили индексирование файлов Blueprints. При первом открытии проекта ReSharper C++ индексирует все ассеты Blueprint, чтобы вы могли пользоваться функцией Find Usages, а значения сериализованных данных показываются прямо в редакторе.
Раньше ассеты индексировались одновременно с кодом C++, поэтому подготовка проекта к работе занимала больше времени. ReSharper C++ 2023.2 индексирует ассеты в фоновом режиме после индексации C++-кода, не мешая вашей работе.
Мы улучшили умное автодополнение для типов-оберток со стандартной семантикой присваивания. Теперь при присваивании переменной типа TEnumAsByte
автодополнение будет предлагать перечисляемые типы из базового переисляемого типа.
Для проектов Unreal Engine 5.1 добавлена поддержка макроса UE_INLINE_GENERATED_CPP_BY_NAME
, который позволяет встраивать сгенерированные файлы в модуль для ускорения компиляции.
Благодаря улучшенному автодополнению зависимого кода вам будут предлагаться варианты автодополнения, когда тип ограничен концептом или признаком типа. ReSharper C++ теперь учитывает стандартные признаки типов std::is_same/std::is_base_of
, их псевдонимы значений _v
, соответствующие концепты std::same_as/std::derived_from
и признак Unreal Engine TIsSame
.
Чтобы предлагать наиболее подходящие варианты автодополнения, ReSharper C++ теперь также извлекает требования к типу и значению из условий requires
, if constexpr
и SFINAE.
Два новых взаимодополняющих контекстных действия помогают переместить ограничение параметров шаблона в условие requires
и преобразовать условие requires
в ограничение параметров шаблона.
Если у вас есть рекурсивный вызов, в редакторе появится соответствующая метка, и вам будет проще его заметить.
В списке вариантов автодополнения зарезервированные идентификаторы теперь отфильтровываются и предлагаются только после _
. Это значит, что больше не нужно пролистывать список вариантов из стандартных библиотек, если они не нужны.
В предыдущей версии мы реализовали правильную подсветку и форматирование макроподстановок в окне Quick Documentation и во всплывающих подсказках. В версии 2023.2 эти улучшения также будут работать для макроопределений и Parameter Info в автодополнении кода.
Механизм вычисления выражений теперь поддерживает агрегированную инициализацию массивов constexpr
.
Улучшена совместимость с компиляторами GCC и Clang, а также стандартными библиотеками libc++/libstdc++. Мы поддержали больше встроенных конструкций, например __integer_pack
и __is_convertible/__is_nothrow_convertible
, и обновили поддержанные ранее.
Если вы указываете направление параметра с помощью атрибутов [in]
, [in,out]
или [out]
Doxygen-команды param, всплывающие подсказки теперь извлекают их из вашего комментария.
В ReSharper C++ 2023.2 добавлена инспекция, которая обнаруживает избыточные операторы косвенного обращения и взятия адреса. Быстрые исправления помогут упростить доступ к членам и удалить лишние операторы.
Еще одна новая инспекция подсвечивает лишние аргументы шаблона, которые совпадают с соответствующим аргументом шаблона по умолчанию и могут быть опущены.
Новая проверка совместимости предупреждает о предварительном объявлении перечислений в стиле C без базового типа, которое запрещено стандартом C++, но допустимо в MSVC, что может привести к появлению непортируемого кода.
ReSharper C++ теперь подсвечивает диагностические директивы препроцессора #error
и #warning
в соответствии с их уровнем серьезности.
Мы также обновили встроенный исполняемый файл до версии Clang 16, добавив новые проверки и исправления.
В зависимости от значения аргумента компилятора /Zc:preprocessor
MSVC может использовать как традиционный, так и новый препроцессор, согласованный со стандартом. ReSharper C++ считывает значение этого аргумента из свойств проекта и соответствующим образом настраивает поведение встроенного препроцессора.
ReSharper C++ 2023.2 содержит несколько улучшений в Go to declaration для более простой навигации по коду без лишних действий:
typedef
или псевдонима, а не показывает меню со всеми объявлениями. #include
откроет эту папку. Кроме того, для символов, не являющихся деклараторами, теперь доступно действие Type of symbol. Принцип его работы в этом случае аналогичен Go to declaration.
При генерации документирующих комментариев ReSharper C++ приводит шаблон в соответствие стилю комментария в редакторе. Если в редакторе используется /**
, комментарий будет сгенерирован в формате /** */
, а если ///
— в формате ///
.
В этой версии вас ждет несколько улучшений в форматировании членов битового поля. Функция выравнивания инициализаторов и имен объявлений в столбцах теперь поддерживают битовые поля. Также добавлены две новые настройки для постановки пробелов до и после двоеточия в объявлениях битовых полей и для выравнивания размеров битовых полей в столбцах.
Мы добавили возможность отключить генерацию документирующих комментариев, чтобы избежать конфликтов со встроенным генератором Visual Studio (ReSharper | Options | Environment | Editor | Behavior | C++, C, HLSL | Generate documentation comments).
Мы также обновили встроенный исполняемый файл clang-format и внесли исправление в механизм clang-format: новая строка в конце файла больше не удаляется.
В свежей версии ReSharper тоже много нового. Например, там появился предиктивный отладчик, который предвидит все возможные состояния, возникающие при выполнении программы, не прибегая к ее реальному выполнению.
Есть бесплатная пробная версия на 30 дней