Возможности ReSharper C++

ReSharper C++ делает программирование на C++ в Visual Studio намного быстрее и удобнее. Расширение предоставляет анализ кода на лету, быстрые исправления, широкие возможности поиска и навигации, интеллектуальное автодополнение кода, безопасные рефакторинги, различные способы генерации кода и другие функции, которые помогают работать продуктивнее.

Анализ кода

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

Быстрые исправления

Более 40 быстрых исправлений позволяют мгновенно исправить многие обнаруженные проблемы. Если слева от вашего кода появился значок лампочки, нажмите Alt+Enter, чтобы применить предложенное быстрое исправление.

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

Генерация кода из использований в ReSharper C++

Действие Create from usage

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

Команда Find Code Issues

Команда Find Code Issues

Вы можете выбрать область (файл, проект или все решение) для которой ReSharper C++ отобразит все обнаруженные проблемы с кодом в специальном окне инструментов.

Команда Find Code Issues работает в фоновом режиме: вы можете продолжать редактирование и пользоваться навигацией, а ReSharper C++ будет анализировать код и выносить обнаруженные проблемы в окно Inspection Results.

В этом окне собранные результаты можно группировать по различным категориям и находить конкретные типы проблем. Отчеты с результатами поиска можно сохранять и загружать.

Анализ кода из командной строки

Анализ кода из командной строки

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

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

Настройки Clang-Tidy

Clang-Tidy

ReSharper C++ интегрирован с Clang-Tidy — мощным инструментом анализа кода, основанным на компиляторе Clang. Эта интеграция позволяет использовать проверки и быстрые исправления Clang-Tidy.

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

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

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

Вы можете откорректировать стиль синтаксиса на странице Code Editing | C++ | Syntax Style. Выбранные значения будут использованы как при генерации кода, так и при проверках стиля кода.

Быстрое исправление

ReSharper C++ подсветит любые отклонения от стиля, а чтобы поправить их, предложит вам быстрые исправления. Быстрые исправления стиля синтаксиса можно применить в определенной области видимости, в том числе в локальной (например, в теле функции или в определении класса).

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

Чтобы применить выбранный стиль синтаксиса, вы можете использовать очистку кода (Code Cleanup) либо специальное действие Apply Syntax Style, которое исправит проблемы на выделенном участке, в файле либо в наборе файлов — в зависимости от контекста.

Рефакторинги

ReSharper C++ позволяет использовать несколько привычных рефакторингов, таких как Rename, Extract Method и Change Signature. Кроме того, вам доступны десятки контекстных действий — локальных преобразований кода, вызываемых простым сочетанием клавиш.

Рефакторинг Rename в ReSharper C++

Rename

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

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

Помимо непосредственного переименования символов, к которым применятся рефакторинг Rename, ReSharper C++ обновляет связанные файлы (как исходные, так и заголовочные) и соответствующий текст в комментариях и документации, а также использование символа в директивах #include.

Рефакторинг Extract Method в ReSharper C++

Extract Method

Рефакторинг Extract Method помогает создать новый метод на основе выбранного фрагмента кода. ReSharper анализирует выделенный блок кода и находит переменные, которые могут быть преобразованы в параметры метода или представить его возвращаемое значение.

Рефакторинг Change Signature для C++

Change Signature

Рефакторинг Change Signature позволяет применить одно или несколько изменений к сигнатуре функции. При этом все использования, реализации и переопределения функции будут обновлены соответствующим образом.

Рефакторинг Inline Variable для C++

Introduce Variable и Inline Variable

Рефакторинг Introduce Variable позволяет создать новую локальную переменную на основе выбранного выражения, инициализировать ее выражением и, наконец, заменить все вхождения выражения в коде ссылками на введенную переменную.

И наоборот, рефакторинг Inline Variable заменяет все вхождения данной переменной или локальной константы на ее инициализатор.

Рефакторинг Introduce Field в ReSharper C++

Introduce Field

Рефакторинг Introduce Field помогает создать новое поле на основе выбранного выражения, назначить исходное выражение полю в его собственном инициализаторе или в конструкторе и заменить вхождения.

Введение псевдонима пространства имен

Рефакторинг Introduce Namespace Alias помогает задавать сокращенные имена для пространств имен с глубокой вложенностью.

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

Рефакторинги Introduce typedef и Inline typedef в ReSharper C++

Введение и подстановка typedef

