ReSharper C++ 2020.2: проектная модель Unreal Engine, расширенная поддержка C++/CLI и многое другое

Oksana Mandryka

Встречайте ReSharper C++ 2020.2! Благодаря поддержке проектной модели Unreal Engine ReSharper C++ лучше понимает структуру проектов Unreal Engine, а расширенная поддержка C++/CLI улучшает взаимодействие между кодом C++/CLI и C#. Версия 2020.2 также включает в себя обновления поиска и навигации, набор новых инспекций с быстрыми исправлениями и множество других улучшений по всему продукту.

ReSharper C++ 2020.2

Обновиться или попробовать бесплатную 30-дневную версию можно уже сегодня. Переходите на наш сайт или воспользуйтесь приложением Toolbox App, с помощью которого можно скачать все наши инструменты для Visual Studio.

СКАЧАТЬ RESHARPER C++ 2020.2

Вот основные нововведения этого релиза:

  • Unreal Engine: поддержка проектной модели Unreal Engine, более строгое соответствие стандарту Unreal Engine и новые инспекции.
  • C++/CLI: улучшенная совместимость между C++/CLI и C#, новые возможности поиска и навигации, а также инспекции для ключевых слов C++/CLI.
  • Анализ кода: предварительный просмотр исправлений Clang-Tidy, улучшенная поддержка функций constexpr и подсветка некорректных директив препроцессора.
  • Автодополнение: автоматическая генерация лямбда-аргумента для std::function и предварительное объявление класса при импорте символов из еще не включенных заголовочных файлов.
  • Поиск и навигация: Go to declaration работает для неразрешенных идентификаторов, в окне File Structure директивы препроцессора скрыты по умолчанию, Find Usages выполняется быстрее.
  • Стиль кода и форматирование: сортировка директив include, новые настройки для многострочных тернарных выражений и комментариев.
  • Шаблоны файлов: новые шаблоны Source file и Header file.

Unreal Engine

Мы рады представить начальную поддержку проектной модели Unreal Engine. Новая модель обеспечивает более точные варианты автодополнения, которые зависят от ссылок на плагины и модули. Это также позволило нам улучить автоматический импорт: ReSharper C++ больше не будет предлагать включать заголовочные файлы из модулей, на которые нет ссылок, или из закрытых каталогов любого модуля. Более того, ReSharper C++ теперь корректирует свое поведение при переключении активной конфигурации решения, что упрощает работу с блоками препроцессора, связанными с редактором, и другим защищенным кодом.

Все это только начало — впереди у нас много работы. Например, в дальнейшем новая проектная модель позволит нам добавить исправления для таких проблем, как использование сущностей из модулей, на которые нет ссылок. Так что следите за обновлениями!

Для упрощения навигации символы из исходников движка теперь обрабатываются как библиотечные символы и по умолчанию будут скрыты из результатов Search Everywhere. Если вы хотите, чтобы символы отображались как раньше, отключите опцию Treat Unreal Engine symbols as non-project in Search Everywhere/Go To в настройках Code Editing | C++ | Unreal Engine.

Обработка символов Unreal Engine вне проекта

Аналогичным образом при поиске использования символа, определенного в исходных файлах игры, ReSharper C++ теперь будет игнорировать исходные файлы движка. А значит, и Find Usages, и рефакторинги (например, Rename), использующие результаты Find Usages, теперь работают быстрее, когда вызываются для сущностей из собственного кода.

Мы добавили несколько обновлений для более строго соответствия стандарту оформления кода Unreal Engine:

  • В шаблоне документации теперь по умолчанию используется префикс @ вместо \ для команд документации.
  • Мы отрегулировали уровни серьезности нескольких проверок: отключили инспекции Class can be final (для USTRUCT, UINTERFACE и IInterface) и Const-qualified parameter in a function declaration, а также повысили серьезность Inconsistent UE4 naming до уровня ошибки для USTRUCT.
  • Для UCLASS и USTRUCT улучшена генерация кода: ReSharper C++ теперь добавляет все сгенерированные объявления после вызова макроса GENERATED_BODY().

Мы также добавили несколько новых инспекций, которые помогают соблюдать правила Unreal Engine и напоминают о необходимости обновить файлы проекта в Unreal Editor:

  • У функции переопределения отсутствует спецификатор virtual.
    У функции переопределения отсутствует спецификатор virtual
  • Файлы проекта устарели, возможно, требуется повторно создать файлы проекта.
    Возможно, требуется повторно создать файлы проекта

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

Все эти функции также можно попробовать в превью-версии нашей новой среды разработки Rider для Unreal Engine. Она построена на ReSharper C++ и на данном этапе предоставляется бесплатно — регистрируйтесь, начинайте писать код и делитесь с нами своими впечатлениями!

C++/CLI

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

Мы добавили в ReSharper C++ 2020.2 несколько новых инспекций и быстрых исправлений:

  • Проверки распределения памяти: gcnew нельзя использовать с нативными типами, а new нельзя использовать с управляемыми типами.
    Проверки распределения памяти для C++/CLI
  • Инспекция для C++: спецификатор final не может использоваться с управляемыми классами.
    Инспекция для C++-спецификатора final в C++/CLI
  • Быстрое исправление для преобразования приведения в стиле C в safe_cast.
    Быстрое исправление для преобразования приведения в стиле C в safe_cast

