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

В ReSharper C++ 2024.2 реализована поддержка новых возможностей C++23, подсказки дополнены информацией об организации типов, а также внесен ряд улучшений в рефакторинг Rename. Для разработчиков Unreal Engine в ReSharper C++ 2024.2 теперь доступна поддержка свойств типов struct, а также новая инспекция, которая находит отсутствующие вызовы базовых методов.

Скачать

Есть бесплатная пробная версия на 30 дней

Поддержка стандарта C++23

В ReSharper C++ 2024.2 добавлена поддержка оператора обращения к индексу. Использование operator[] с несколькими аргументами обеспечивает лучшую поддержку многомерных контейнеров и представлений.

Кроме того, новая версия ReSharper C++ понимает директивы препроцессора C++23/C23 #elifdef и #elifndef, дополняющие существующие директивы #ifdef и #ifndef.

[[assume(<expr>)]] — новый атрибут в C++23, позволяющий давать подсказки оптимизатору, используя выражение аргумента. Теперь ReSharper C++ делает синтаксический разбор аргумента и поддерживает внутри него все обычные функции анализа кода.

Unreal Engine

Новая версия ReSharper C++ распознает свойства типов struct в Unreal Engine. Если типы struct аннотированы соответствующими свойствами, ReSharper C++ проверяет, что у них есть нужные методы, а при отсутствии методов генерирует их.

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

Еще одна инспекция выявляет использования IOnlineSubsystem::Get() и заменяет их на Online::GetSubsystem(this->GetWorld()).

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

Организация типов

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

Кроме того, наведя курсор на поле класса, вы увидите также отступ поля от начала объекта и интервал, добавляемый после поля.

Улучшения рефакторинга Rename

При переименовании файла ReSharper C++ теперь предлагает новую возможность: переименовать связанные файлы, используя то же имя. Например, если переименовать файл заголовка, файл .cpp, который содержит этот заголовок, тоже будет переименован.

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

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

Анализ кода

Мы обновили встроенный двоичный файл clang-tidy до Clang 18, добавив новые проверки и улучшения из свежей версии LLVM.

Как и в случае с поддержкой комментариев NOLINT в обновлении 2024.1, ReSharper C++ теперь распознает прагмы include-what-you-use, позволяющие игнорировать инспекцию Possible unused #include directive.

Мы добавили исправление для использования reinterpret_cast при ошибках преобразования, где либо исходный, либо целевой тип является указателем на char или std::byte.

Другие улучшения

Действие меню инспекций Why is ReSharper suggesting this? теперь ведет в руководство C++ Core Guidelines по инспекциям кода, реализующим одну из инструкций этого руководства.

В окне Find Results стал доступен фильтр Base method call, позволяющий отфильтровать вызовы базовых методов в списке использований.

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

Кроме того, улучшена совместимость ReSharper C++ с проектами CMake в Visual Studio: исправлен ряд важных ошибок и повышена производительность при редактировании кода.

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

Скачать

Есть бесплатная пробная версия на 30 дней