Что нового в ReSharper C++

В ReSharper C++ 2020.1 вас ждет много новых функций и улучшений. Среди них: расширенная поддержка C++20, улучшенное автодополнение и набор новых инспекций с быстрыми исправлениями. Действия Rearrange Code и Complete Statement помогут вам писать и редактировать код эффективнее. Для разработчиков игр ReSharper C++ теперь включает в себя начальную поддержку HLSL и лучше согласуется с рекомендациями Unreal Engine.

Скачать

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

C++20

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

Using enum

Using enum

ReSharper C++ 2020.1 поддерживает объявления using enum, что позволяет переносить конкретные перечисляемые типы из класса в локальное пространство имен. Новый рефакторинг Introduce Using Enum поможет добавить using enum в написанный код.

Концепты

Концепты C++20

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

Using enum

Шаблонизированный синтаксис лямбд

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

Unreal Engine

Unreal Engine

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

Когда ReSharper C++ обнаруживает проект Unreal Engine, он изменяет настройки по умолчанию и перестает предлагать Use auto, чтобы лучше соответствовать рекомендациям Unreal Engine. Кроме того, эта версия поддерживает обновленные правила именования консольных переменных и категорий журнала. Теперь вы можете переходить к пространствам имен, которые содержат перечисления в стиле Unreal Engine через Search Everywhere/Go to.

Наконец, ReSharper C++ также поддерживает файлы USF с виртуальными путями и SpatialOS GDK. Подробнее

HLSL Экспериментальная функциональность

HLSL

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

Анализ кода

Анализ кода

Мы добавили несколько новых инспекций, которые обнаружат и исправят такие проблемы:

  • Неиспользуемый лямбда-захват.
  • Лямбду можно переписать с использованием явных параметров шаблона.
  • Приведение в функциональном стиле вместо C++.
  • Использование reinterpret_cast вместо static_cast при приведении к void*.
Анализ кода

ReSharper C++ поможет вам ввести атрибут maybe_unused из C++17:

  • Быстрое исправление добавит [[maybe_unused]] к неиспользуемому параметру или переменной.
  • Контекстное действие заменит аннотации UNREFERENCED_PARAMETER и Q_UNUSED на [[maybe_unused]].

Встроенный исполняемый файл Clang-Tidy был обновлен до версии Clang 10, что добавило более 70 новых проверок и предупреждений компилятора из свежей версии LLVM.

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

Автодополнение теперь предлагает имена меток, стандартные атрибуты C++, новый постфиксный шаблон std::forward и аргументы в вызовах базовой функции. Кроме того, автодополнение работает в теле макроса.

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

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

Две популярные функции из ReSharper для .NET наконец добрались до ReSharper C++:

  • Rearrange Code позволяет быстро перемещать элементы кода, расширять и сужать область выделения.
  • Complete Statement подставляет необходимые синтаксические элементы и перемещает курсор в начало следующего выражения.

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

Новое действие Document (по умолчанию Ctrl+/) позволяет быстро создать документирующий комментарий для элемента кода без вызова контекстного действия.

Рефакторинги для перечислений enum

Рефакторинги для перечислений enum

В ReSharper C++ 2020.1 есть два новых рефакторинга, которые помогут вам обновить перечисления enum:

  • Convert to Scoped Enum преобразует объявления перечисляемых типов в стиле C в классы C++11 (scoped enumerators).
  • Introduce Using Enum добавляет объявление using enum из C++20 и сокращает ссылки на перечисляемые типы, чтобы ваш код было легче читать.

Навигация

Мы добавили новые возможности навигации:

  • Перейти к объявлению символа можно прямо из комментария, в котором он упомянут.
  • В Search Everywhere/Go to есть два новых фильтра: концепты и пространства имен. Введите «/» в поле поиска, чтобы увидеть все доступные фильтры.
  • Теперь можно перейти к объявлению, нажав на колесо мыши.

В окне File Structure теперь есть специальные индикаторы, которые указывают на доступность членов класса, спецификаторы virtual/static/pure и дают информацию о наследовании.

Сортировка директив include

Сортировка директив include

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

  • Сортировка с учетом регистра.
  • Группировка заголовочных файлов по директории.

Вы можете импортировать параметры сортировки из файла .clang-format, если на странице ReSharper | Options | Code Editing | General Formatter Settings установлен флажок напротив Read code style form .clang-format style.

Другие изменения

Вот еще несколько изменений, заслуживающих внимания:

  • В диалогах генерации можно добавить к геттерам и конструкторам атрибут [[nodiscard]] из C++17.
  • Generate mock functions поддерживает макрос MOCK_METHOD, представленный в GTest 1.10.
  • Новая опция Use named pipes to communicate with child processes позволяет наладить юнит-тестирование, которое проходит некорректно из-за ограничений безопасности.

