Чем же может быть полезен 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-дневный пробный период.
Комментарии (60)
maksqwe
10.04.2015 13:18+1«Как только вы открываете Visual Studio с плюсовыми проектами, ReSharper C++ начинает анализировать ваши проекты и предлагать исправления для проблем, которые находит, и рекомендовать те или иные улучшения. Например, если вы воспользуетесь типом, не прописав ему заголовок, ReSharper C++ предложит вам сделать это...»
А вот это интересно, в ассисте такого нет.
KaaPex
10.04.2015 13:54А с Unreal Engine как сильно можно интегрироваться?
gibson_dev
10.04.2015 14:03+3Так же как и с любым другим проектом на С++, ни какой специальной интеграции нет.
NeoCode
10.04.2015 14:01Еще помнится обещали кроссплатформенную среду разработки для С++. Как с ней дела?
Holms
10.04.2015 22:21Как у него с подержкой проектов в которых используется Managed C++ & regular C++?
mezastel Автор
10.04.2015 22:34+1Никакой специфичной поддержки Managed C++ пока у нас нет. А что конкретно хотелось бы видеть?
Holms
11.04.2015 17:45Желательно иметь полную поддержку .NET подсказок как в R3 :)
А так просто интересно как он будет анализировать C++ код внутри managed C++ кода.
Поймет ли правильно using, namespace импортированы из .NET сборок? Ведь include же нету как в чистом C++.Holms
13.04.2015 08:44Мдя, даже не знаю что сказать. Но первое впечатление весьма плохое.
Загрузил проект где использую Managed C++ и C++, подождал пока все файла разберутся (минуты 2-3).
Начал печатать код и получаю это
Как это он не видит BeginPaint??
На том же проекте Visual Assist все распознает как надо. Видимо у вас Managed код вообще игнорируется.
Попробовал в файле где native C++ там вроде работает нормально, но мне надо оба диалекта. Как исправите дайте знать, сразу же куплю.outcoldman
13.04.2015 16:16-1На сколько я помню, Visual Studio сама никогда не поддерживала IntelliSense for Managed C++. Разве нет?
int19h
14.04.2015 08:08+2Managed C++ уже много лет как deprecated. Но, скорее всего, имелся в виду C++/CLI.
Он вполне себе поддерживался, но его выпилили в VS 2010 (по причине полного переписывания C++ Intellisense). Потом запилили обратно в следующих версиях.
fogone
10.04.2015 23:11Посмотрел поддержку решарпером проектов unreal, и надо заметить, что проблемы еще есть, особенно много (мне показалось) проблем с макросами. Но даже в том состоянии, что есть сейчас, R++ уже повышает удобство разработки серьезно. Спасибо!
П.С. Хотя, я бы конечно лучше воспользовался clion-ом, но под него я не смог завести проект unreal-а и в этом вины jetbrains нет, потому что cmake-файл UnrealBuild генерирует только для линуксов.mezastel Автор
10.04.2015 23:39Ну в принципе даже если у вас нету CMake-файла, вы можете попробовать заимпортировать в CLion сорцы. В этом случае CLion по крайней мере сгенерирует вам структуру CMakeLists со всеми файлами что вы выберете.
AndyRoss
11.04.2015 12:44+3В этом также нет и вины Epic Games. CLion как любая конкурентоспособная IDE должна уметь из кастомных скриптов собирать, т.е. запускать процессы с аргументами. Возможность указывать в сборке запуск процессов позволяет настраивать в IDE компиляцию любых проектов.
В Qt Creator я компилировал кастомными скриптами приложение под андроид – у меня java код компилировался (в ide для c++), была сборка, запаковка apk, подпись, установка и запуск приложения. Я тоже самое мог бы сделать и в xcode например. В нем я компилировал qt проекты с помощью qmake, при этом xcode ничего не знает про qt.
Было бы интересно узнать мнение, а может быть и планы JetBrains по этому поводу.fogone
13.04.2015 11:34Согласен, кастомный сборщик был бы очень кстати и решил бы многие проблемы, но чтобы работать в проекте, нужно его создать, сгенерировать cmake-файл, уметь отлаживаться и тд. Думаю, что для работы друг с другом, поработать придется и тем и другим.
arabesc
11.04.2015 00:43Поставил на машину с Win7/VS10, загрузил рабочий проект — студия повисла. Снял задачу, повторил — результат тот же. Удалил плагин.
gorohoroh
11.04.2015 02:55В зависимости от сложности и объема кода, первоначальное индексирование может сопровождаться такими эффектами. Долго ждали, прежде чем снимать задачу, а потом удалять?
arabesc
11.04.2015 04:52+1В зависимости от сложности и объема кода, первоначальное индексирование может сопровождаться такими эффектами.
Нужен прогресс-бар или иной идикатор активности? Кода в проекте действительно много.
Долго ждали, прежде чем снимать задачу, а потом удалять?
Может быть пару минут. Сначала по диспетчеру задач была видна интенсивная работа с памятью в процессе студии, а как она успокоилась, так задачу и снял.mezastel Автор
16.04.2015 00:20Прогресс-бар при первоначальном построении кэшей R++ находится в правом нижнем углу студии. На сложных проекта. первичное построение кэшей может происходить достаточно долго.
arabesc
16.04.2015 01:36В студии ничего не шевелилось ни в каком углу, было полное ощущение зависания.
drBasic
12.04.2015 18:57Поставил ReSharper C++, попытался открыть chrome.sln, содержащий чуть более тысячи под-проектов. Это был текущий мастер хромиума www.chromium.org. Не взлетело. Студия подвисла, видимо решарпер сканирует проекты (Intellicense заранее выключил). Решил подождать, было очень интересно справится или нет. Через час студия упала, скорее всего из-за нехватки памяти. Попробовал еще 2 раза, результат неизменный — падает когда кончается адресное пространство. Очень жаль.
На 4ый запуск в студия перестала так зависать и появилась возможность работать. При этом показывается прогресс сканирования файлов (Updating source files) примерно на половине. Открыл файл, решарпер показывает иконку Analisis will start shortly. Уже 15 минут.
Вообще это боль, что студия не может стабильно работать с такими большими проектами. Встроенный intellisence более-менее справляется, но и ему памяти не хватает, сначала отваливается показ переменных в отладчике, а еще чуть погодя студия крашится.gorohoroh
14.04.2015 18:45То есть студия без решарпера у вас стабильно работает на chrome.sln?
drBasic
15.04.2015 18:58Не совсем.
Некоторое время работает, но потом кончается память и студия крашится. Особенно если запускать браузер под отладкой.
Если не пишу код, а отлаживаю, то автокомплит не сильно нужен, и я загружаю из солюшена только несколько запускаемых проектов с помощью расширения funnel visualstudiogallery.msdn.microsoft.com/5396fa4a-d638-471b-ac3d-671ccd2ea369
В этом случае все точки останова ставятся, отладка полностью работает, и студия работает достаточно стабильно, по крайней мере падений из-за кончившейся памяти нет.
int19h
14.04.2015 08:09Сразу вопрос — вот такое вот он съест?
template<bool> struct a_t; template<> struct a_t<true> { template<int> struct b {}; }; template<> struct a_t<false> { enum { b }; }; typedef a_t<sizeof(void*)==sizeof(int)> a; enum { c, d }; int main() { a::b<c>d; // declaration or expression? }
И что именно будет в результате (и, в частности, будет ли оно зависеть от настроек текущей конфигурации проекта)?gorohoroh
14.04.2015 17:11+1Команда утверждает, что все правильно распарсится в зависимости от настроек проекта
zenden2k
17.04.2015 08:09Хотел сказать пару слов.
goo.gl/nqkEed (прошу прощения, картинки, как, впрочем, и ссылки, не могу вставлять)
Подсказки с предложением вставить #include ну ООЧЕНЬ доставучие, хоть и удобные. Ну никак не хотят закрываться, и еще слишком быстро показываются, можно случайно на них кликнуть, бегая по коду.
И еще. Я полностью выключил Intellisense (не знаю, связано ли с этим), ввожу «Acti..» и вместо того, чтобы получать «Actions», получаю переход на следующую строку.
goo.gl/VwyU0U
goo.gl/yg7nu8
mezastel Автор
17.04.2015 09:43Спасибо, проблема с перекрыванием попапов и комплишна нам уже известна, работаем над починкой этого механизма.
zenden2k
18.04.2015 11:40Постоянно случаются зависания при перестроении кэша на моем проекте (70 тыс. строк).
Особенно часто зависание на файле objidlbase.h
Только после несколько убийств процесса devenv.exe и перезапуска, а также удаления папки C:\Users\user\AppData\Local\JetBrains\Transient\ReSharperPlatformVs12\v02\SolutionCaches
перестает зависать.
Помню в IDEA как-то можно было отправить какой-то дамп (callstack или что-то такое) чтобы вы разобрались, в ReSharper есть такая возможность?mezastel Автор
18.04.2015 15:44А вы не могли бы снять для нас снэпшот через ReSharper|Help|Profile Visual Studio и залить его к нам <a href=«youtrack.jetbrains.com>в трекер?
mezastel Автор
18.04.2015 15:49Сорри, youtrack.jetbrains.com
zenden2k
19.04.2015 16:29Когда это случится еще раз, обязательно сделаю. Пока всё работает, тьфу-тьфу-тьфу, поэтому трогать не буду.
Еще проблема в том, что очень часто при перестроении кэша студия виснет намертво, и сделать что-нибудь (в т.ч. снять снэпшот) невозможно.zenden2k
20.04.2015 16:59+1Отправил снэпшот и дамп, удивительно быстро починили (буквально через пару часов), жду обновлений!
KindDragon
22.04.2015 15:46А умеет ли Resharper C++ с конвертировать C-style cast в соответствующий С++ cast во всем солюшене?
mezastel Автор
22.04.2015 17:06Пока эта фиче не обладает Fix in Scope, но я попрошу девелоперов сделать — думаю это не сложно.
maksqwe
А ценники с Visual Assist'ом то одинаковые, по крайней мере на индивидуальную лицензию. А это прямой конкурент.
zenden2k
Visual Assist умеет 2008 студию
gorohoroh
Да, 2008 и 2005 мы целенаправленно перестали уметь несколько месяцев назад.
SerJook
Жаль, потому что 2008 это последняя студия, которая не тормозит и интерфейс у неё не на убогом WPF.
VioletGiraffe
А мне каждая следующая Студия нравится больше предыдущей. 2015 вообще классная. И ничего у меня не тормозит.
maseal
WPF ведь очень дружит с аппаратным рендерингом видеокарт.
Как-то на работе ставил эксперименты по отзывчивости довольно громоздкого WPF-приложения и опытным путем пришли к тому, что начиная с Geforce 450 с 1Gb памяти на борту всё летает, а на простеньких встроенных видеокартах подтормаживает, местами весьма ощутимо.
VioletGiraffe
У меня, кстати, видеоядро интегрировано в не новый уже core i5-2500 (HD 3000). Работаю над софтом, использующим OpenGL, производительности более чем достаточно. Да и игры сложные пробовал со средними настройками запускать, тоже норм. Приближение к технологическому пределу сказывается, я думаю — топовое железо обновляется вдвое реже, чем 10 лет назад, а разрыв между интегрированной и топовой дискретной графикой (а особенно — между интегрированной и мэйнстрим дискретной) стал меньше.
IRainman
Ну не знаю, он у меня даже по RDP не тормозит с сервера где вообще видеокарты, фактически нет, а так нашлёпка с 16 МБ ОЗУ в качестве кадрового буфера.
mezastel Автор
Если говорить объективно, то проблема даже не в WPF. То есть, конечно, WPF это «не мёд», но уровень неэффективности студии при обычных операциях вроде добавления референса в проект просто шокирует.
tangro
А это доказывает, что, в отличии от разработчиков Visual AssistX — вы не сильно понимаете мир С++. Тут компонент, стабильно работающий под VS 2008 и требующий правок «раз в полгода» — может жить на нём ещё десятилетие.
tangro
Вот вам, к примеру стабильный и популярный jsoncpp — в репозитории солюшн только под VS2008 — и как с ним работать в вашем «модном» решарпере?
Gorthauer87
Там же cmake. В чем собственно проблема?
DancingOnWater
Берем и автоматически конвертируем в модную студию.
gorohoroh
Решение о прекращении поддержки старых студий принималось для всех продуктов семейства ReSharper Ultimate, в котором мир C++ пока что представлен только продуктом ReSharper С++. Мы предполагали, что по плюсовой части некоторые проблемы это нам принесет, но статистика использования предрелизных плюсовых билдов в разных версиях студии нас обнадежила.