Что нового в ReSharper 2022.2

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

Скачать

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

C# 11

В новой версии мы поддержали еще несколько возможностей из превью-версии C# 11.

Обязательные члены

В C# 11 для типов class, struct и record можно задать список обязательных членов — свойств и полей, которые пользователь должен проинициализировать при создании объекта. Такие списки автоматически наследуются от базовых типов и способствуют уменьшению количества повторяющегося шаблонного кода.

ReSharper поддерживает ключевое слово required для членов типов class, struct и record. Кроме того:

  • Для ключевого слова required работает автодополнение.
  • Для обязательных членов показываются ошибки и предупреждения компилятора.
  • Мы добавили модификатор required в настройки Modifiers order в разделе ReSharper | Options | Code Editing | C# | Syntax Style.

Если вы создали объект типа, но пока не инициализировали его члены, воспользуйтесь быстрым исправлением Add initializer for required members: оно сгенерирует недостающие обязательные члены, вам останется только указать их значения.

Определяемые пользователем операторы с модификатором checked

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

Мы обновили инспекцию Unchecked/checked context is redundant: теперь она учитывает операторы c модификатором checked, присутствующие в контексте.

Если у вас есть набор заданных пользователем операторов и для некоторых из них уже есть версия с модификатором checked, ReSharper поможет создать операторы checked для всего набора. Новая инспекция The operator does not have a matching checked operator while other operators do укажет вам на операторы, для которых не заданы версии checked, и предложит сгенерировать их при помощи быстрого исправления.

Если вы не используете операторы checked в вашей кодовой базе, но хотели бы попробовать, воспользуйтесь контекстным действием Create matching checked operator. Оно доступно для любого определяемого пользователем оператора: вы можете легко сгенерировать версию checked с помощью меню Alt+Enter.

Сырые строки

C# 11 вводит понятие сырых строк, позволяющих легко вставить в код на C# фрагмент на другом языке или в текстовом формате.

