В течение десяти с небольшим лет своего существования ReSharper был ориентирован на .NET-разработчиков, что не удивительно для плагина к Visual Studio. 2 года назад, в чем-то благодаря удачной первоапрельской шутке, мы вплотную занялись поддержкой С++ в ReSharper, и вот совсем недавно был выпущен первый официальный релиз ReSharper C++ — нового продукта специально для разработчиков на C/С++ в Visual Studio. (Тем, кто заждался релиза CLion для кросс-платформенной разработки на C/C++, понадобится еще немного терпения.)
Чем же может быть полезен ReSharper C++? Разберем основные возможности продукта.
Статический анализ кода
Как только вы открываете Visual Studio с плюсовыми проектами, ReSharper C++ начинает анализировать ваши проекты и предлагать исправления для проблем, которые находит, и рекомендовать те или иные улучшения. Например, если вы воспользуетесь типом, не прописав ему заголовок, ReSharper C++ предложит вам сделать это:
Если у вас есть прототип функции, но не хватает ее определения, ReSharper C++ предложит сгенерировать тело функции либо в этом же, либо в отдельном файле:
Если вы решите воспользоваться функцией printf()
, ReSharper C++ проверит аргументы форматирования и предложит фиксы, если найдет проблемы:
Макросы и шаблоны
ReSharper С++ полностью понимает все макросы, так что анализ он осуществляет именно на том коде, который получится после препроцессинга. Это дает нам ряд уникальных возможностей: например, можно «разворачивать» макросы прямо в коде:
В случае реализации факториала через шаблоны ReSharper C++ может сразу проверить любой static_assert
, написанный с использованием этого шаблона:
Навигация и поиск
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 позволяет найти все специализации шаблонного класса:
Для поиска всех вхождений того или иного символа в ReSharper C++ имеется механизм Find Usages с возможностями предварительного просмотра, группировки и фильтрации.
Следует отметить, что многие команды навигации доступны из контекстного меню, которое открывается по нажатию Alt+Enter:
ReSharper С++ также включает в себя несколько окон для навигации в больших сложных проектах. Одно из этих окон называется File Structure: оно позволяет быстро сориентироваться в структуре текущего файла:
Еще одно окно называется Inheritance Hierarchy, и в нем отображается иерархия наследования типов в виде дерева:
Завершая тему навигации, существуют команды для перехода по элементам класса (Go to Next/Previous Member) и по найденным в файле ошибкам (Go to Next/Previous Issue).
Шаблоны и генерация кода
Мы адаптировали систему генерации кода и шаблонов к С++. Это означает, что в ReSharper С++ есть поддержка следующих знакомых пользователям основного ReSharper механизмов:
- Live Templates — это шаблоны, которые ведут себя во многом подобно Visual Studio snippets, но они намного более чувствительны к контексту, а их поведение можно программировать под свои задачи.
- Surround templates позволяют выделить кусок кода и обернуть его в ту или иную конструкцию, например в
if
илиtry-catch
выражение. Эти шаблоны также доступны на любой выделенной части кода при нажатии Alt+Enter:
- File templates дают возможность создавать как отдельные файлы, так и сразу генерировать несколько файлов с предустановленными настройками. Например, шаблон Class сразу создает и заголовочный, и CPP файл.
Помимо шаблонов, ReSharper C++ также имеет штатные механизмы генерации кода в меню Generate:
Рефаторинги
Возможности рефаторинга кода — это своего рода визитная карточка ReSharper. Вот несколько рефакторингов, которые уже есть в ReSharper C++:
- Rename позволяет переименовать символ (например имя класса или поля) и его вхождения во всем проекте.
- Introduce Variable позволяет выделить часть вычислений и сохранить их в отдельной переменной:
- Extract Method позволяет создать отдельную функцию из выделенного блока кода, правильно передав и вернув все нужные переменные:
Заключение
Вот видео, в котором показана вышеописанная функциональность в действии:
Для использования ReSharper C++ нужна либо отдельная лицензия, либо лицензия ReSharper Ultimate.
ReSharper C++ можно скачать отдельно или в составе полного инсталлятора ReSharper Ultimate. В обоих случаях действует 30-дневный пробный период.
Автор: mezastel