Что нового в ReSharper 2020.2

В ReSharper 2020.2 добавлены новые инспекции и быстрые исправления для C#8 и ссылочных типов, допускающих значение null, появилась долгожданная возможность автоматически запускать Сode Cleanup при сохранении файла, обновлен инструмент запуска юнит-тестов, а также улучшена поддержка инструментов чтения с экрана. В ReSharper C++ значительно расширена функциональность для разработки на Unreal Engine, улучшены поддержка C++/CLI, навигация и анализ кода.

Скачать

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

Анализ кода

Механизм анализа кода на предмет допустимости значения null теперь распознает больше различных случаев, включая такие, где фигурируют операции деконструкции или циклы foreach. Он также предоставляет соответствующие быстрые исправления.

Механизм анализа кода теперь учитывает атрибуты JetBrains.Annotations (как NotNull, так и CanBeNull), используемые в API, даже если в коде запрещено использование ссылочных типов, допускающих значение null (#nullable disable).

Кроме того, для IAsyncEnumerable<T> теперь доступны контекстные действия для преобразования foreach в LINQ-выражения и обратно, если для вашего проекта установлен NuGet-пакет System.Linq.Async.

Теперь можно легко сгенерировать реализации IEqualityComparer<T> и IComparer<T> с помощью соответствующих быстрых исправлений.

Механизм анализа кода теперь учитывает аннотации компилятора (такие как AllowNull и DisallowNull) при проверке допустимости значения null для реализованных и переопределенных членов.

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

Анализ кода теперь учитывает правила dotnet_diagnostic из файла .editorconfig. Укажите в файле .editorconfig минимальный уровень значимости инспекций (пример: dotnet_diagnostic.CS1058.severity = hint), и ReSharper будет учитывать его при отображении инспекций.

В этой версии также была улучшена поддержка реализаций интерфейсов по умолчанию. Индикатором в левом поле редактора кода обозначается реализация или переопределение метода; кроме того, поддержка этой возможности языка C# распространяется на рефакторинги и навигацию.

Для кода XAML теперь доступны встроенные подсказки. Подсказки отображаются для названий свойств разметки и для свойств DataContext, а также для внешних и внутренних отступов (чтобы не приходилось запоминать их порядок).

Быстрое исправление Suppress nullable warning with ! можно отключить для отдельного решения через меню, вызываемое нажатием Alt+Enter.

Очистка кода с помощью Code Cleanup

Еще одна долгожданная функция: можно настроить автоматический запуск Сode Cleanup при сохранении файла.

Для этого больше не нужны никакие плагины. Вы найдете эту опцию в настройках ReSharper | Options | Code Editing | Code Cleanup.

Теперь можно запустить Code Cleanup отдельно для недавно отредактированных или недавно открытых файлов. Это значительно ускоряет получение результата, так как ReSharper не нужно обрабатывать все решение целиком. Для более гибкой настройки поведения вы можете указать, что следует понимать под «недавно».

Кроме того, можно настроить автоматическое сохранение файлов по завершении работы Code Cleanup. Эта функция тоже включается в разделе ReSharper | Options | Code Editing | Code Cleanup.

Есть еще несколько улучшений, которые позволяют ускорить работу Code Cleanup:

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

Юнит-тестирование

Мы полностью переработали инструмент запуска юнит-тестов: теперь для обеих сред выполнения (.NET Framework и .NET Core), запускаемых из процесса Visual Studio, используется один и тот же инструмент запуска. Это помогло решить множество проблем с обнаружением, запуском и отладкой юнит-тестов, а также дало возможность полностью управлять иерархиями юнит-тестов для .NET Core.

Обновленный инструмент включает в себя:

  • Встроенную поддержку MSFakes для фреймворков юнит-тестирования NUnit, xUnit и MSTest v2.
  • Встроенную поддержку TypeMock Isolator для NUnit, xUnit и MSTest v2.

Заметное улучшение в интерфейсе: ReSharper теперь поддерживает атрибут DisplayName в тестах .NET Core для фреймворков xUnit и NUnit.

При фильтрации дерева юнит-тестов, например по критериям Passed/Failed, теперь отображаются два числа: общее количество тестов и количество тестов, которые удовлетворяют критериям фильтра.

В меню навигации появилось два новых действия:

  • Показать все сеансы юнит-тестирования, к которым относится данный тест.
  • Показать тест в окне Unit Test Explorer.

Мы добавили поддержку метода Assert.Multiple для NUnit, который позволяет проверять несколько утверждений без прерывания после первого падения.

Временные диапазоны для сортировки по продолжительности можно менять прямо в настройках.

Улучшения интерфейса

В новой версии расширена поддержка инструментов чтения с экрана, таких как JAWS, NVDA и Microsoft Narrator. Мы улучшили доступ скринридеров к следующим элементам:

  • Спискам и деревьям в разных окнах ReSharper.
  • Содержимому диалога Options.
  • Содержимому меню AltEnter.
  • Всем диалогам Go To.
  • Всплывающему окну автодополнения.

Поддержка x:Bind

Хорошие новости для разработчиков UWP: мы наконец-то реализовали поддержку компилируемых привязок x:Bind.

ReSharper корректно интерпретирует код x:Bind и предлагает различные инспекции и соответствующие быстрые исправления. Он предупреждает об отсутствующих сеттерах свойств и атрибутах BindBack, а также о коллизиях при перегрузке методов. Кроме того, доступен набор быстрых исправлений Create from Usage, позволяющих сгенерировать в выделенном коде C# полноценное поле, свойство или метод.

Для атрибутов propertyPath, BindBack и UpdateSourceTrigger внутри выражений x:Bind доступно автодополнение и информация о параметрах.

Рефакторинги Change Signature и Safe Delete теперь распознают вызовы методов в коде XAML и вносят в них соответствующие изменения, а рефакторинги Make Static/Const и Encapsulate Field способны работать при вызове напрямую из кода XAML и корректно обновляют код XAML, если вызвать их из выделенного кода C#.

Анализ кода x:Bind поддерживает проверки на допустимость значения null. ReSharper теперь показывает инспекции, связанные с использованием значения null, непосредственно в коде XAML, если код C# содержит атрибуты CanBeNull и NotNull; например, для аргументов метода, на который ссылается свойство propertyPath, могут быть показаны инспекции Possible System.NullReferenceException и Possible null assignment to non-nullable entity.

Другие возможности ReSharper, такие как действие Find usages или действие перехода к объявлению, также умеют работать с привязками x:Bind.

ReSharper Command Line Tools

В предыдущем релизе серверная часть Rider на macOS и Linux была переведена с Mono на .NET Core. Теперь на .NET Core работают и инструменты командной строки ReSharper на Windows, Linux и macOS.

Обратите внимание: инструменты командной строки ReSharper больше не включают в себя Mono, а на macOS и Linux требуют наличия .NET Core 3.1.

Еще одно преимущество использования .NET Core как среды выполнения заключается в том, что можно установить ReSharper Command Line Tools в качестве глобального инструмента .NET Core. Для этого используйте следующую команду:

dotnet tool install -g JetBrains.ReSharper.GlobalTools --version 2020.2.0-*

И запустите инструмент с jb tool_name [options] , например:

jb inspectcode yourSolution.sln -o=<pathToOutputFile>

Диаграммы зависимостей проектов

Движок yFiles, который используется для построения диаграмм, был обновлен до последней версии. Благодаря этому и нашим собственным оптимизациям, диаграммы отрисовываются значительно быстрее.

Диаграммы можно экспортировать в файлы новых форматов:

  • в GraphML для дальнейшего анализа с использованием внешних инструментов.
  • в XPS для просмотра больших диаграмм, которые невозможно экспортировать в файл PNG.

Окно диаграмм наконец поддерживает темную тему Visual Studio.

Обновления в навигации

Стало намного проще переходить к использованию типов из внешних сборок. Прямо в окне результатов поиска Go to Type можно вызвать действие Find Usages. Как это работает: найдите нужный тип, выделите его в списке с помощью мыши или клавиатуры и вызовите Find Usages или Go to Usage соответствующим сочетанием клавиш.

Начиная с версии 2020.2 можно вызывать некоторые действия ReSharper, например быстрый просмотр документации, прямо из диалогов Go to Symbol и Go to File Member с помощью сочетаний клавиш, назначенных этим действиям в схеме, которую вы используете.

Новые действия Peek

Мы добавили несколько новых команд для просмотра результатов популярных действий ReSharper в представлении Peek Definition.

Вызовите действие Peek Implementation, чтобы открыть окно Peek для просмотра реализации. Для этого нажмите колесико мыши, удерживая Ctrl+Alt, или нажмите Ctrl+Alt+Q, установив курсор на символ.

Чтобы просмотреть все базовые символы в представлении Peek, вызовите действие Peek Base Symbols, нажав на нужном символе Shift+Alt+Q.

Для просмотра использований символа в окне Peek вызовите действие Peek Usages: нажмите колесико мыши, удерживая Ctrl.

Рефакторинги

Диалог Conflicts был переработан и теперь является самостоятельным этапом в интерфейсе рефакторингов. Конфликты теперь отображаются не в виде простого списка, а в виде дерева с группировкой по файлам.

При вызове рефакторингов Introduce parameter и Introduce field ReSharper уточнит, к какой части выражения следует применить рефакторинг.

Улучшения для Unreal Engine

Unreal Engine

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

Для упрощения навигации действия Search Everywhere/Go To теперь обрабатывают символы из исходников движка как библиотечные символы. Мы также добавили несколько новых инспекций, которые помогают соблюдать правила Unreal Engine и напоминают о необходимости обновить файлы проекта в Unreal Editor.

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

C++/CLI

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

ReSharper C++ теперь находит производные символы в C#-коде, а действия Go to Base Symbols и Go to Derived Symbols поддерживают импортированные объекты CLR.

ReSharper C++ теперь проверяет способ выделения памяти и предлагает быстрое исправление для замены gcnew на new (и наоборот), если целевой тип недопустим. Еще одна новая инспекция предупредит вас о том, что вы пытаетесь использовать C++-спецификатор final в управляемом классе или интерфейсе, и предложит заменить его на sealed. Кроме того, теперь можно преобразовать приведение в стиле C в safe_cast с помощью быстрого исправления.

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

Менеджер сборок

  • Каналы пакетов NuGet v3 теперь поддерживаются в диалогах Open from NuGet, Open from NuGet packages cache и Open NuGet packages.config.
  • В диалогах Open from NuGet и Open from NuGet packages cache объекты с одинаковыми именами теперь свернуты.
  • Пакеты NuGet отсортированы в алфавитном порядке.

Другие возможности

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

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

Инструменты и расширения для .NET

dotCover dotUltimate

Вот что мы улучшили при запуске dotCover из консоли:

  • С помощью параметра --reportype=SummaryXml можно создать сводный отчет, который покажет, сколько покрыто классов, методов и выражений.
  • Из консоли можно создавать отчеты сразу нескольких типов: --reporttype=HTML,SummaryXml --output=report.html;summary.xml
  • Теперь dotCover для Linux (Debian, Ubuntu) может выполнять анализ в системах ARM64.

Подробнее

dotTrace dotUltimate

И автономный dotTrace, и dotTrace в Rider могут профилировать нативную часть приложений Mono/Unity на Windows. Просто начните сеанс со включенной опцией Enable native profiling, и в снэпшотах производительности будут показаны стеки вызовов как для нативного, так и для управляемого кода. Эта функция может быть полезна для анализа проблем производительности в играх на движке Unity.

В консольном профилировщике dotTrace тоже есть несколько улучшений:

  • Можно контролировать сеанс профилирования (делать снимки, отсоединяться от процесса профилирования и т. д.), отправляя команды в stdin или в файл.
  • Профилировщик для Linux (Debian, Ubuntu) теперь способен профилировать приложения в системах ARM64.

Подробнее

dotMemory dotUltimate

Теперь можно открывать закрепленные объекты и объекты, недоступные из корней GC, как отдельные наборы объектов.

Улучшения консольного профилировщика dotMemory:

  • Помимо Windows, консольный профилировщик теперь работает на платформах Linux и macOS.
  • Профилировщик для Linux (Debian, Ubuntu) способен профилировать приложения не только в системах x64, но и в системах ARM64.

Подробнее

dotPeek 

Мы продолжаем расширять поддержку последних версий C#. В этом релизе мы поддержали:

  • Члены, у которых тело представляет собой одно выражение.
  • Выражения throw.
  • Параметры по умолчанию и именованные аргументы.
  • Атрибут NullablePublicOnly.

Подробнее

Скачать

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