В ReSharper C++ 2024.1 улучшена поддержка модулей C++20 и появилась навигация по исходящим вызовам с помощью функции Call Tracking. Расширенная помощь при написании кода включает в себя улучшенный рефакторинг Change Signature, обновленную поддержку документирующих комментариев и многое другое. Для разработчиков Unreal Engine в ReSharper C++ 2024.1 теперь доступны поддержка фреймворка Slate UI, а также автодополнение путей ассетов в коде C++.
Есть бесплатная пробная версия на 30 дней
Мы обновили процесс поиска модулей, и теперь ReSharper C++ внутренние разделы, не влияющие на внешний интерфейс модуля. Иначе говоря, это разделы модулей без самостоятельных объявлений export module
.
Мы переработали внутреннее представление экспортированных модулей C++20, упростив импорт транзитивных ссылок на объекты из других модулей. Раньше такие объекты приходилось заново экспортировать из модуля, куда они были импортированы. Мы надеемся, что эти изменения заметно упростят работу с экспортированными модулями и повысят производительность на проектах, где используются модули C++20.
В ReSharper C++ 2024.1 добавлена поддержка фреймворка Slate UI для Unreal Engine. Встроенный инструмент форматирования и функции помощи при редактировании кода помогут отформатировать код Slate в соответствии с требованиями Unreal Engine. Такие функции, как Go to declaration, Find Usages и Rename, также были обновлены и теперь понимают синтаксис объявлений Slate.
Благодаря интеграции с возможностями Blueprints новая версия ReSharper C++ поддерживает добавление Core Redirects при переименовании экземпляра UENUM, а также автодополнение путей ассетов для имен ресурсов в коде C++.
В коде шейдеров теперь поддерживаются интерфейсы HLSL, используемые для динамического связывания шейдеров.
Если вы хотите разрабатывать на Unreal Engine в отдельной кросс-платформенной IDE, обратите внимание на Rider. Поддержка Unreal Engine в Rider соответствует возможностям ReSharper C++, поэтому в Rider 2024.1 вас ждут такие же улучшения.
В новой версии ReSharper функция Call Tracking поддерживает не только отслеживание входящих вызовов, как раньше, но и навигацию по всем цепочкам исходящих вызовов. Чтобы посмотреть исходящие вызовы, поместите курсор в любую функцию и выберите в контекстном меню пункт Inspect | Outgoing calls. Можно также нажать Ctrl+Shift+Alt+A, чтобы вызвать нужное действие из меню Inspect This.
Теперь с помощью рефакторинга Change Signature удобно менять тип параметра функции: указатель, ссылка или значение. ReSharper автоматически обновит все использования параметра в теле функции и исправит ее аргументы в местах вызова, добавив при необходимости операторы разыменования и взятия адреса.
При вызове Change Signature для функции, у которой могут быть использования в зависимом коде, обновленный рефакторинг позволяет проверить изменения и указать, какие именно использования нужно обновить.
Можно также указать аргументы по умолчанию для новых параметров функции, добавленных с помощью Change Signature.
Другие важные изменения Change Signature:
int
в типах unsigned int
. В новой версии можно настроить стиль генерируемых документирующих комментариев, при этом не придется редактировать шаблон Live Template. Это можно сделать в меню ReSharper Settings | Code editing | C++ | Code generation.
Начиная с версии 2023.3, в ReSharper используется новый инструмент проверки правописания и грамматики — JetBrains Grazie. В версии 2024.1 инспекции для проверки грамматики на основе Grazie стали доступны и в документирующих комментариях C++.
В новой версии рефакторинг Change Signature сохраняет синхронизацию команд @param
со списком параметров функций. Он удаляет @param
для удаленных параметров, добавляет команды для новых параметров, а также меняет порядок существующих команд в соответствии с обновленным порядком включенных параметров.
По свежим данным, полученным в ходе широкого тестирования инструментов рефакторинга C++, которое проводил Ричард Томсон, ReSharper C++ по-прежнему опережает конкурентов, успешно проходя большинство тестов. Мы постоянно стремимся улучшить качество вариантов, предлагаемых нашим инструментом, и в ReSharper C++ 2024.1 мы устранили несколько проблем, которые Ричард нашел в ходе этого тестирования. Например, быстрое исправление Create constructor from usage теперь при необходимости добавляет конструктор по умолчанию.
Версия ReSharper C++ 2024.1 предлагает удалить избыточные идиоматические инциализаторы нуля при агрегированной инициализации. Несколько новых инспекций помогают найти разные проблемы с членами статических данных, например, избыточные спецификаторы inline
в членах данных static constexpr
.
Инструмент очистки кода Code cleanup добавляет новые элементы, чтобы удалить избыточные спецификаторы доступности и создать классы без наследников final
. Функция Apply ‘auto’ style в новой версии обрабатывает не только локальные, но и глобальные переменные, а также члены классов.
Раньше, чтобы отключить выбранную инспекцию для определенной области доступа, можно было использовать специальные комментарии // ReSharper disable
. ReSharper C++ 2024.1 распознает также комментарии NOLINT
, NOLINTNEXTLINE
и NOLINTBEGIN ... NOLINTEND
, используемые clang-tidy.
В ReSharper C++ 2024.1 появилось несколько новых параметров форматирования:
При использовании конфигурации .clang-format
инструмент форматирования ReSharper теперь учитывает настройки DisableFormat
и IndentAccessModifiers
. Кроме того, поддерживается встроенный в GNU стиль clang-format.
В свежей версии ReSharper тоже много нового.
Есть бесплатная пробная версия на 30 дней
В ReSharper C++ теперь официально доступен JetBrains AI Assistant. Мы добавили ряд новых возможностей и улучшили уже известные функции, чтобы сделать вашу работу еще более эффективной. Обновления, сделанные в новой версии, позволяют лучше учитывать контекст проекта для действий на основе ИИ, а также включают в себя библиотеку подсказок.
Чтобы использовать AI Assistant как дополнительную функцию ReSharper C++, вам потребуется подписка JetBrains AI Service.
В 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++20. Используя __has_cpp_attribute(operand)
в условиях препроцессинга, можно проверить, распознает ли компилятор атрибут, на который ссылается операнд. Новая версия ReSharper C++ корректно обрабатывает __has_cpp_attribute
, и это позволило улучшить поддержку аннотаций атрибутов в стандартных библиотеках C++.
Мы добавили поддержку пакета pragma, используемого с ключевым словом __pragma
. Синтаксис __pragma (pack)
иногда используется в определениях макросов, поскольку там нельзя использовать директив #pragma
. В подобных случаях ReSharper C++ теперь правильно вычисляет размер упакованных структур, и вы можете быть уверены в результатах анализа кода.
В ReSharper C++ добавлена поддержка некоторых функций C:
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 тоже много нового.
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 тоже много нового. Например, там появился предиктивный отладчик, который предвидит все возможные состояния, возникающие при выполнении программы, не прибегая к ее реальному выполнению.