Рефакторинг Introduce typedef позволяет быстро создать typedef для выбранного типа данных и заменить этот тип данных и все его вхождения только что созданным определением типа.

Рефакторинг Inline typedef делает обратное: заменяет существующий typedef фактическим типом данных.

Контекстные действия

Помимо рефакторингов в ReSharper C++ предусмотрены контекстные действия — локальные преобразования кода, которые помогают переключаться между альтернативными вариантами синтаксиса. Как и быстрые исправления, они вызываются нажатием Alt+Enter.

Например, вы можете быстро заменить auto на явный тип или заменить тип на auto. Другие контекстные действия помогают объединять вложенные операторы if, генерировать пропущенные операторы case для оператора switch при перечислении, подставлять вызов макроса или <0>typedef и т.д.

Помощь при написании кода

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

Автоподсветка точек выхода

Подсветка синтаксиса и структуры

ReSharper C++ распознает файлы *.c, *.cc, *.cxx, *.cpp, *.h и *.hpp и подсвечивает исходный код в этих файлах в соответствии с цветовой схемой, которую в любой момент можно изменить.

Кроме того, ReSharper C++ подсвечивает парные элементы, когда курсор помещен на один из них: парные разделители, макросы или спецификатор формата и соответствующий аргумент в вызове функции printf.

Когда вы помещаете курсор в одну из точек выхода из функции, цикла или оператора switch (return, throw, break и т. д.), ReSharper C++ сразу подсвечивает все другие выходы из цикла или функции.

Автодополнение для символов C++, не включенных в текущий файл

Автодополнение

При написании кода в файлах C++ вы можете использовать автодополнение, которое предоставляет не только варианты для подстановки, но и варианты генерации кода.

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

Просмотр документации

Во всплывающем окне Quick Documentation отображается документация на основе документирующих блоков Doxygen, так что вам не нужно переходить к определению символа: просто нажмите Ctrl+Shift+F1, если используете стандартную схему клавиатуры.

Если документация Doxygen отсутствует для определенного символа, Quick Documentation покажет его сигнатуру.

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

XML-комментарии в стиле C# иногда используются для символов C++. ReSharper C++ корректно отображает их в окне Quick Documentation и во всплывающих подсказках.

C++/CLI

Поддержка C++/CLI

C++/CLI — это набор расширений для языка C++, разработанных Microsoft для облегчения взаимодействия между управляемым и нативным кодом. Благодаря обширной поддержке как управляемых языков, так и C++, ReSharper не может не предложить помощь в написании кода и на C++/CLI.

В C++/CLI-коде доступны те же рефакторинги и intention-действия, что и в коде на чистом C++. Работает навигация между мирами C# и C++/CLI.

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

Меню навигации в ReSharper C++

Контекстная навигация

For all symbols that have separate declarations and definitions, ReSharper C++ displays the Navigate to declaration/definition icon on the left (Navigate to declaration/definition icon in ReSharper C++). Нажмите на значок или используйте сочетание клавиш Ctrl+B, чтобы быстро переключаться между объявлением и определением.

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

Контекстно-независимая навигация в ReSharper C++

Действия Go to

ReSharper C ++ предлагает набор контекстно-независимых команд навигации, включая Go to File (переход к файлу), Go to Symbol (переход к символу), Go to File Member (переход к члену файла) и Go to Everything (переход к чему угодно).

Все эти команды поддерживают поиск с использованием lowerCamelCase и фильтрацию по пути. Например, ввод fc movie во всплывающем окне Go to Everything возвращает список файлов и членов файла, которые содержат строку movie в имени и принадлежат либо проекту FollowerC, либо пространству имен FollowerConstants (они оба соответствуют поисковому запросу fc).

Иерархические представления

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

Кроме того, в ReSharper C++ есть специальное иерархическое представление для визуализации зависимостей заголовочных файлов, подключенных через директиву #include.

Поиск использований символа с ReSharper C++

Поиск использований

Действие Find Usages поможет найти все использования определенного символа в вашем решении.

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

Структурный вид файла C++

Просмотр структуры файла

ReSharper C++ позволяет просматривать структуру текущего документа в окне File Structure — это значительно упрощает навигацию по большим файлам.

При переключении на другую вкладку редактора в окне отображается структура соответствующего файла.

Окно управления объектами To-do в ReSharper C++

Окно управления объектами To-do

