ReSharper C++
The Visual Studio Extension for C++ Development
Публикации и ответы на комментарии в блогах JetBrains не выходят на русском языке с 2022 года.
Приносим извинения за неудобства.
ReSharper C++ 2021.2: подсказки при преобразовании типов, инспекции для неизменяемых данных, рефакторинг Inline Function
ReSharper C++ 2021.2 теперь доступен для скачивания! В этом релизе мы добавили новые встроенные подсказки для скрытых преобразований типов, рефакторинг Inline Function и расширенную поддержку Unreal Engine. Также мы пополнили список инспекций для модернизации кода в соответствии с современными стандартами C++ и доработали анализ неизменяемых данных, что позволит сделать код более правильным и удобным для чтения.
Обновиться или попробовать бесплатную 30-дневную версию можно уже сегодня. Переходите на наш сайт или воспользуйтесь приложением Toolbox App, с помощью которого можно скачать все наши инструменты для Visual Studio.
Ниже мы расскажем подробнее обо всех новых возможностях и улучшениях в 2021.2:
- Подсказки при преобразовании типов
- Рефакторинг Inline Function
- Инспекции для неизменяемых данных
- Генерация кода
- Unreal Engine
- Инспекции для обновления кода
- Помощь при написании кода
Подсказки при преобразовании типов
В ReSharper C++ 2021.2 появились новые встроенные подсказки, указывающие на неявное преобразование типов. В C++ преобразование данных из одного типа в другой происходит автоматически. С одной стороны, такое неявное преобразование удобно тем, что не требует добавления новых строк в коде, с другой — может приводить к снижению производительности или, в случае преобразования числовых типов, точности.
ReSharper C++ показывает подсказки для разных видов преобразований типов, включая копирование объектов, инициализацию объектов при помощи преобразующих конструкторов или агрегатов, а также использование операторов преобразования.
Также есть подсказки для стандартных преобразований встроенных типов. В частности, к ним относятся преобразования числовых типов, потенциально ведущие к потере точности или свойства знаковости.
По умолчанию подсказки для стандартных преобразований выключены. Чтобы их включить, перейдите в настройки ReSharper Environment | Inlay Hints | C++ | Type Conversion Hints.
Кроме того, подсказки для преобразования определенного класса можно спрятать, добавив их в список исключений. Также можно выбрать отображение подсказок в виде специальной иконки или кода. Для вызова этих настроек через контекстное меню воспользуйтесь горячими клавишами Alt+Enter или правой кнопкой мыши.
Подробнее о подсказках при преобразовании типов можно узнать из этой статьи в нашем блоге.
Рефакторинг Inline Function
Новый рефакторинг Inline Function позволяет быстро заменить вызов функции телом этой функции. Чтобы запустить его, поместите каретку на вызов функции, откройте меню Refactor This и выберите Inline Function. Также вы можете запустить рефакторинг из главного меню: ReSharper | Refactor | Inline.
ReSharper C++ сам выполнит все необходимые преобразования, разрешит конфликты имен и переформатирует полученный код. Если же метод лучше не встраивать, появится всплывающее сообщение с кратким объяснением.
Инспекции для неизменяемых данных
В ReSharper C++ 2021.2 мы улучшили анализ неизменяемых данных и добавили две новые инспекции, покрывающие оставшиеся правила раздела Constants and immutability в «C++ Core Guidelines».
- Первая инспекция анализирует на предмет неизменяемости параметры функций, представляющие собой ссылку или указатель. ReSharper C++ сообщит вам о возможности передать указатель или ссылку на
const
, которая гарантирует, что функция не изменит соответствующий аргумент. - Вторая инспекция предложит вам отметить спецификатором
constexpr
переменные, которые могут быть вычислены при компиляции. Это позволит повысить производительность кода и качество проверок при компиляции.
Кроме того, мы доработали существующие инспекции для локальных переменных и параметров, а также анализ потока управления для стандартной библиотеки — теперь предложения объявить константу будут появляться в большем числе случаев.
Подробнее обо всех, и новых, и старых, инспекциях для неизменяемых данных в ReSharper C++ читайте в этой статье нашего блога.
Генерация кода
Какие настройки по умолчанию вы хотели бы использовать при генерации функций? Мы постарались сделать генерацию кода еще более удобной и добавили возможность настраивать способ определения генерируемых функций. Настроить это можно в меню ReSharper Code Editing | C++ | Code Generation.
По умолчанию ReSharper C++ генерирует функции с пустым телом. Теперь, с появлением настройки Default function body, можно указать, должны ли сгенерированные функции кидать std::logic_error
, возвращать значение по умолчанию или включать некомпилируемый код.
При генерации тела переопределяющей функции ReSharper C++ автоматически добавит вызов базовой функции, если выбрана соответствующая настройка.
Также ReSharper C++ умеет создавать стандартные реализации операторов в виде вызова соответствующих операторов.
Новые настройки генерации кода доступны для всех уже существующих возможностей ReSharper, связанных с созданием тела функции, включая процессы Generate и относящиеся к ним контекстные действия.
Unreal Engine
В ReSharper C++ 2021.2 появилась полная поддержка Unreal Engine 5! Используйте раннее превью UE5 и получайте все те же возможности для работы с кодом Unreal Engine, что и в существующих проектах на UE4.
Новые возможности в автодополнении и анализе кода позволят вам более эффективно работать с модулями и плагинами:
- Теперь при вызове автодополнения в файлах .Build.cs и .Target.cs проекта Unreal Engine ReSharper C++ также показывает список доступных модулей и плагинов.
- Новая инспекция подсвечивает места в коде, где нет ссылки на необходимые модули и плагины. Добавить нужный заголовок или новые модули и плагины в файл .uproject или .uplugin можно с помощью соответствующих быстрых исправлений.
Благодаря улучшенной генерации функций ReSharper C++ теперь добавляет в тело переопределяющей функции вызов переопределенной функции, используя стандартный вызов Super
.
Мы оптимизировали производительность и потребление памяти при холодном запуске. Теперь ReSharper C++ индексирует кодовую базу Unreal Engine на 10% быстрее.
Инспекции для обновления кода
ReSharper C++ 2021.2 пополняет список инспекций для обновления кода в соответствии с современными стандартами:
- Использование структурного связывания вместо tie(..): начиная с C++17 не обязательно использовать
std::tie()
илиboost::tie()
для распаковки кортежа или пары — вы можете применить структурное связывание и тем самым упростить код. - Упрощение свойства типа при помощи псевдонима шаблона или переменной шаблона: вы можете сокращать выражения свойств типов C++11, используя псевдонимы шаблона C++14.
- Использование std::size: инспекция предлагает использовать
std::size
в качестве типобезопасного аналога идиомы С для вычисления размера массива. - Использование нулевой инициализации вместо memset: нулевая инициализация делает код более лаконичным и предотвращает ошибки, связанные с
memset
.
Помощь при написании кода
Бывает ли вам трудно понять строковое значение, в котором много специальных символов? С появлением новых контекстных действий любое строковое значение можно преобразовать в необработанный строковый литерал C++11, более удобный для чтения, и наоборот.
Теперь, если вам нужно заглянуть на cppreference.com, чтобы уточнить детали класса или функции стандартной библиотеки, вы можете нажать на Read more во всплывающем окне Quick Documentation (Ctrl+Shift+F1
) — соответствующая страница откроется в вашем браузере.
Благодаря умному удалению отступов теперь не нужно выравнивать их вручную: нажатие клавиши Backspace
, когда курсор находится перед отступом, убирает все лишние символы сразу. Чтобы указать другой способ удаления отступов, перейдите в настройки ReSharper Environment | Editor | Behavior.
Другие изменения
Мы добавили инспекцию, которая предупредит вас, если обнаружит, что вы сравниваете выражение без знака с нулем, — это может грозить бесконечным циклом или недостижимостью кода.
Встроенный Clang-Tidy был обновлен до версии Clang 12 и теперь включает проверки из свежей версии LLVM. Помимо этого мы улучшили производительность Clang-Tidy при работе со сложными файлами, в частности на проектах, использующих C++20.
ReSharper C++ теперь поддерживает два новых переключателя компилятора из Visual Studio 16.10:
- стандартный переключатель
/std:c++20
, - переключатель
/await:strict
для тех, кто хочет использовать корутины из C++20, но пишет на C++14 или C++17.
На этом все. Полный список новых возможностей и исправленных ошибок включает более 180 пунктов. Посмотреть его можно в нашем баг-трекере. Кроме того, есть изменения и с платформы ReSharper. К примеру, инструмент командной строки InspectCode теперь восстанавливает пакеты NuGet и собирает приложение до того, как начать его анализировать. Также смотрите нашу статью Что нового в ReSharper.
Расскажите, что в этом релизе ReSharper C++ порадовало вас больше всего. Попробуйте ReSharper C++ 2021.2 и поделитесь с нами своими впечатлениями — будем рады узнать, что вы думаете.
Ваша команда ReSharper C++
The Drive to Develop
Автор оригинальной статьи: