В ReSharper 2022.2 мы поддержали ряд возможностей C# 11, включая обязательные члены, определяемые пользователем операторы с модификатором checked, сырые строки и шаблоны списков. Мы оптимизировали потребление памяти при анализе по всему решению. Кроме того, мы добавили виртуальный форматер, с помощью которого можно отформатировать код нужным вам образом, при этом не меняя исходники, а также инструмент для очистки диска, позволяющий настроить автоматическое удаление временных файлов, которые ReSharper создает при обработке вашего кода.
Доступна бесплатная пробная версия на 30 дней
В новой версии мы поддержали еще несколько возможностей из превью-версии C# 11.
В C# 11 для типов class
, struct
и record
можно задать список обязательных членов — свойств и полей, которые пользователь должен проинициализировать при создании объекта. Такие списки автоматически наследуются от базовых типов и способствуют уменьшению количества повторяющегося шаблонного кода.
ReSharper поддерживает ключевое слово required
для членов типов class
, struct
и record
. Кроме того:
required
в настройки Modifiers order в разделе ReSharper | Options | Code Editing | C# | Syntax Style
. Если вы создали объект типа, но пока не инициализировали его члены, воспользуйтесь быстрым исправлением Add initializer for required members: оно сгенерирует недостающие обязательные члены, вам останется только указать их значения.
Операторы с модификатором 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 тоже поддерживает шаблоны списков: проверяет на ошибки, делает анализ кода и предлагает автодополнение. В будущих версиях появятся дополнительные рефакторинги и инспекции, позволяющие внедрить шаблоны списков в имеющийся код.
>>>
), в том числе перегрузку оператора >>>
. 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 — так они всегда будут под рукой.
Контекстное действие 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, где вы можете:
Поддержка JavaScript и TypeScript в ReSharper заметно устарела, и ее скорость работы оставляет желать лучшего. Текущая реализация не позволяет нам быстро реагировать на изменения языка TypeScript и успевать за новыми версиями. После долгих обсуждений мы решили приостановить поддержку JavaScript и TypeScript. В ReSharper 2022.2 поддержка TS/JS по умолчанию отключена. Чтобы включить ее, нужно перейти в раздел ReSharper | Options | Environment | Products & Features
и выбрать опцию JavaScript and TypeScript.
В ReSharper C++ появились специальные подсказки для Blueprint, которые помогут вам лучше видеть общую картину. Вы сможете:
UFunction
есть реализации в Blueprints, и найти все такие случаи. UProperty
, в том числе, узнать, был ли он переопределен и какое значение задано в Blueprint-файле. Мы также добавили инспекции, которые сообщают о несоответствиях между типичными для Blueprint спецификаторами функций, используемыми в коде, и самими Blueprint.
ReSharper 2022.2 проверяет, есть ли в проектах ссылки на пакет StyleCop.Analyzers, и считывает соответствующие настройки из файлов stylecop.json
и .ruleset
. Заголовки файлов и настройки отступов ReSharper берет из файла stylecop.json
, а правила StyleCop — из актуального файла .ruleset
.
ngen
либо R2R
. Доступна бесплатная пробная версия на 30 дней