ReSharper C++ делает программирование на C++ в Visual Studio намного быстрее и удобнее. Расширение предоставляет анализ кода на лету, быстрые исправления, широкие возможности поиска и навигации, интеллектуальное автодополнение кода, безопасные рефакторинги, различные способы генерации кода и другие функции, которые помогают работать продуктивнее.
ReSharper C++ приступает к анализу кода, как только вы открываете проект в редакторе Visual Studio, и продолжает анализировать файлы по мере редактирования, обнаруживая ошибки и возможные проблемы еще до начала компиляции.
Более 40 быстрых исправлений позволяют мгновенно исправить многие обнаруженные проблемы. Если слева от вашего кода появился значок лампочки, нажмите Alt+Enter, чтобы применить предложенное быстрое исправление.
Например, при обнаружении неинициализированной переменной, ее можно тут же инициализировать значением по умолчанию. Другие быстрые исправления позволяют добавить отсутствующие директивы #include
или удалить избыточные квалификаторы в конкретном выражении, в целом файле или даже по всему решению.
Еще одно преимущество быстрых исправлений заключается в том, что вы можете начать использовать классы, методы, переменные, свойства и поля, прежде чем они будут объявлены. ReSharper C++ обнаружит необъявленный символ и предложит создать соответствующее объявление символа из его использования.
Вы можете выбрать область (файл, проект или все решение) для которой ReSharper C++ отобразит все обнаруженные проблемы с кодом в специальном окне инструментов.
Команда Find Code Issues работает в фоновом режиме: вы можете продолжать редактирование и пользоваться навигацией, а ReSharper C++ будет анализировать код и выносить обнаруженные проблемы в окно Inspection Results.
В этом окне собранные результаты можно группировать по различным категориям и находить конкретные типы проблем. Отчеты с результатами поиска можно сохранять и загружать.
С помощью InspectCode, бесплатного инструмента командной строки, вы можете запускать инспекции ReSharper C++, даже не открывая Visual Studio.
Чтобы использовать InspectCode, загрузите и разархивируйте пакет инструментов командной строки и запустите файл InspectCode.exe, указав файл решения в качестве параметра. Подробнее об использовании InspectCode читайте в этой статье.
ReSharper C++ интегрирован с Clang-Tidy — мощным инструментом анализа кода, основанным на компиляторе Clang. Эта интеграция позволяет использовать проверки и быстрые исправления Clang-Tidy.
ReSharper C++ предлагает набор настроек стиля синтаксиса. Пропишите их, и ReSharper будет придерживаться выбранного вами стиля во всей кодовой базе.
Вы можете откорректировать стиль синтаксиса на странице Code Editing | C++ | Syntax Style. Выбранные значения будут использованы как при генерации кода, так и при проверках стиля кода.
ReSharper C++ will highlight style violations and offer you quick-fixes to help eliminate them. Быстрые исправления стиля синтаксиса можно применить в определенной области видимости, в том числе в локальной (например, в теле функции или в определении класса).
Чтобы применить выбранный стиль синтаксиса, вы можете использовать очистку кода (Code Cleanup) либо специальное действие Apply Syntax Style, которое исправит проблемы на выделенном участке, в файле либо в наборе файлов — в зависимости от контекста.
ReSharper C++ позволяет использовать несколько привычных рефакторингов, таких как Rename, Extract Method и Change Signature. Кроме того, вам доступны десятки контекстных действий — локальных преобразований кода, вызываемых простым сочетанием клавиш.
Переименование класса или макроса может вызвать проблемы, если выполняется вручную. Поэтому при вызове рефакторинга Rename, ReSharper C++ производит все необходимые проверки.
ReSharper С++ производит все изменения автоматически либо отображает список конфликтов, которые можно разрешить вручную, чтобы вы могли с уверенностью внести только необходимые изменения.
Помимо непосредственного переименования символов, к которым применятся рефакторинг Rename, ReSharper C++ обновляет связанные файлы (как исходные, так и заголовочные) и соответствующий текст в комментариях и документации, а также использование символа в директивах #include
.
Рефакторинг Extract Method помогает создать новый метод на основе выбранного фрагмента кода. ReSharper анализирует выделенный блок кода и находит переменные, которые могут быть преобразованы в параметры метода или представить его возвращаемое значение.
Рефакторинг Change Signature позволяет применить одно или несколько изменений к сигнатуре функции. При этом все использования, реализации и переопределения функции будут обновлены соответствующим образом.
Рефакторинг Introduce Variable позволяет создать новую локальную переменную на основе выбранного выражения, инициализировать ее выражением и, наконец, заменить все вхождения выражения в коде ссылками на введенную переменную.
И наоборот, рефакторинг Inline Variable заменяет все вхождения данной переменной или локальной константы на ее инициализатор.
Рефакторинг Introduce Field помогает создать новое поле на основе выбранного выражения, назначить исходное выражение полю в его собственном инициализаторе или в конструкторе и заменить вхождения.
Рефакторинг Introduce Namespace Alias помогает задавать сокращенные имена для пространств имен с глубокой вложенностью.
При вызове рефакторинга, ReSharper предлагает определить область, для которой вы хотите ввести псевдоним.
Рефакторинг Introduce typedef позволяет быстро создать typedef
для выбранного типа данных и заменить этот тип данных и все его вхождения только что созданным определением типа.
Рефакторинг Inline typedef делает обратное: заменяет существующий typedef
фактическим типом данных.
Помимо рефакторингов в ReSharper C++ предусмотрены контекстные действия — локальные преобразования кода, которые помогают переключаться между альтернативными вариантами синтаксиса. Как и быстрые исправления, они вызываются нажатием Alt+Enter.
Например, вы можете быстро заменить auto
на явный тип или заменить тип на auto
. Другие контекстные действия помогают объединять вложенные операторы if
, генерировать пропущенные операторы case
для оператора switch
при перечислении, подставлять вызов макроса или <0>typedef0> и т.д.
ReSharper C++ расширяет возможности Visual Studio для подсветки синтаксиса и выделения структурных фрагментов кода, реализует собственное автодополнение и помогает визуализировать доступную документацию для любого символа C++.
ReSharper C++ распознает файлы *.c, *.cc, *.cxx, *.cpp, *.h и *.hpp и подсвечивает исходный код в этих файлах в соответствии с цветовой схемой, которую в любой момент можно изменить.
Кроме того, ReSharper C++ подсвечивает парные элементы, когда курсор помещен на один из них: парные разделители, макросы или спецификатор формата и соответствующий аргумент в вызове функции printf
.
Когда вы помещаете курсор в одну из точек выхода из функции, цикла или оператора switch
(return
, throw
, break
и т. д.), ReSharper 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++, разработанных Microsoft для облегчения взаимодействия между управляемым и нативным кодом. Благодаря обширной поддержке как управляемых языков, так и C++, ReSharper не может не предложить помощь в написании кода и на C++/CLI.
В C++/CLI-коде доступны те же рефакторинги и intention-действия, что и в коде на чистом C++. Работает навигация между мирами C# и C++/CLI.
ReSharper C++ значительно упрощает навигацию по исходному коду. Чтобы найти нужное объявление, член, вызов метода или элемент иерархии наследования, достаточно нажать пару клавиш.
For all symbols that have separate declarations and definitions, ReSharper C++ displays the Navigate to declaration/definition icon on the left (). Нажмите на значок или используйте сочетание клавиш Ctrl+B, чтобы быстро переключаться между объявлением и определением.
Контекстная навигация также позволяет переходить от выбранного символа к его использованию, базовому или производному символу.
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
.
Действие Find Usages поможет найти все использования определенного символа в вашем решении.
По завершении поиска найденные вхождения отображаются в отдельном окне, в котором их можно группировать и сортировать, а также использовать панель предварительного просмотра.
ReSharper C++ позволяет просматривать структуру текущего документа в окне File Structure — это значительно упрощает навигацию по большим файлам.
При переключении на другую вкладку редактора в окне отображается структура соответствующего файла.
В окне 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++ позволяет быстро переопределить член базового класса или добавить отсутствующий член, оператор равенства или сравнения, создать определение на основе существующего объявления, конструктор, функцию hash или swap.
Для вызова меню генерации и просмотра доступных вариантов просто нажмите Alt+Ins.
В ReSharper C++ предусмотрено 29 настраиваемых шаблонов кода. Некоторые представляют собой обычные сниппеты, а другие используются для окружения выделенных фрагментов кода.
Вы также можете использовать и создавать шаблоны файлов. Нажмите Ctrl+Alt+Ins, чтобы быстро добавить класс в проект, над которым вы работаете.
Инструмент форматирования 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 в ReSharper C++.
ReSharper C++ учитывает соглашение об именах UE во всех командах, в том числе в рефакторингах переименования и введения переменной, при генерации кода геттеров и сеттеров и во многих других действиях. ReSharper C++ следит за правильностью использования имен по всей кодовой базе. Любые несоответствия правилам именования UE подсвечиваются в редакторе благодаря специальным инспекциям Inconsistent UE naming.
Для кода на основе UE доступно несколько проверок в анализаторе кода, в частности для обнаружения отсутствующих или неправильно установленных макросов рефлексии UE:
ReSharper C++ обеспечивает бесшовную интеграцию с UnrealHeaderTool, благодаря чему все больше проблем с метаданными классов Unreal Engine можно выявлять непосредственно в редакторе. Когда вы работаете с проектом Unreal Engine, ReSharper C++ автоматически запустит UnrealHeaderTool для файла, который вы редактируете, и отобразит ошибки и предупреждения, как и любые другие инспекции. Посмотрите на интеграцию UnrealHeaderTool в действии.
Для упрощения работы с макросами рефлексии из Unreal Engine ReSharper C++ предоставляет автодополнение для спецификаторов рефлексии внутри макросов.
Во всплывающем окне быстрой документации (Ctrl+Q) отображается встроенная документация для спецификаторов рефлексии UE, когда курсор наведен на спецификатор.
ReSharper C++ идентифицирует удаленные вызовы процедур по ключевым словам Client
, Server
или NetMulticast
в операторе объявления UFUNCTION
. ReSharper C++ знает, что для таких функций должна быть сгенерирована функция _Implementation
, а также функция _Validate
, если установлен спецификатор WithValidation
. Если отсутствует только одна функция, будет сгенерирована нужная, а если отсутствуют обе — то две.
При переходе к определению ReSharper C++ предложит обе функции (_Validate
и _Implementation
). Также можно воспользоваться меню, вызываемом Alt+Enter, и выбрать в нем пункт «Related UE functions».
Если вы используете символ, который недоступен в текущей области, ReSharper C++ выделит его красным и предложит по возможности добавить отсутствующую директиву #include
. Если директива #include
отсутствует в заголовочном файле, она будет автоматически добавлена перед файлом .generated.h
, который должен быть последним в списке включений. В результате специальной инспекции ReSharper C++ подсветит неправильно расположенную директиву #include
.
Теперь при использовании рефакторинга Rename в проектах Unreal Engine к соответствующей директиве include *.generated.h
и связанным файлам добавляются префиксы A
, F
, E
, T
, S
и U
.
Постфиксный шаблон new учитывает специфику создания объектов в UE4. Кроме того, предусмотрены шаблоны для генерации USTRUCT/UCLASS/UENUM/UENUMCLASS
.
USF-файлы в Unreal Engine основаны на HLSL и содержат кросс-платформенный код шейдера. Такие файлы обычно содержат виртуальных пути, и ReSharper C++ позволяет работать с ними и поддерживает все стандартные действия.
SpatialOS Game Development Kit — это форк Unreal Engine 4, который помогает запускать онлайн-игры и управлять ими в облаке. ReSharper C++ распознает CrossServer, SpatialType, NonSpatialType и другие спецификаторы SpatialOS. Подробнее
В ReSharper C++ есть начальная поддержка HLSL, высокоуровневого языка для программирования шейдеров. ReSharper C++ подсвечивает HLSL-код в соответствии с выбранной цветовой схемой и показывает подсказки с документацией и информацией о типах. Работает поиск и навигация по структурам, функциям и параметрам в решении, ссылочных файлах и стандартных библиотеках. Кроме того, для HLSL доступно умное дополнение, автоматическая подстановка парных разделителей и другие функции.
При работе с файлами шейдеров HLSL доступна полная функциональность ReSharper по анализу потока управления, в том числе предупреждения о недостижимом коде, неинициализированных переменных, избыточных ветках условных операторов, избыточных переходах потока управления, а также многое другое.
Есть бесплатная пробная версия на 30 дней