ReSharper включает базовую поддержку сырых строк: показывает ошибки компилятора, выполняет парсинг и подсвечивает синтаксис """, позволяет использовать плейсхолдеры внутри интерполированных строк (с синтаксисом {{...}}).

Шаблоны списков

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

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

Больше возможностей C# 11

Больше возможностей C# 11

  • Теперь ReSharper полностью поддерживает новый оператор беззнакового сдвига вправо (>>>), в том числе перегрузку оператора >>>.
  • Поскольку в C# 11 можно сопоставлять строковые константы со значениями типа Span<char> и ReadOnlySpan<char>, ReSharper 2022.2 позволяет заменять строковые литералы на конструкции Span<char>.

Оптимизация анализа по всему решению

Мы оптимизировали использование памяти при анализе по всему решению — и с точки зрения потребления, и с точки зрения трафика (количества запросов на выделение памяти).

Чтобы создать отчет об использовании при анализе по всему решению, движок сохраняет список имеющихся проблем и информацию об использовании типов и членов. На основе этой же информации ReSharper предлагает пользователю некоторые инспекции, например Public member is never used. Данные об использовании типов и членов являются «горячими», то есть постоянно обновляются в ходе редактирования кода, поэтому их нельзя сгрузить на диск. Если ваше решение насчитывает много типов и членов типов, IDE потребуется довольно много памяти. Мы проверили, какие данные сохраняются, и нашли закономерности, которые позволили нам дедуплицировать и нормализовать данные. Также мы применили особый тип коллекций, за счет чего еще больше сократили рабочее множество. Таким образом, нам удалось снизить потребление памяти в 5-10 раз и ускорить анализ по всему решению.

Анализ кода

Операторы верхнего уровня

В .NET 6 появились новые шаблоны проектов, использующие операторы C# 9 верхнего уровня. С помощью таких операторов проще объявить класс Program или метод public static void Main(string[] args). Но иногда необходимо (или желательно) использовать явный startup-класс Program. Поэтому мы добавили новое контекстное действие To explicit 'Program' class, которое приводит выражение к прежнему стилю.

Если у вас уже есть класс Program и вы хотите перейти на операторы верхнего уровня, используйте контекстное действие Convert to top-level code.

Обновленная поддержка INotifyPropertyChanged

Мы обновили поддержку интерфейса INotifyPropertyChanged. Теперь мы не используем внешние аннотации для поиска общих API INotifyPropertyChanged и потому можем поддержать больше фреймворков MVVM и базовых классов INotifyPropertyChanged. В новой версии используется метод SetField с лаконичным синтаксисом настройки уведомлений INotifyPropertyChanged.

Также теперь можно настроить уведомления об изменении свойств в определенном типе или файле.

Рефакторинги в меню Alt+Enter

Мы выявили самые популярные рефакторинги и добавили соответствующие контекстные действия в меню Alt+Enter — так они всегда будут под рукой.

Контекстное действие Extract method для выделенного фрагмента кода теперь тоже вызывается с помощью Alt+Enter.

Также мы добавили для сигнатуры членов контекстные действия, соответствующие рефакторингам Change Signature, Transform Parameters, Convert to extension method и Convert Property To Method.

Новые подсказки при использовании оператора nameof

ReSharper 2022.2 фиксирует регистрацию DependencyProperty в проектах WPF и предлагает получить имя соответствующего свойства CLR с помощью оператора nameof. Встроенные шаблоны Live Templates теперь тоже используют nameof вместо встроенных литералов.

ReSharper не всегда понимает, что означает тот или иной строковый литерал, именующий фрагмент кода (например, член или тип). Поэтому мы добавили для строковых литералов с идентификаторами новое контекстное действие Capture element name: оно позволяет сослаться на сущность, содержащую нужный строковый литерал.

Структурный поиск и замена

Быстрые исправления для паттернов структурного поиска и замены теперь также применимы к файлам, папкам, проектам и решениям. Это касается паттернов, созданных в разделе ReSharper | Options | Code Inspection | Custom Patterns, встроенных инспекций ReSharper и соответствующих быстрых исправлений на основе структурного поиска и замены.

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

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

ReSharper 2022.2 заменяет некоторые паттерны с is внутри выражений ?: на более краткие паттерны с as внутри выражений ??. Это позволит вам избавиться от временных переменных.

Виртуальное форматирование

В ReSharper появился виртуальный форматер — инструмент просмотра кода, позволяющий отформатировать его произвольным образом и при этом не вносить изменений в исходники. Например, вы можете выделить параметры в столбцы или увеличить отступы. Виртуальный форматер призван улучшить читаемость кода, упростить его поддержку, а также приспособить IDE для слабовидящих пользователей и пользователей с неврологическими особенностями. Подключить виртуальный форматер со стандартными настройками можно в разделе ReSharper | Options | Environment | Inlay Hints | General. Чтобы задать свои настройки форматирования, отметьте галочкой опцию Use dedicated Virtual Formatter style settings и выберите язык C#.

Очистка диска

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

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

Поддержка JavaScript и TypeScript

Поддержка JavaScript и TypeScript в ReSharper заметно устарела, и ее скорость работы оставляет желать лучшего. Текущая реализация не позволяет нам быстро реагировать на изменения языка TypeScript и успевать за новыми версиями. После долгих обсуждений мы решили приостановить поддержку JavaScript и TypeScript. В ReSharper 2022.2 поддержка TS/JS по умолчанию отключена. Чтобы включить ее, нужно перейти в раздел ReSharper | Options | Environment | Products & Features и выбрать опцию JavaScript and TypeScript.

Unreal Engine

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

  • Узнать о производных классах Blueprint и посмотреть список всех наследников.
  • Заметить, что у UFunction есть реализации в Blueprints, и найти все такие случаи.
  • Быстро проверить состояние UProperty, в том числе, узнать, был ли он переопределен и какое значение задано в Blueprint-файле.

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

Улучшенная поддержка нативных системных вызовов dotUltimate

Дерево вызовов Timeline Call теперь предоставляет более подробную информацию о нативных системных вызовах, в том числе системных вызовах Windows (ntoskrnl.exe) и вызовах драйверов устройств (*.sys).

Настройки StyleCop.Analyzers

ReSharper 2022.2 проверяет, есть ли в проектах ссылки на пакет StyleCop.Analyzers, и считывает соответствующие настройки из файлов stylecop.json и .ruleset. Заголовки файлов и настройки отступов ReSharper берет из файла stylecop.json, а правила StyleCop — из актуального файла .ruleset.

Сборки ReadyToRun и NGen

  • Мы улучшили представление сборок ReadyToRun (R2R) и NGen в Assembly Explorer: Теперь рядом с именем каждой сборки отображается значок процессора и метка ngen либо R2R.
  • В дереве Metadata появился заголовок ReadyToRun.
Скачать

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