В 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.
Еще одна долгожданная функция: можно настроить автоматический запуск Сode Cleanup при сохранении файла.
Для этого больше не нужны никакие плагины. Вы найдете эту опцию в настройках ReSharper | Options | Code Editing | Code Cleanup
.
Теперь можно запустить Code Cleanup отдельно для недавно отредактированных или недавно открытых файлов. Это значительно ускоряет получение результата, так как ReSharper не нужно обрабатывать все решение целиком. Для более гибкой настройки поведения вы можете указать, что следует понимать под «недавно».
Кроме того, можно настроить автоматическое сохранение файлов по завершении работы Code Cleanup. Эта функция тоже включается в разделе ReSharper | Options | Code Editing | Code Cleanup
.
Есть еще несколько улучшений, которые позволяют ускорить работу Code Cleanup:
Мы полностью переработали инструмент запуска юнит-тестов: теперь для обеих сред выполнения (.NET Framework и .NET Core), запускаемых из процесса Visual Studio, используется один и тот же инструмент запуска. Это помогло решить множество проблем с обнаружением, запуском и отладкой юнит-тестов, а также дало возможность полностью управлять иерархиями юнит-тестов для .NET Core.
Обновленный инструмент включает в себя:
Заметное улучшение в интерфейсе: ReSharper теперь поддерживает атрибут DisplayName
в тестах .NET Core для фреймворков xUnit и NUnit.
При фильтрации дерева юнит-тестов, например по критериям Passed/Failed, теперь отображаются два числа: общее количество тестов и количество тестов, которые удовлетворяют критериям фильтра.
В меню навигации появилось два новых действия:
Мы добавили поддержку метода Assert.Multiple
для NUnit, который позволяет проверять несколько утверждений без прерывания после первого падения.
Временные диапазоны для сортировки по продолжительности можно менять прямо в настройках.
В новой версии расширена поддержка инструментов чтения с экрана, таких как JAWS, NVDA и Microsoft Narrator. Мы улучшили доступ скринридеров к следующим элементам:
Хорошие новости для разработчиков 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
.
В предыдущем релизе серверная часть 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, который используется для построения диаграмм, был обновлен до последней версии. Благодаря этому и нашим собственным оптимизациям, диаграммы отрисовываются значительно быстрее.
Диаграммы можно экспортировать в файлы новых форматов:
Окно диаграмм наконец поддерживает темную тему Visual Studio.
Стало намного проще переходить к использованию типов из внешних сборок. Прямо в окне результатов поиска Go to Type можно вызвать действие Find Usages. Как это работает: найдите нужный тип, выделите его в списке с помощью мыши или клавиатуры и вызовите Find Usages или Go to Usage соответствующим сочетанием клавиш.
Начиная с версии 2020.2 можно вызывать некоторые действия ReSharper, например быстрый просмотр документации, прямо из диалогов Go to Symbol и Go to File Member с помощью сочетаний клавиш, назначенных этим действиям в схеме, которую вы используете.
Мы добавили несколько новых команд для просмотра результатов популярных действий ReSharper в представлении Peek Definition.
Вызовите действие Peek Implementation, чтобы открыть окно Peek для просмотра реализации. Для этого нажмите колесико мыши, удерживая Ctrl+Alt, или нажмите Ctrl+Alt+Q, установив курсор на символ.
Чтобы просмотреть все базовые символы в представлении Peek, вызовите действие Peek Base Symbols, нажав на нужном символе Shift+Alt+Q.
Диалог Conflicts был переработан и теперь является самостоятельным этапом в интерфейсе рефакторингов. Конфликты теперь отображаются не в виде простого списка, а в виде дерева с группировкой по файлам.
При вызове рефакторингов Introduce parameter и Introduce field ReSharper уточнит, к какой части выражения следует применить рефакторинг.
ReSharper C++ 2020.2 поддерживает проектную модель Unreal Engine и различные конфигурации решения, а также более точно предлагает варианты автоматического импорта директив include
. Новая версия лучше согласуется с рекомендациями Unreal Engine: отрегулированы уровни серьезности инспекций и действия по генерации кода.
Для упрощения навигации действия Search Everywhere/Go To теперь обрабатывают символы из исходников движка как библиотечные символы. Мы также добавили несколько новых инспекций, которые помогают соблюдать правила Unreal Engine и напоминают о необходимости обновить файлы проекта в Unreal Editor.
Поскольку лицензия 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 теперь корректно выравнивает столбцы схожего кода, даже если вы форматируете только часть фрагмета, поэтому добавление точки с запятой или фигурной скобки не нарушит выравнивание.
Вот что мы улучшили при запуске dotCover из консоли:
--reportype=SummaryXml
можно создать сводный отчет, который покажет, сколько покрыто классов, методов и выражений. --reporttype=HTML,SummaryXml
--output=report.html;summary.xml
И автономный dotTrace, и dotTrace в Rider могут профилировать нативную часть приложений Mono/Unity на Windows. Просто начните сеанс со включенной опцией Enable native profiling, и в снэпшотах производительности будут показаны стеки вызовов как для нативного, так и для управляемого кода. Эта функция может быть полезна для анализа проблем производительности в играх на движке Unity.
В консольном профилировщике dotTrace тоже есть несколько улучшений:
Теперь можно открывать закрепленные объекты и объекты, недоступные из корней GC, как отдельные наборы объектов.
Улучшения консольного профилировщика dotMemory:
Мы продолжаем расширять поддержку последних версий C#. В этом релизе мы поддержали:
throw
.NullablePublicOnly
.Доступна бесплатная пробная версия на 30 дней