Новая версия ReSharper совместима с Visual Studio 2022! Мы улучшили поддержку C# 10 — добавили пространства имен на уровне файлов директивы global using, новые возможности работы с NRT и многое другое. Также мы добавили новые значки на поля редактора, улучшили возможность Copy Code Reference и поддержали действие Find Usages для пользовательских операторов неявного преобразования.
Доступна бесплатная пробная версия на 30 дней
ReSharper 2021.3 поддерживает релизную сборку Visual Studio 2022. Это значит, что вы сможете пользоваться привычным набором функций Visual Studio. Поскольку Visual Studio 2022 является 64-разрядным приложением, ReSharper может использовать любое количество оперативной памяти и работать быстрее.
Чтобы пользоваться ReSharper с новой версией Visual Studio, при установке dotUltimate 2021.3 выберите опцию VS2022.
Не так давно вышел C# 10, и мы продолжаем расширять его поддержку. В новой версии мы поддержали пространства имен на уровне файла, директиву global using, атрибут CallerArgumentExpression, а также обработчики интерполированных строк и лямбды C# 10.
Начнем с пространств имен на уровне файла. Мы поддержали соответсвующий синтаксис, а также добавили для него настройки стиля (ReSharper | Options | Code Editing | C# | Syntax Style | Code body | Namespaces). Как только вы выберете стиль, ReSharper укажет на код, требующий изменений, и предложит быстрые исправления. Вы сможете в один клик применить изменения ко всему проекту или решению.
Также мы добавили два контекстных действия, позволяющих вернуть прежний стиль синтаксиса: Convert to file-scoped namespace и Convert to block-scoped namespace.
Подробнее о поддержке пространств имен на уровне файла читайте в нашем блоге
Перейдем к директивам global using. Теперь при анализе кода ReSharper учитывает директивы using, отмеченные ключевым словом global, и использует эти данные для разрешения символов во всех файлах проекта. ReSharper уведомит вас, если директива global using располагается в неправильном месте.
Также ReSharper подсветит директивы global using, которые не используются в проекте, и вы сможете удалить их с помощью быстрого исправления.
Мы добавили расширенную поддержку атрибута CallerArgumentExpression, включая автодополнение кода и инспекции.
Подробнее о Caller Argument Expressions читайте в нашем блоге.
C# 10 вводит понятие обработчиков интерполированных строк. Выражения с интерполированными строками будут работать быстрее в .NET 6, а обработчики позволят использовать значения Span<char>, чтобы заполнить интерполяцию. Те, кто пишет свои библиотеки, смогут использовать обработчики для того, чтобы следить за преобразованием интерполированных выражений в строки. ReSharper 2021.3 распознает обработчики интерполированных строк в библиотечном коде и предлагает безопасно вводить интерполяцию строк в других местах.
Чтобы объекты record struct работали быстрее, ReSharper предложит отметить их ключевым словом readonly. Чтобы лишний раз не перегружать объявления типов различными модификаторами, эта инспекция будет предложена только тогда, когда тип record содержит члены экземпляра без мутации, а во всем решении нет мутации через сеттеры (чтобы определить это, необходимо включить SWEA).
C# 10 позволяет немного упростить синтаксис сопоставления с образцом: для доступа к внутренним элементам можно использовать не вложенные скобки, а синтаксис с точкой.
Мы добавили в ReSharper соответствующую инспекцию, быстрое исправление, а также контекстное действие для отмены быстрого исправления.
А еще:
Люди часто используют код из внешних источников, например c сайта stackoverflow.com. В последнее время в примерах кода из интернета все чаще используется синтаксис NRT (cсылочных типов, допускающих значение null). Но что, если ваше решение не поддерживает NRT? Мы добавили два быстрых исправления, которые позволяют избавиться от синтаксиса NRT при вставке такого кода в проект: Replace with JetBrains.Annotations attributes и Remove nullable annotations without ‘#nullable’ context.
Время от времени соответствие аргументов типов ограничениям допустимости значения null может нарушаться. Мы добавили ряд быстрых исправлений, позволяющих:
Мы добавили быстрые исправления, позволяющие отредактировать аннотации при параметрах, чьи значения по умолчанию допускают null, — на уровне файла, проекта или всего решения.
Также появилось быстрое исправление, с помощью которого можно разрешить значения null для параметров, которые явно проверяются на null внутри метода.
Мы добавили несколько быстрых исправлений и контекстное действие для статических локальных/анонимных функций с замыканиями:
Новая инспекция Simplify string interpolation и соответствующее быстрое исправление позволяют заменить вызовы методов .PadLeft()
и .PadRight()
на выравнивание в плейсхолдерах внутри интерполированных строк.
Помимо добавления типа record struct
(C# 10) мы улучшили поддержку обычных структур. Многие разработчики все еще используют для DTO классы с инициализаторами объекта. Теперь вы можете быстро преобразовывать их в конструкторы с параметрами. Это можно сделать непосредственно в объявлении record
или в любом инициализаторе объекта. Также вы можете преобразовывать DTO, которые задают конструктор, включающий инициализацию свойств.
Некоторое время назад ReSharper начал уведомлять о нарушениях консистентности при блокировке полей. В этой версии мы добавили инспекцию, которая учитывает порядок блокировки ресурсов и сообщает о возможных deadlock-циклах.
Мы добавили проверку целесообразности выполнения целочисленных арифметических операций для типов byte
, sbyte
, short
, ushort
, uint
, long
, ulong
и enum
. Они помогут вам устранить недостижимый код.
Чтобы длинные и сложные условия было проще читать, ReSharper теперь подсвечивает группы логических операторов (например цепочки &&
и ||
в C#).
Выполнение быстрых исправлений и контекстных действий для папок, проектов и решений занимает меньше времени.
Если вы включите Solution-Wide Error Analysis (SWEA) и отслеживание предупреждений (Monitor warnings), то сможете значительно ускорить поиск ошибок, которые нужно исправить: используя результаты SWEA, ReSharper отфильтрует файлы и оставит для рассмотрения только те, в которых были найдены ошибки.
Также у нас хорошие новости для тех, кто не использует SWEA в своих решениях: теперь ReSharper использует все доступные ядра процессора и может выполнять анализ кода параллельно. Это сокращает общее время выполнения быстрых исправлений и контекстных действий.
Анализ кода для файлов с объемными методами стал работать намного быстрее. К объемным методам относятся:
switch
; На полях редактора появились новые значки, позволяющие перемещаться по иерархии наследования класса, интерфейса или структуры. Значки ↑O
/↑I
указывают на наследование/реализацию сущностью другого класса или интерфейса. Если иерархия наследования сложнее, нажмите на значок — в открывшемся меню будут перечислены все предки (полная иерархия). Если класс одновременно реализует/наследует и интерфейс, и класс, на полях редактора отобразится значок ↑IO
.
Теперь ReSharper по умолчанию отмечает на полях члены классов. Если член класса переопределяется в производных классах, напротив него на полях редактора слева отобразится значок ↓O
. Нажмите на значок, чтобы:
Теперь действие Find Usages работает для операторов неявного преобразования, заданных пользователем. Для этого используется тот же механизм, что и для подсказок при преобразовании типов.
С помощью этого действия вы можете искать использования операторов неявного преобразования, заданные пользователем, и затем напрямую переходить к соответствующим фрагментам кода.
Имейте в виду, что на поиск и отображение использований алгоритму требуется время.
Если при отладке вы вызовите действие Go to Type of Symbol для переменной или параметра типа интерфейса, то перейдете не к объявлению интерфейса, а к той реализации, которая используется в текущем фрейме.
Теперь любые параметры, поля и свойства функции можно отмечать атрибутом [LanguageInjection], означающим, что строковое значение данной сущности написано на другом языке. Вы можете добавлять фрагменты кода на CSS, HTML, JavaScript, JSON и XML. Как только вы укажете атрибут, для фрагмента кода заработает подсветка синтаксиса, автодополнение и другие возможности. Чтобы пользоваться атрибутом LanguageInjection, добавьте в проект последнюю версию JetBrains.Annotations.
Мы значительно изменили возможность Copy FQN. Теперь она называется Copy Code Reference: такое название лучше отражает смысл.
Если в качестве системы контроля версий выбран Git, при использовании Copy Code Reference вам будут доступны дополнительные возможности. Для проектов, клонированных из GitHub, во всплывающем окне Copy Code Reference отобразятся специальные опции: они позволят сгенерировать правильную ссылку на GitHub-репозиторий, и вы сможете сразу ею поделиться.
Для других репозиториев в настройках ReSharper можно добавить шаблоны для URI. Эти шаблоны будут отображаться во всплывающем окне Copy Code Reference. В шаблон для URI можно включать плейсхолдеры: Current Branch Name, File Name, Current Line Number и другие.
Также мы значительно изменили интерфейс окна, включая структуру, значки и форматирование.
if()
, while()
и др.). if()
, foreach()
и др. Возможность включена по умолчанию. Шаблоны файлов Unreal Engine позволят создавать классы, не переключаясь в Unreal Editor. Вы найдете их в списке шаблонов ReSharper.
Чтобы создать новый класс, зайдите в Solution Explorer, кликните правой кнопкой мыши по нужной папке и откройте меню Add (либо нажмите Ctrl+Alt+Insert). Выберите любой шаблон Unreal Engine из списка и укажите название нового класса — ReSharper C++ сам создаст все заголовочные и исходные файлы с шаблонным кодом, распределив их по папкам в соответствии с нужным уровнем доступа (public/private).
Чтобы быстро сгенерировать код для агрегатной инициализации, можете использовать назначенные инициализаторы из C++20. Достаточно выбрать соответствующий пункт в списке автодополнения и указать начальные значения в сгенерированных присваиваниях.
Также мы добавили инспекции, которые помогут вам освоить новые библиотечные функции, позволяющие стирать элементы любого стандартного контейнера, проверять наличие элемента в ассоциативном контейнере и создавать умные указатели, используя инициализацию по умолчанию.
Начиная с .NET 5 SDK для настройки анализатора Visual Studio можно использовать глобальные файлы AnalyzerConfig. ReSharper 2021.3 считывает из них информацию о стиле кода и соответствующим образом редактирует правила ReSharper.
Теперь dotMemory может собирать семплированные данные о распределении памяти на основе событий ETW. Семплирование уступает в точности традиционному статистическому методу сбора данных о распределении памяти, но имеет ряд преимуществ:
Обратите внимание, что эта возможность доступна только на Windows.
Доступна бесплатная пробная версия на 30 дней