В окне To-do Explorer можно просматривать, группировать и фильтровать комментарии, которые содержат один из трех шаблонов To-do (Bug, Todo и Not Implemented) или любые пользовательские шаблоны, которые вы можете создать самостоятельно.

Если вы используете лицензию ReSharper Ultimate и ваше решение написано на нескольких языках, в окне To-do Explorer будут собраны объекты To-do из кода на всех поддерживаемых языках: C#, VB.NET, C++, JavaScript, XAML, HTML и т. д.

Генерация кода

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

Всплывающее окно для генерации кода в ReSharper C++

Генерация стандартного кода

ReSharper C++ позволяет быстро переопределить член базового класса или добавить отсутствующий член, оператор равенства или сравнения, создать определение на основе существующего объявления, конструктор, функцию hash или swap.

Для вызова меню генерации и просмотра доступных вариантов просто нажмите Alt+Ins.

Шаблоны обертывания в ReSharper C++

Шаблоны кода

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

Вы также можете использовать и создавать шаблоны файлов. Нажмите Ctrl+Alt+Ins, чтобы быстро добавить класс в проект, над которым вы работаете.

Помощь в соблюдении стиля кода

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

Помощь в соблюдении стиля кода в ReSharper C++

Форматирование кода

ReSharper C++ позволяет настраивать правила форматирования кода отдельно для конкретного решения.

Вам не придется копаться во всех доступных параметрах, если нужно изменить форматирование определенного фрагмента кода: выделив блок, вы сможете поменять только те настройки, которые применимы к этому блоку.

Настройка стиля инициализатора указателя по умолчанию

Настройки стиля кода

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

ReSharper C++ позволяет вам выбирать и другие особенности стиля кода, которые предпочитает ваша команда, такие как порядок модификаторов и значение инициализаторов указателей. Например, вы можете указать 0, nullptr или NULL в качестве предпочтительного инициализатора, и ReSharper C++ будет учитывать ваш выбор при генерации инициализаторов.

В меню ReSharper Options | Code Editing | C++ | Naming Style вы можете выбрать одну из стандартных схем именования C++: STL, Google, LLVM, CamelCase или Microsoft.

Обнаружение стиля кода

Обнаружение настроек форматирования

Порой гораздо проще настроить параметры форматирования, просто определив их по существующему коду. Выберите в меню ReSharper | Edit | Detect formatting settings, и ReSharper обнаружит настройки форматирования, используемые в вашем коде. Вы сможете просмотреть обнаруженные значения в специальном окне и применить их к настройкам ReSharper на вашем компьютере. Их также можно сохранить на уровне настроек совместного использования, чтобы у ваших коллег была такая же конфигурация форматирования при открытии текущего решения.

Подробнее

Юнит-тестирование

Интегрированный в Visual Studio инструмент запуска тестов поддерживает фреймворки Google Test, Boost.Test, Catch и Doctest.

Инструмент запуска юнит-тестов

ReSharper C++ включает в себя инструмент запуска юнит-тестов в Visual Studio, который поддерживает фреймворки Google Test, Boost.Test, Catch и Doctest.

Вы можете запускать и отлаживать юнит-тесты, а также добавлять тесты в сессии прямо из текстового редактора через контекстное меню, вызываемое нажатием Alt+Enter.

В окнах Unit Test Explorer и Unit Test Sessions можно просматривать, группировать, фильтровать и запускать юнит-тесты, а также создавать сессии тестирования и управлять ими.

Unreal Engine

Если вы разрабатываете игры на платформе Unreal Engine, воспользуйтесь специальной поддержкой Unreal Engine в ReSharper C++.

Правила именования UE

Правила именования UE

ReSharper C++ учитывает соглашение об именах UE во всех командах, в том числе в рефакторингах переименования и введения переменной, при генерации кода геттеров и сеттеров и во многих других действиях. ReSharper C++ следит за правильностью использования имен по всей кодовой базе. Любые несоответствия правилам именования UE подсвечиваются в редакторе благодаря специальным инспекциям Inconsistent UE naming.

Подробнее

Анализ кода для UE

Анализ кода для UE

