ReSharper C++
The Visual Studio Extension for C++ Development
Публикации и ответы на комментарии в блогах JetBrains не выходят на русском языке с 2022 года.
Приносим извинения за неудобства.
ReSharper C++ 2020.3: UnrealHeaderTool, сравнения C++20, встроенные подсказки Push-to-Hint
Встречайте ReSharper C++ 2020.3 — финальный релиз этого года!
Среди новых возможностей ReSharper: интеграция с UnrealHeaderTool, новые возможности C++20, навигация между совпадающими директивами препроцессора, нечеткий текстовый поиск, режим Push-to-Hint для встроенных подсказок и многое другое. Мы думаем, вы оцените!
Начните пользоваться бесплатной 30-дневной пробной версией уже сегодня либо обновите вашу действующую подписку на ReSharper, ReSharper C++, dotUltimate или All Products Pack. Чтобы загрузить новую сборку, перейдите на наш сайт или воспользуйтесь приложением Toolbox App.
Вот основные нововведения этого релиза:
- Unreal Engine: интеграция с UnrealHeaderTool, улучшенная проектная модель, новые инспекции на основе анализа потока управления в файлах шейдеров (HLSL).
- Поддержка C++20: правила сравнения C++20, быстрые исправления для библиотеки Ranges и обновленные проверки соответствия стандарту.
- Помощь при написании кода и автодополнение: улучшенное автодополнение для импортов и контекстные действия для инвертирования тернарных выражений.
- Навигация и поиск: переход к совпадающим препроцессорным директивам, нечеткий текстовый поиск, действия Peek Implementation и Peek Base Symbols.
- Анализ кода: новые инспекции для обновления кода и Clang-Tidy 11.
- Push-to-Hint: новый режим просмотра встроенных подсказок.
-
Другие изменения: обновление поддержки Catch2 и новые переключатели компилятора
/external:*
.
Unreal Engine
ReSharper C++ 2020.3 обеспечивает интеграцию с UnrealHeaderTool. Инструмент запускается в фоновом режиме (в виде отдельного процесса) и начинает проверять файлы, которые вы редактируете. Таким образом вы будете знать об ошибках, которые обычно обнаруживаются лишь во время компиляции. Результаты анализа кода, как и любых других инспекций, отображаются прямо в редакторе:
Неплохая экономия времени, неправда ли?
UnrealHeaderTool умеет находить самые разные проблемы в коде. Это может быть применение мета-тегов без необходимых спецификаторов рефлексии, использование макросов GENERATED_BODY
в закрытой области видимости, Blueprints с невалидными сущностями и др. Подробнее об этой интеграции и возможностях настройки читайте в нашем блоге. Также предлагаем вам посмотреть короткую демонстрацию работы UnrealHeaderTool:
Чтобы сохранять актуальность вашего проекта, ReSharper C++
теперь отслеживает свойства Unreal Engine в режиме реального времени и пересоздает модель проекта, когда вы сохраняете изменения в файле .Build.cs
, .Target.cs
, .uproject
или .uplugin
.
При работе с файлами шейдеров (HLSL) вы теперь можете использовать возможности ReSharper по анализу потока управления, включая предупреждения о недостижимом коде, неинициализированных переменных, избыточных ветках условных операторов, избыточных переходах потока управления и пр. Мы также добавили поддержку модификаторов ввода, специфичных для HLSL, которые указывают, служит ли аргумент функции вводом и/или выводом.
Мы добавили несколько обновлений для более строгого соответствия стандарту оформления кода Unreal Engine. К примеру, теперь настройки проектов Unreal Engine по умолчанию задают табуляцию четырьмя пробелами (если ваш файл отформатирован по-другому, ReSharper C++ автоматически определит это и не будет заставлять вас использовать табуляцию вместо пробелов). Также теперь вы можете использовать MoveTemp
(эквивалент std::move
в Unreal Engine) для приведения к типу rvalue-ссылки.
Теперь вы будете знать, когда требуется повторно создать файлы проекта. ReSharper C++ предупредит вас, если не сможет найти файл с версией Unreal Engine или если используемая версия не соответствует версии, на которую ссылается ваш игровой проект.
Вы также можете опробовать все эти функции в превью-версии нашей новой среды разработки Rider для Unreal Engine. Он работает на основе ReSharper C++ и в данный момент доступен бесплатно. Регистрируйтесь и приступайте к созданию игр!
Поддержка стандарта C++20
ReSharper C++ 2020.3 полностью поддерживает правила сравнения C++20. Это обновление включает существенные изменения в обработке сравнений: язык может переписывать выражения сравнения или менять порядок аргументов на обратный.
Подсказки укажут вам, как можно переписать выражение, объяснят, почему стандартный оператор сравнения был неявно удален из класса и т. д. А если не получается разрешить оператор сравнения, вам будут предложены перегруженные варианты операторов.
Также появились быстрые исправления для добавления директив #include <compare>
и для создания операторов сравнения в виде функций-членов или в виде дружественных функций. Подробнее об изменениях правил сравнения в C++20 и о поддержке их в ReSharper C++ читайте в нашем блоге.
Мы создали две новые инспекции с быстрыми исправлениями, позволяющими вам использовать новую библиотеку Ranges:
-
Можно использовать алгоритм, работающий с диапазонами.
-
Можно использовать
std::views::keys/values
.
Для улучшения поддержки C++20 мы также учли обновления в Visual Studio 16.8, касающиеся обеспечения соответствия стандарту. В частности, ReSharper C++ теперь поддерживает как стандартный, так и расширенный режим корутин C++, а также новый заголовок <coroutine>
.
Помощь при написании кода и автодополнение
Благодаря Import Symbol Completion вы можете импортировать классы из заголовочных файлов, не включенных в текущий файл. И мы добавили несколько полезных улучшений:
- Варианты автодополнения теперь включают подходящие члены неполных классов.
-
Классам теперь можно добавлять уточняющей спецификаторы типов.
Новое контекстное действие помогает инвертировать выражения тернарных операторов:
Вы можете использовать быстрое исправление "Join declaration and assignment" в случае, если перед чтением локальной переменной ее значение переустанавливается в рамках всех имеющихся путей.
Мы усовершенствовали автодополнение аргументов библиотечных функций, принимающих макроконстанты. Применимые к текущему аргументу библиотечные макроконстанты теперь занимают приоритетные позиции в списке автодополнения. Данный эвристический алгоритм работает с функциями из стандартной библиотеки, а также WinAPI и OpenGL.
Навигация и поиск
При навигации по коду чаще всего используется действие Go to Declaration. Теперь его также можно использовать для перехода между соответствующими директивами препроцессора:
-
Переходите между
#define
и#undef
макроса в рамках одного файла.
-
Переходите между директивами в рамках блока директив препроцессора.
Теперь вы можете использовать действие Go to Declaration для ключевого слова override. Это позволит вам перейти к базовой функции, не запуская для имени функции действие Base Symbols:
Помимо обычного поиска операция Find Text теперь выполняет нечеткий поиск, что позволяет находить текст с опечатками и пропущенными словами. Эта функциональность может быть очень полезна, если вы ищете определенную форматную строку, используемую в качестве аргумента функции форматирования текста, например такой, как printf
или std::format
.
Теперь для кода C++ поддерживаются действия Peek Implementations и Peek Base Symbols — они позволят вам просматривать и редактировать код во всплывающем окне, не покидая того кода, над которым вы работаете:
-
Чтобы просмотреть реализации, нажмите
Ctrl+Alt+Q
или используйте меню ReSharper | Navigate | Peek.
-
Чтобы просмотреть базовые символы, нажмите
Shift+Alt+Q
или используйте меню ReSharper | Navigate | Peek.
Для улучшения читаемости во вложенных пространствах имен в окне File Structure теперь используется синтаксис C++17, даже если вы еще не внедрили новый синтаксис в свою кодовую базу:
Мы продолжаем улучшать поддержку C++/CLI. К примеру, действие Go to Derived Symbols теперь работает с функциями get
/set
внутри свойств C++/CLI, а также с функциями add
/remove
внутри событий C++/CLI:
Анализ кода
Помимо упомянутых инспекций для C++20 и анализа потока управления в файлах шейдеров мы также создали новую инспекцию, позволяющую (там, где это возможно) заменять стандартные алгоритмы, принимающие пару итераторов, на эквивалентные алгоритмы, которые принимают итератор и счетчик:
Встроенный исполняемый файл Clang-Tidy был обновлен до версии Clang 11, добавляющей новые проверки и диагностические процедуры компилятора из свежей версии LLVM.
Push-to-Hint
ReSharper C++ предлагает множество различных встроенных подсказок. Все они полезны в определенных сценариях, однако порой их очень много. Чтобы решить эту проблему, мы создали для встроенных подсказок специальный механизм под названием "Push-to-Hint". В режиме Push-to-Hint подсказки отображаются только при нажатии и удерживании Ctrl
либо при двойном нажатии Ctrl
:
Вы можете настроить свой режим видимости для каждого типа встроенных подсказок для C++. Чтобы быстро поменять режим видимости определенной подсказки, воспользуйтесь контекстным меню или откройте раздел Environment | Inlay Hints | C++, чтобы просмотреть все доступные настройки отображения подсказок.
Другие изменения
Мы добавили поддержку макросов TEMPLATE_TEST_CASE
и TEMPLATE_PRODUCT_TEST_CASE
(были недавно обновлены в Catch 2.8), а также появившихся недавно макросов TEMPLATE_TEST_CASE_SIG
и TEMPLATE_PRODUCT_TEST_CASE_SIG
:
ReSharper C++ теперь сможет подхватывать и использовать пути include к сторонним библиотекам, указанные с помощью переключателей компилятора /external:*
.
Ну и еще одно полезное обновление: нам удалось повысить производительность операций Find Usages и Rename, используемых в отношении членов закрытых классов. Если у содержащего класса нет дружественных классов, ReSharper C++ будет искать использования члена класса только в тех файлах, которые содержат определение класса и определения функций-членов этого класса. Для огромных кодовых баз эта оптимизация ускоряет Find Usages в 50, а то и в 100 раз (например, при поиске полей Data и Length класса LLVM StringRef).
Полный список новых возможностей и исправлений, вошедших в этот релиз, насчитывает более 190 задач и доступен в нашем баг-трекере. Вы можете оставить запрос свой о добавлении новой функциональности или проголосовать за любой существующий. Мы всегда рады вашей обратной связи!
В новой версии вас также ждет много изменений, пришедших с платформы ReSharper — подробнее читайте здесь.
Попробуйте ReSharper C++ 2020.3 и расскажите нам о своих впечатлениях!
Ваша команда ReSharper C++
The Drive to Develop