И конечно, вас ждет много изменений из самого ReSharper. Например, теперь можно экспортировать и импортировать сеансы юнит-тестирования.

Скачать

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

ReSharper C++ 2019.3

Поддержка стандарта C++20

Поддержка стандарта C++20

Стандарт C++20 полностью готов и будет официально подписан в следующем году — разработчиков ждет большой набор полезных возможностей. Многие из них уже поддержаны в ReSharper C++ 2019.3.

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

В ReSharper C++ появилась поддержка концептов, включая обновленный с учетом этой языковой возможности рефакторинг Rename и действие Find usages. Более того, анализатор кода покажет подробную информацию об ошибках в использовании концептов. Например, если разрешение перегрузки невозможно, из-за того что не выполнено требование концепта, вы узнаете все подробности об ошибке из всплывающей подсказки. Кстати, для удобства чтения мы добавили цвета в подсказки, которые сообщают об ошибках разрешения перегрузки.

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

Анализ кода и быстрые исправления

Анализ кода и быстрые исправления

Если предупреждение Clang кажется вам слишком навязчивым, можете его отключить в меню инспекции. Если вы считаете, что какая-то проверка неактуальна в текущем файле, просто отключите ее с помощью Disable in file with comment. А чтобы отключить все проверки в файле, используйте опцию Disable all inspections in file with comment.

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

Улучшения в поддержке Clang-Tidy

Улучшения в поддержке Clang-Tidy

В этой версии, мы обновили встроенный исполняемый файл Clang-Tidy до версии Clang 9, чтобы предоставить вам множество новых инспекций и исправлений. Важно отметить, что встроенный исполняемый файл больше не препятствует модификации исходных файлов. Кроме того, Clang-Tidy теперь запускается быстрее, так как не ждет окончания других процессов анализа.

Настройки Clang-Tidy стали более гибкими:

  • Теперь у вас есть 3 варианта выбора исполняемого файла Clang-Tidy для использования в ReSharper C++. Помимо встроенного исполняемого файла и пользовательского файла, который вы можете указать в настройках, теперь можно выбрать файл из %PATH%ReSharper C++ будет искать в папках, перечисленных в переменной окружения %PATH%, и сообщит, если что-нибудь найдет.
  • Теперь вы можете указать на конкретный файл конфигурации Clang-Tidy, не используя строки в формате YAML/JSON.

Подсказки типов

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

  • Переменных, объявленных как auto
  • Структурных привязок
  • Возвращаемых типов функций и лямбд
Шаблоны кода

Шаблоны кода

Мы переименовали некоторые шаблоны, чтобы они соответствовали ключевым словам используемого языка. Например, чтобы сгенерировать класс, введите class (вместо cls), для структур используйте struct (вместо str). Шаблоны переименованы аналогичным образом для объединений, перечислений и пространств имен.

Улучшения навигации

Улучшения навигации

Мы улучшили действие Go to file member:

  • Диалог отображается мгновенно, до завершения анализа файла.
  • Если объявление и определение функции содержатся в одном и том же файле, в диалоге они показываются только один раз.

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

Анализ кода и быстрые исправления

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

В ReSharper C++ 2019.3 можно экспортировать настройки форматирования в clang-файл. Используйте опцию Write current style to.clang-format в меню ReSharper | Options | Code Editing | General Formatter Style.

Добавлены новые опции для постановки пробелов:

  • перед ptr в абстрактном объявлении
  • перед ref в абстрактном объявлении

ReSharper C++ 2019.3 теперь умеет проверять порядок директив #include в коде. Просто укажите нужные параметры, и соответствующая инспекция предупредит о том, что порядок нарушен, а быстрое исправление поможет расставить все по местам.

Поддержка Unreal Engine 4

Поддержка Unreal Engine 4

ReSharper C++ понимает, что вы работаете над проектом Unreal Engine и корректирует свое поведение в соответствии с особенностями UE4.

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

Такие возможности редактора как Parameter Info, анализ кода и постфиксное автодополнение умеют работать с умными указателями Unreal Engine (TSharedPtr, TSharedRef, TWeakPtr, TUniquePtr) — аналогично тому, как это делается для std::shared_ptr/std::unique_ptr.

И наконец, мы улучшили производительность при работе над проектами UE4. Например, устранили зависание после действия Refresh Visual Studio Project в редакторе UE4.

Свойства проекта

Свойства проекта

Мы добавили некоторые настройки проекта для случая кастомного компилятора или инструмента сборки. Они хранятся в настройках ReSharper и позволяют указать:

  • Каталоги заголовочных файлов
  • Определения препроцессора
  • Стандарт языка C++

Улучшения производительности

Подсветка синтаксиса теперь работает быстрее. После изменения тела функции, ReSharper C++ повторно анализирует только само тело.