Мы расширили возможности поиска и навигации в коде C++/CLI. ReSharper C++ теперь находит производные символы в C#-коде, а действия Go to Base Symbols и Go to Derived Symbols поддерживают импортированные объекты CLR. Кроме того, в таких многоязычных сценариях Find Usages работает более точно.

Мы планируем и дальше улучшать поддержку C++/CLI. Если в ней отсутствует что-то важное для вас, сообщите нам об этом.

Анализ кода

Помимо инспекций для Unreal Engine и C++/CLI, мы добавили новую проверку (с соответствующим быстрым исправлением), которая поможет модернизировать ваш код. ReSharper C++ теперь подсказывает, в каких случаях переменную типа std::pair можно заменить структурным связыванием из C++17:

Преобразовать в структурное связывание

Кроме того, теперь можно заранее увидеть результат быстрых исправлений Clang-Tidy — так проще выбрать нужный вариант исправления и понять, как именно будет преобразован код:

Предпросмотр быстрых исправлений Clang-Tidy

Механизм проверки орфографии теперь подсвечивает ошибки в директивах препроцессора:

Орфографические ошибки в директивах препроцессора

Мы также улучшили поддержку функций constexpr. Механизм вычисления выражений теперь поддерживает изменение значений в функциях constexpr и может обрабатывать значения типов классов:

Улучшенная поддержка функций constexpr

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

Если ожидается аргумент типа std::function, ReSharper C++ предлагает новый вариант автодополнения, который сгенерирует лямбда-аргумент с соответствующей сигнатурой:

Генерация лямбда-аргумента для std::function

Когда включен Import Symbol Completion, ReSharper C++ предлагает импортировать классы из заголовочных файлов, которые еще не включены в текущий файл. Раньше при выборе элемента из списка вариантов автодополнения ReSharper C++ подставлял директиву импорта, чтобы включить требуемый заголовочный файл. Начиная с версии 2020.2, ReSharper C++ также предлагает добавить предварительное объявление класса вместо директивы импорта. В контекстном меню по умолчанию есть оба варианта, но вы можете изменить это поведение в настройках Code Editing | C++ | Code Completion.

Добавление предваряющего объявления

Благодаря исправлениям поиск использований работает быстрее. Find usages распознает больше случаев использования конструктора в списках инициализации, заключенных в фигурные скобки, включая return-выражения:

Использования конструктора в списках инициализации, заключенных в фигурные скобки, в return-выражениях

Go to declaration теперь работает для неразрешенных идентификаторов. ReSharper C++ находит все символы с подходящим именем и дает возможность к ним перейти, чтобы понять, в чем заключается проблема:

Переход к объявлению от неразрешенных идентификаторов

В больших файлах с множеством директив препроцессора навигироваться по структуре файла в окне File Structure бывает непросто. Теперь в этом лкне директивы препроцессора по умолчанию скрыты:

File Structure со скрытыми директивами препроцессора

И наконец, ReSharper C++ теперь умеет автоматически подсвечивать использования символа, на котором установлен курсор, при перемещении по коду. Поскольку эта функция также предоставляется IntelliSense Visual Studio, подсветка ReSharper по умолчанию отключена. Однако, если вы захотите отключить IntelliSense для повышения производительности, можете включить автоматическую подсветку использований в меню Environment | Editor | Appearance.

Стиль кода и форматирование

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

  • Indent aligned ?: operator — вариант форматирования многострочных тернарных выражений.
  • Insert // on Enter in multi-line // comments – возможность запретить автоматическое добавление // при нажатии Enter в многострочных комментариях.
  • Consider only quoted includes as potential main headers – опция для лучшего распознавания основных заголовочных файлов при сортировке директив include.

Настройки порядка #include перенесены на отдельную вкладку — теперь их проще найти (Code Editing | C++ | Order of #includes).

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

Шаблоны файлов

В существующие шаблоны файлов Class и Struct добавлены два новых типа файлов: с расширениями .h и .cpp. Если вам нужно быстро создать один заголовочный или исходный файл, можете использовать новые шаблоны Header file и Source file соответственно. Чтобы создать файл из шаблона, нажмите Ctrl+Alt+Insert или выберите опцию ReSharper | Edit | Create New File:

Новые шаблоны файлов — Source file и Header file

Мы рассказали вам о главных нововведениях в ReSharper C++ 2020.2. Полный список улучшений и исправлений смотрите в нашем трекере, в котором вы всегда можете создать для нас задачу или проголосовать за существующую.

Конечно же, в новой версии вас ждет много изменений из самого ReSharper — все подробности есть на этой странице. Так, функцию Code Cleanup теперь можно запускать автоматически при сохранении файла, а также выбирать, как ее следует применить: например, только к отредактированному коду в недавно измененных файлах. Мы упростили модель лицензирования, и теперь те, у кого есть подписка на ReSharper C++, могут бесплатно пользоваться ReSharper, и наоборот. Так что если вы пишете код и на C++, и на C#, вам больше не нужно покупать вторую лицензию.

Попробуйте ReSharper C++ 2020.2 и расскажите нам о своих впечатлениях!

СКАЧАТЬ RESHARPER C++ 2020.2

Ваша команда ReSharper C++
The Drive to Develop

Подписаться

Подписаться на обновления