Что нового в ReSharper 2022.3

ReSharper 2022.3 представляет базовую поддержку новых возможностей C# 11, включая литералы UTF-8, локальные типы файлов, статические виртуальные члены, сопоставление span с образцом и др. В этой версии мы переработали подсветку кода, реализовали обнаружение уязвимых зависимостей NuGet-пакетов, а также включили импорт и экспорт диаграмм зависимостей типов и проектов в формате GraphML. Кроме того, появилась ранняя поддержка Microsoft Visual Studio, запущенной на ARM64.

Скачать

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

C# 11

Мы доработали базовую поддержку новейших возможностей C# 11:

Литералы UTF-8

Мы добавили базовую поддержку литералов UTF-8. Теперь анализ кода предлагает для литералов суффикс u8 вместо метода System.Text.Encoding.UTF8.GetBytes() или байтового массива с соответствующими символами UTF8. Кроме того, добавлен набор предупреждений и ошибок компилятора для литералов UTF-8.

Локальные для файла типы

В базовую поддержку локальных для файла типов входит распознавание нового синтаксиса, модификатор доступа file для типов, а также предупреждения и ошибки компиляторами с соответствующими быстрыми исправлениями, например Move class to outer scope, если модификатор file указан для вложенного класса. Кроме того, добавлено удобное контекстное действие для преобразования общего типа в локальный для файла.

Сырые строки

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

Предложения для шаблонов списков

В новой версии мы добавили предложения по использованию нового синтаксиса C# 11 для шаблонов списков при проверке соответствующих элементов коллекции. Это заменяет привычные проверки длины для коллекций с последующим использованием выражения доступа к индексатору.

Статические виртуальные члены

Начиная с версии C# 11, можно использовать в интерфейсах модификаторы abstract и virtual для статических (static) членов и использовать такие члены в дженериках с параметрами типа, обусловленными соответствующим интерфейсом. В новой версии ReSharper можно обрабатывать полиморфные static-члены так же, как и обычные полиморфные члены:

  • метки наследования на поле редактора;
  • быстрый переход к членам реализующего/суперкласса;
  • генерация отсутствующих реализаций;
  • варианты автодополнения кода после ключевого слова override включают в себя также члены интерфейса, поэтому теперь удобно реализовать абстрактные или virtual static члены.

Беззнаковый оператор сдвига вправо (>>>)

Теперь ReSharper распознает громоздкий шаблон кода, который C#-разработчикам приходится писать для выполнения беззнакового сдвига вправо для типов данных со знаком, и предлагает использовать вместо него оператор беззнакового сдвига (>>>), который есть в C# 11.

Сопоставление с образцом в разных диапазонах

Если вы обрабатываете диапазоны (Spans) символов, то, вероятно, часто пользуетесь методом MemoryExtensions.SequenceEqual. C# 11 упрощает такие проверки. Теперь диапазоны символов можно просто сравнить с образцами строковых литералов, используя выражения is или switch.

Новая версия ReSharper предлагает использовать выражения is или switch вместо многочисленных выражений if.

Поля ref и ключевое слово scoped

Начиная с версии C#11, можно объявлять поля ref внутри ref struct. ReSharper поддерживает это новое синтаксическое правило, обеспечивает все необходимые ошибки и предупреждения компилятора, показывает кодовое слово ref в вариантах автодополнения кода и позволяет инициализировать такие поля в конструкторе.

ReSharper также знает новое ключевое слово scoped, которое можно использовать для аргументов и локальных переменных by-ref или ref struct. Поддержка включает в себя корректную обработку нового синтаксиса, использование ключевого слова scoped в автодополнении кода, а также сохранение ключевого слова scoped при переопределении метода. Кроме того, IDE проверяет совместимость модификаторов scoped и предлагает быстрые исправления для несоответствующих параметров scoped при переопределении, реализации интерфейса и преобразовании делегатов.

В C# 11 и .NET 7 были также изменены правила безопасности языка для ссылок ref. Эти изменения определяют, какие операции доступны для переменных by-ref и ref struct, чтобы обеспечить безопасность ссылок в управляемом коде за счет введения полей ref. ReSharper учитывает эти изменения и поможет разработчикам найти те части проекта, которые необходимо обновить и аннотировать, используя новое ключевое слово scoped, при переходе на C# 11 или .NET 7.

Языковые вставки

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

Языковые вставки теперь работают в сырых строках C# 11.

ReSharper supports the [StringSyntax] attribute from .NET 7, along with its different syntaxes for language injection and code completion.

Общие изменения в C#

Значок Global imports на полях редактора

Новый значок на полях редактора сообщает пользователям об неявном импорте пространства имен в файлах C# и Razor.

