Rscpp logo

The ReSharper C++ Blog

The Visual Studio Extension for C++ Development

Releases Resharper C++

ReSharper C++ 2021.1: стиль синтаксиса, новые возможности C++ и улучшенная поддержка Unreal Engine

Встречайте наш первый крупный релиз этого года! В ReSharper C++ 2021.1 мы поддержали несколько новых языковых возможностей C++17 и C++20, добавили новые инспекции и улучшили поддержку Unreal Engine. Новый набор настроек стиля синтаксиса позволит ReSharper C++ еще точнее соблюдать стиль кода. Специальные быстрые исправления и контекстные действия помогут вам придерживаться единства стиля и с легкостью обновлять код.

ReSharper C++ 2021.1

Обновиться или попробовать бесплатную 30-дневную версию можно уже сегодня! Переходите на наш сайт или воспользуйтесь приложением Toolbox App, с помощью которого можно скачать все наши инструменты для Visual Studio.

СКАЧАТЬ RESHARPER C++ 2021.1

Вот основные нововведения этого релиза:

  • Поддержка C++: классы в параметрах non-type в шаблонах, правила выведения аргументов шаблонов классов (C++20), noexcept в составе типа функции и автодополнение для корутин.
  • Unreal Engine: базовая поддержка Unreal Engine 5, постфиксный шаблон для Cast и поддержка макроса рефлексии RIGVM_METHOD.
  • Стиль синтаксиса: новые настройки стиля кода для различных аспектов синтаксиса C++ с соответствующими инспекциями, быстрыми исправлениями и контекстными действиями.
  • Очистка кода: новые задачи на очистку кода, контекстное действие Cleanup selection и улучшения производительности.
  • Анализ кода: инспекции и быстрые исправления для избыточного приведения типов, вывод аргументов шаблонов и перенос переменных во внутреннюю область видимости.
  • Другие изменения: список исключений для подсказок по агрегированной инициализации, улучшения поддержки различных целевых платформ.

Поддержка языка C++

До C++20 у параметров non-type в шаблонах мог быть только скалярный тип без плавающей запятой. В ReSharper C++ 2021.1 мы добавили классы для параметров non-type в шаблонах. Эта возможность появилась в C++20 и позволяет вам использовать свои собственные классы при указании типов параметров шаблона, если эти классы соответствуют определенным требованиям.

Классы в параметрах non-type в шаблонах

Также мы поддержали правила C++20 CTAD — вывод аргументов шаблонов классов стал консистентным и теперь работает для агрегированных шаблонов, псевдонимов типов и унаследованных конструкторов.

Правила C++20 CTAD

Начиная с C++17 спецификация noexcept считается частью типа функции. Теперь ReSharper C++ полностью поддерживает новую семантику спецификаций исключений.

noexcept в составе типа функции

Поддержка корутин появилась в ReSharper C++ еще в обновлении 2018.2, однако синтаксис корутин C++20 не поддерживался автодополнением. Теперь co_await, co_yield и co_return доступны в шаблонах базового и постфиксного автодополнения.

Постфиксные шаблоны: co_await

Unreal Engine

Мы реализовали базовую поддержку Unreal Engine 5 на основе обратной связи от команды Epic Games. Вы сможете попробовать новые возможности, как только выйдет Unreal Engine 5.

Приведение типов Cast, специфичное для Unreal Engine и позволяющее выполнять типобезопасное динамическое приведение типов, теперь предлагается в качестве постфиксного шаблона при автодополнении кода.

Постфиксный шаблон для Cast

В версии 2021.1 мы также поддержали специфичный для Unreal Engine макрос рефлексии RIGVM_METHOD.

Макрос рефлексии RIGVM_METHOD

Стиль синтаксиса

Стиль кода подразумевает определенность в том, какие элементы использовать, когда синтаксис языка предлагает несколько равноценных вариантов.
В версии 2021.1 мы ввели набор настроек стиля синтаксиса, позволяющих настроить ReSharper C++ в соответсвии с желаемым стилем кода. С помощью специальных инспекций, быстрых исправлений и контекстных действий вы сможете легко применить выбранный стиль синтаксиса к вашему коду.

Стиль синтаксиса R++

Какие возвращаемые типы использовать — обычные или trailing? Что выбрать — операторы typedef или псевдонимы типов? «East const» или «West const»? Методы virtual или override (а может быть оба)? Вы можете откорректировать эти и другие настройки на странице Options | Code Editing | C++ | Syntax Style. Для каждого из случаев предусмотрены гранулярные настройки. К примеру, есть отдельные настройки, позволяющие включить использование auto для числовых и нечисловых типов. Вы можете выбрать Never — если предпочитаете явные типы, Always — если соблюдаете стиль Almost Always Auto, When type is evident — если хотите, чтобы спецификатор auto использовался, только когда выводимый тип очевиден из выражения инициализации.

Стиль синтаксиса: панель предварительного просмотра

