Встречайте ReSharper C++

В течение десяти с небольшим лет своего существования ReSharper был ориентирован на .NET-разработчиков, что не удивительно для плагина к Visual Studio. 2 года назад, в чем-то благодаря удачной первоапрельской шутке, мы вплотную занялись поддержкой С++ в ReSharper, и вот совсем недавно был выпущен первый официальный релиз ReSharper C++ — нового продукта специально для разработчиков на C/С++ в Visual Studio. (Тем, кто заждался релиза CLion для кросс-платформенной разработки на C/C++, понадобится еще немного терпения.)Чем же может быть полезен ReSharper C++? Разберем основные возможности продукта.

Статический анализ кодаКак только вы открываете Visual Studio с плюсовыми проектами, ReSharper C++ начинает анализировать ваши проекты и предлагать исправления для проблем, которые находит, и рекомендовать те или иные улучшения. Например, если вы воспользуетесь типом, не прописав ему заголовок, ReSharper C++ предложит вам сделать это: e1a209e4a60f5abf19d3dabde459a969.png

Если у вас есть прототип функции, но не хватает ее определения, ReSharper C++ предложит сгенерировать тело функции либо в этом же, либо в отдельном файле:

e31150c73da2fafb08effce56f932274.png

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

a08d974c34caefa2660f6f14508e2efc.png

Макросы и шаблоны ReSharper С++ полностью понимает все макросы, так что анализ он осуществляет именно на том коде, который получится после препроцессинга. Это дает нам ряд уникальных возможностей: например, можно «разворачивать» макросы прямо в коде: ca5a5433ab725445d2ac519cc765cbcf.gif

В случае реализации факториала через шаблоны ReSharper C++ может сразу проверить любой static_assert, написанный с использованием этого шаблона:

c19d33f9dbf943212ff96673cb32007f.png

Навигация и поиск ReSharper C++ позволяет очень быстро навигироваться по крупным проектам и искать в них нужный код. Вот некоторые из поддерживаемых возможностей навигации: Go to Everything находит по названию любой тип сущности (класс, член класса, файл или папку) во всем солюшене сразу. Результаты также можно фильтровать более узкими командами, такими как Go to Type, Go to File и Go to Symbol. Go to File Member позволяет быстро найти символ в том файле, где вы сейчас работаете. Go to Base/Derived помогает искать наследников и родителей по классам или элементам класса. Go to Definition позволяет быстро перейти к месту объявления символа. Go to Related Files применяется для перехода к файлам, которые имеют какое-то отношение к текущему. Это могут быть включенные заголовочные файлы или CPP-файлы. Кроме того, ReSharper позволяет быстро переходить между заголовочным и СРР-файлами (Ctrl+B). Navigate to specializations позволяет найти все специализации шаблонного класса: 10f36da1aaf37cc9d9a5fd28e9169114.png Для поиска всех вхождений того или иного символа в ReSharper C++ имеется механизм Find Usages с возможностями предварительного просмотра, группировки и фильтрации.Следует отметить, что многие команды навигации доступны из контекстного меню, которое открывается по нажатию Alt+Enter:

f4bbfd36138df1e6a1a5b0dbf3859a4f.png

ReSharper С++ также включает в себя несколько окон для навигации в больших сложных проектах. Одно из этих окон называется File Structure: оно позволяет быстро сориентироваться в структуре текущего файла: dd90d826d8b5cc50e6939d34bc03cbc1.png

Еще одно окно называется Inheritance Hierarchy, и в нем отображается иерархия наследования типов в виде дерева:

7116c7f34f88a0bb718f4492a5e8c3e6.png

Завершая тему навигации, существуют команды для перехода по элементам класса (Go to Next/Previous Member) и по найденным в файле ошибкам (Go to Next/Previous Issue).

Шаблоны и генерация кода Мы адаптировали систему генерации кода и шаблонов к С++. Это означает, что в ReSharper С++ есть поддержка следующих знакомых пользователям основного ReSharper механизмов: Live Templates — это шаблоны, которые ведут себя во многом подобно Visual Studio snippets, но они намного более чувствительны к контексту, а их поведение можно программировать под свои задачи.77817588df4441285be31c6d2783b653.gif Surround templates позволяют выделить кусок кода и обернуть его в ту или иную конструкцию, например в if или try-catch выражение. Эти шаблоны также доступны на любой выделенной части кода при нажатии Alt+Enter: a49e991f598959ed22467d605decc0be.gif File templates дают возможность создавать как отдельные файлы, так и сразу генерировать несколько файлов с предустановленными настройками. Например, шаблон Class сразу создает и заголовочный, и CPP файл. Помимо шаблонов, ReSharper C++ также имеет штатные механизмы генерации кода в меню Generate: d544699e94442e07fffafe2ef76638b1.png

Рефаторинги Возможности рефаторинга кода — это своего рода визитная карточка ReSharper. Вот несколько рефакторингов, которые уже есть в ReSharper C++: Rename позволяет переименовать символ (например имя класса или поля) и его вхождения во всем проекте. Introduce Variable позволяет выделить часть вычислений и сохранить их в отдельной переменной: 2edc29e34639c8433d1cc1595f6428fd.gif Extract Method позволяет создать отдельную функцию из выделенного блока кода, правильно передав и вернув все нужные переменные: 93934c13e8bcdba6817a75f6f8c23030.gif Заключение Вот видео, в котором показана вышеописанная функциональность в действии:[embedded content]

Для использования ReSharper C++ нужна либо отдельная лицензия, либо лицензия ReSharper Ultimate.

ReSharper C++ можно скачать отдельно или в составе полного инсталлятора ReSharper Ultimate. В обоих случаях действует 30-дневный пробный период.

© Habrahabr.ru