Мы также ускорили поиск Find Usages путем добавления эвристики, основанной на графе включаемых заголовочных файлов. Файлы, в которых нет использований, исключаются из поиска.

Другие изменения

Много изменений пришло из ReSharper. Читайте о них здесь.

ReSharper C++ 2019.2

Ускоренный запуск

Мы наконец завершили работу, которую вели на протяжении нескольких релизных циклов, и теперь можем официально объявить, что в ReSharper C++ появилась новая реализация препроцессора. На самом деле их сейчас два: новый используется для индексации, а старый — для всего остального. Новый препроцессор ускоряет индексацию типичных решений, таких как LLVM и Unreal Engine, на 15-25%.

Подсказка в автодополнении

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

При использовании автодополнения ReSharper C++ показывает краткое описание каждого предлагаемого варианта (функцию можно включить/отключить в разделе настроек Environment | IntelliSense | Completion Appearance). Описание выбранного варианта автодополнения теперь выделено цветами и содержит соответствующую документацию.

Подсказки кода

Подсказки кода

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

Улучшенная поддержка C++20

Стандарт C++20 вот-вот будет подписан комитетом по стандартизации языка. Мы, конечно же, прилагаем все усилия, чтобы полностью обеспечить его поддержку. В ReSharper C++ 2019.2 добавилась поддержка:

  • условных explicit выражений,
  • нового типа char8_t,
  • распаковки аргументов в lambda init-capture,
  • конструируемых и назначаемых лямбд без сохранения по умолчанию,
  • правил C++20 для агрегатов,
  • спецификаторов conteval и constinit,
  • улучшений C++20, касающихся объявлений структурного связывания.
Поддержка редактирования

Поддержка редактирования

Работать с многострочными комментариями стало удобнее. Во-первых, многострочные комментарии, использующие однострочный синтаксис, автоматически продлеваются на новую строку. Во-вторых, при продлении многострочных комментариев теперь автоматически ставятся правильные отступы, если включен виртуальный пробел.

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

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

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

В ReSharper C++ 2019.2 появился целый ряд новых параметров форматирования:

  • Использовать отступ в непрерывной строке в декларации функции и внутри круглых скобок.
  • Предпочтителен перенос строки перед ")" в объявлении.
  • Предпочтителен перенос строки перед ")" в вызове.
  • Использовать отступ в непрерывной строке в списках инициализаторов.
  • Выравнивать аргументы списка инициализаторов.
  • Предпочтителен перенос строки после "{" в списках инициализаторов.
  • Предпочтителен перенос строки перед "{" в списках инициализаторов.

Анализ кода

Появились новые инспекции для обнаружения проблем в структуре кода:

  • Несоответствующая директива препроцессора.
  • Явно заданная по умолчанию функция-член неявно удаляется.
  • Избыточный спецификатор final в классе, помеченном final.

Исправление Use static_cast для инспекции использованного приведения в стиле языка C может быть запущено как в массовом порядке, так и в составе Code Cleanup.

Навигация

Навигация

Действия навигации стали более точными:

  • С помощью Go to declaration можно перейти к конструктору по умолчанию, вызываемому, когда объект инициализирован значением по умолчанию в объявлениях переменных и новых выражениях.
  • Find usages находит использование конструкторов по умолчанию при инициализации по умолчанию.
  • Go to symbol теперь скрывает символы с квалифицированными именами (например, определения функций вне класса).

Кроме того, вы можете осуществлять поиск в файле прямо через диалог Go to File Member. Список результатов будет содержать имена всех подходящих членов и всех мест в файле, где есть искомая строка.

Unreal Engine

В предыдущем релизе мы начали работу над улучшением поддержки удаленного вызова процедур для UE4. Теперь мы обновили рефакторинги Rename и Change Signature для корректной работы с функциями RPC. Добавлено несколько новых проверок кода для Unreal Engine, в частности для обнаружения отсутствующих или неправильно установленных макросов рефлексии UE4.

В версии 2019.1 мы реализовали автодополнение для спецификаторов рефлексии, а теперь добавили для них встроенную документацию. Она отображается во всплывающем окне Quick Documentation (Ctrl+Q), когда курсор установлен на спецификаторе.

Другие изменения

ReSharper C++ 2019.2 обеспечивает начальную поддержку режима Per-Monitor DPI Awareness, представленного в Visual Studio 2019. Кроме того, мы обновили страницу руководства по улучшению производительности (ReSharper | Options | Environment | Performance Guide): добавили раздел Windows Defender, а также описания всех советов по улучшению производительности, из которых вы узнаете, что именно произойдет после применения предложения.

Есть хорошие новости и для авторов плагинов: сборки C++ из ReSharper C++ теперь включены в ReSharper SDK.