Если в качестве уровня серьезности ошибок (severity) стиля синтаксиса выбрано предложение, подсказка или предупреждение, ReSharper C++ подсветит любые нарушения стиля, а чтобы исправить их — предложит вам быстрые исправления. Контекстное меню для инспекций позволит вам легко поменять настройки инспекции (вам не понадобится открывать окно настроек).

Настройки стиля синтаксиса в контекстном меню

Не возникало ли у вас желания в целях консистентности использовать возвращаемые типы trailing или перейти с традиционного «West const» на «East const» — не тратя при этом время на обновление кодовой базы? Быстрые исправления стиля синтаксиса можно применить в желаемой области видимости: во всем проекте/решении либо в локальной области видимости (например, в теле функции или определении класса).

Стиль синтаксиса: организуйте cv-квалификаторы в определенной области видимости

Если вы включите все проверки стиля синтаксиса сразу, то скорей всего устанете от количества уведомлений. Поэтому мы сделали так, что, даже при отключенных проверках, вам всегда будут доступны контекстные действия.

Стиль синтаксиса: сортируйте инициализаторы по порядку инициализации

Чтобы исправить все нарушения стиля синтаксиса в определенной области видимости, используйте очистку кода либо действие ReSharper | Edit | Apply Syntax Style. В зависимости от текущего контекста это действие исправит проблемы стиля синтаксиса в выбранной области, в текущем файле либо во всех файлах, выделенных в Solution Explorer.

Применяйте стиль синтаксиса

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

Code Cleanup

Появились новые задачи на очистку кода. Во-первых, для всех настроек стиля синтаксиса теперь есть соответствующая задача на очистку кода (если вы хотите отключить ее, вам нужно настроить собственный профиль очистки кода). Во-вторых, теперь есть задачи, которые при очистке кода выполнят новые инспекции «Redundant cast» и «Template arguments can be deduced».

Инструмент очистки кода Code Cleanup

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

Стиль синтаксиса: очистка для выделенного фрагмента кода

Помимо этого, мы значительно улучшили производительность очистки кода. Теперь она может выполняться быстрее на реальных кодовых базах за счет сокращения времени на анализ кода и уменьшения количества ненужных операций.

Анализ кода

Если вы объявили переменную до начала области видимости, в которой она используется, ReSharper C++ сообщит вам об этом. IDE предложит вам применить быстрое исправление, чтобы переместить переменную и ограничить ее область видимости.

Перенос переменной во внутреннюю область видимости

Другая новая инспекция находит избыточные приведения типов, которые можно спокойно убрать, не изменив семантику кода.

Избыточное приведение типов

ReSharper C++ 2021.1 подсвечивает избыточные аргументы шаблонов, которые можно вычислить при помощи правил выведения аргументов шаблонов классов.

Выведение аргументов шаблонов классов

Также мы добавили быстрые исправления для ошибок приведения типов. ReSharper C++ предложит вариант приведения типов, подходящий в данном контексте (c_str(), to_string(), get(), value(), data(), operator *, operator &, dynamic_cast<> or static_cast<> и т. д.).

Быстрые исправления для ошибок приведения типов

Другие изменения

В ReSharper C++ 2020.3 впервые появился режим Push-to-Hint. По умолчанию он скрывает подсказки, чтобы сэкономить пространство редактора; при этом вы всегда можете просмотреть подсказку, нажав на нее. Теперь вы также можете настроить режим просмотра для различных типов подсказок (используйте контекстное меню подсказок либо Alt+Enter).

Измените режим видимости

Также мы добавили стоп-лист шаблонов классов, для которых IDE будет скрывать подсказки по агрегированной инициализации. Список исключений, а также некоторые другие настройки можно просмотреть на странице Environment | Inlay Hints | C++ | Aggregate Initialization. Чтобы быстро добавить имя класса в список, воспользуйтесь контекстным меню:

Стоп-лист для подсказок по агрегированной инициализации

В ReSharper C++ 2021.1 мы также улучшили поддержку различных целевых платформ. Теперь IDE поддерживает встроенный ассемблер компилятора GCC, а также некоторые новые расширения языка, в том числе __has_feature и __builtin_const_p. ReSharper C++ также предопределяет правильный макрос платформы на ARM и ARM64 MSVC и распознает инструменты на основе Clang, используемые в Microsoft Flight Simulator SDK.

Мы рассказали вам о главных нововведениях в ReSharper C++ 2021.1. Полный список улучшений и исправлений смотрите в нашем трекере, в котором вы всегда можете создать для нас задачу или проголосовать за существующую.

Также есть изменения, пришедшие из ReSharper. Рекомендуем ознакомиться с ними подробнее на нашем сайте (тем более что лицензия покрывает и ReSharper, и ReSharper C++). К примеру, для навигации теперь можно пользоваться новым действием Navigate to Windows Explorer, а для создания ссылок на GitHub-источники — Copy FQN.

Попробуйте ReSharper C++ 2021.1 и расскажите нам о своих впечатлениях!

СКАЧАТЬ RESHARPER C++ 2021.1

Ваша команда ReSharper C++
The Drive to Develop

Discover more