Нажав Alt+Enter, когда курсор находится в соответствующей строке, вы получите полный список неявных импортов и информацию об исходном файле, где находятся соответствующие директивы global using. Если вы выберете конкретное импортированное пространство имен, ReSharper переведет вас к месту, где оно объявлено, включая переход к тегам <Using Include="Some.NameSpace" /> в файле проекта .csproj.

Кроме того, ReSharper показывает глобальные импорты из _Imports.razor и позволяет перейти к соответствующим определениям импорта.

Автодополнение строки форматирования

В .NET 7 были добавлены числовые типы Int128 и UInt128, поэтому мы обновили предложения автодополнения для спецификатора формата.

Кроме того, мы добавили поддержку типов даты и времени DateOnly и TimeOnly из .NET 6, а также для числового типа с плавающей точкой половинной точности Half, появившегося в .NET 5. Раньше IDE эти типы не поддерживала.

Преобразование тривиальных шаблонов в выражения

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

Подсказки автодополнения кода для выражений, возвращающих void

Иногда при написании кода после вызова разработчик практически не получает осмысленных предложений. Это происходит, когда вызов не привел к появлению какого-либо значения, если был вызван метод, возвращающий void. Обычно, чтобы понять это, нужно выполнить несколько действий в IDE: вернуться назад и перейти к объявлению метода или навести мышь на вызов. В этой версии мы добавили подсказку void для вызовов такого типа, возвращающих void. Теперь разработчик сразу получает информацию о типе, который станет результатом вызова. Если принять предложение void, после вызова будет добавлена точка с запятой, если ее там еще не было.

Подсветка кода

В ReSharper 2022.3 доработана подсветка кода и подчеркивания. Из-за различий во внутренней логике ReSharper раньше конфликтовал с анализаторами стиля кода Microsoft Roslyn, и в результате появлялись перекрытия подсветки или одна и та же подсветка отображалась в разных местах, а подчеркивания дублировались. Теперь для большинства таких случаев различия в логике устранены, а в тех нечастых ситуациях, когда проблема возникает, добавлены ошибки с четкими указаниями по устранению конфликта.

Безопасность

Использование в решении пакетов NuGet с открытым исходным кодом может привести к появлению уязвимостей. И хотя для предотвращения таких угроз есть специальные инструменты NuGet, гораздо удобнее иметь такой инструмент прямо в IDE, чтобы обнаруживать уязвимости на этапе проектирования. Поэтому мы добавили в ReSharper функцию выявления уязвимых зависимостей. Начиная с этой версии, в файлах .csproj и .vbproj все пораженные зависимости будут подсвечиваться.

Поддержка Visual Studio 2022 на ARM64

ReSharper теперь можно интегрировать в Visual Studio на устройствах с процессорами ARM. Мы предоставляем начальную поддержку всех основных процессов разработки, за исключением проверки орфографии с помощью ReSpeller.

Мы также обновили установщик, чтобы обеспечить поддержку x64 и ARM64. Правильная версия будет установлена автоматически в соответствии с архитектурой вашего процессора.

Поддержка Windows ARM64

dotPeek, dotMemory, dotTrace и dotCover, а также инструменты командной строки ReSharper теперь можно запускать в Windows ARM64.

Декомпиляция

Встроенный декомпилятор в версии 2022.3 поддерживает:

  • члены интерфейса static abstract и static virtual;
  • общие атрибуты;
  • пользовательские операторы checked;
  • оператор беззнакового сдвига вправо.

Просмотрщик IL

Окно IL Viewer теперь может декомпилировать код на разных уровнях языковых конструкций C#. Доступны два уровня C#: верхний уровень, где некоторые синтаксические конструкции упрощены благодаря новым возможностям языка, и нижний уровень, где можно посмотреть эти конструкции без синтаксического сахара.

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

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

Динамический анализ программы

В динамический анализ программы (DPA) добавлены новые инспекции. Они помогают найти различные проблемы с использованием баз данных, в том числе:

  • слишком долгое время выполнения команд;
  • слишком много подключений к базам данных;
  • слишком много команд баз данных выполняются одновременно;
  • команды возвращают слишком много записей.

Новые инспекции доступны для всех приложений, использующих Entity Framework Core и .NET Data Provider для SQL Server.

Модули C++20

В ReSharper C++ 2022.3 появилась экспериментальная поддержка модулей из C++20. Мы обновили языковой движок и многие функции ReSharper C++ для работы с новой моделью компиляции, поддерживающей как именованные модули, так и заголовочные блоки.

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

Интеграция с сlang-format

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

Скачать

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