Для кода на основе UE доступно несколько проверок в анализаторе кода, в частности для обнаружения отсутствующих или неправильно установленных макросов рефлексии UE:

  • Объявление UCLASS должно публично наследовать UObject или класс, производный от него.
  • Класс, помеченный UCLASS, должен наследовать только один класс, производный от UObject, или UObject напрямую.
  • UCLASS должен быть классом / USTRUCT должен быть структурой.
  • UInterface должен быть пустым.
  • Отсутствует вызов макроса UCLASS / UINTERFACE / USTRUCT в объявлении класса/интерфейса/структуры UE.
  • Классы UE не могут быть объявлены внутри другого класса.
  • Вызов макроса UPROPERTY / UFUNCTION перед объявлением не имеет никакого эффекта.
  • Объекты, хранящиеся в члене, не помеченном как uproperty, можно очищать в любое время.
UnrealHeaderTool

UnrealHeaderTool

ReSharper C++ обеспечивает бесшовную интеграцию с UnrealHeaderTool, благодаря чему все больше проблем с метаданными классов Unreal Engine можно выявлять непосредственно в редакторе. Когда вы работаете с проектом Unreal Engine, ReSharper C++ автоматически запустит UnrealHeaderTool для файла, который вы редактируете, и отобразит ошибки и предупреждения, как и любые другие инспекции. Посмотрите на интеграцию UnrealHeaderTool в действии.

Автодополнение спецификаторов рефлексии UE

Автодополнение спецификаторов рефлексии

Для упрощения работы с макросами рефлексии из Unreal Engine ReSharper C++ предоставляет автодополнение для спецификаторов рефлексии внутри макросов.

Документация для спецификаторов рефлексии UE

Документация для спецификаторов отражения

Во всплывающем окне быстрой документации (Ctrl+Q) отображается встроенная документация для спецификаторов рефлексии UE, когда курсор наведен на спецификатор.

Навигация по удаленным вызовам процедур

Поддержка удаленного вызова процедур UE

ReSharper C++ идентифицирует удаленные вызовы процедур по ключевым словам Client, Server или NetMulticast в операторе объявления UFUNCTION. ReSharper C++ знает, что для таких функций должна быть сгенерирована функция _Implementation, а также функция _Validate, если установлен спецификатор WithValidation. Если отсутствует только одна функция, будет сгенерирована нужная, а если отсутствуют обе — то две.

При переходе к определению ReSharper C++ предложит обе функции (_Validate и _Implementation). Также можно воспользоваться меню, вызываемом Alt+Enter, и выбрать в нем пункт «‎Related UE functions».

Подробнее

Проверки сгенерированных заголовочных файлов UE

Автоимпорт и автогенерированные заголовочные файлы

Если вы используете символ, который недоступен в текущей области, ReSharper C++ выделит его красным и предложит по возможности добавить отсутствующую директиву #include. Если директива #include отсутствует в заголовочном файле, она будет автоматически добавлена перед файлом .generated.h, который должен быть последним в списке включений. В результате специальной инспекции ReSharper C++ подсветит неправильно расположенную директиву #include.

Теперь при использовании рефакторинга Rename в проектах Unreal Engine к соответствующей директиве include *.generated.h и связанным файлам добавляются префиксы A, F, E, T, S и U.

Генерация кода для UE

Генерация кода

Постфиксный шаблон new учитывает специфику создания объектов в UE4. Кроме того, предусмотрены шаблоны для генерации USTRUCT/UCLASS/UENUM/UENUMCLASS.

Файлы USF

Файлы USF

USF-файлы в Unreal Engine основаны на HLSL и содержат кросс-платформенный код шейдера. Такие файлы обычно содержат виртуальных пути, и ReSharper C++ позволяет работать с ними и поддерживает все стандартные действия.

HLSL

SpatialOS GDK

SpatialOS Game Development Kit — это форк Unreal Engine 4, который помогает запускать онлайн-игры и управлять ими в облаке. ReSharper C++ распознает CrossServer, SpatialType, NonSpatialType и другие спецификаторы SpatialOS. Подробнее

HLSL

HLSL

В ReSharper C++ есть начальная поддержка HLSL, высокоуровневого языка для программирования шейдеров. ReSharper C++ подсвечивает HLSL-код в соответствии с выбранной цветовой схемой и показывает подсказки с документацией и информацией о типах. Работает поиск и навигация по структурам, функциям и параметрам в решении, ссылочных файлах и стандартных библиотеках. Кроме того, для HLSL доступно умное дополнение, автоматическая подстановка парных разделителей и другие функции.

HLSL

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

Скачать

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