Что нового в ReSharper 2023.1

В ReSharper 2023.1 улучшена поддержка C#, в том числе добавлен ряд инспекций для оптимизации и ускорения работы с разными типами коллекций, а также новые настраиваемые способы добавления в код проверок на null. Мы также обновили модули C++20, поддержали первую порцию возможностей C++23, а также добавили предварительный просмотр макроподстановки и отслеживание вызовов для C++. Кроме того, стало удобнее выполнять юнит-тестирование и очистку кода.

Скачать

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

Поддержка C#

Сокращение числа объектов Lookup в коллекциях

Новый набор инспекций с быстрыми исправлениями поможет оптимизировать и ускорить работу с разными типами коллекций за счет уменьшения количества объектов Lookup в коллекциях:

  • Удаляйте проверку Contains(item) перед добавлением элемента в HashSet или другие коллекции, в которых реализован интерфейс ISet.
  • Удаляйте проверку ContainsKey(key) перед добавлением элемента в Dictionary или другие коллекции, в которых реализован интерфейс IDictionary.
  • Где возможно, используйте TryAdd(key, value) для коллекций Dictionary или унаследованных от Dictionary.
  • Используйте TryGetValue(key, out value) для коллекций IDictionary, когда это возможно.

Настройка стиля шаблонов проверки на null

Чтобы обеспечить единство стиля проверок not null в шаблонах, мы добавили новую настройку Syntax style. Она предлагает на выбор два варианта: пустой рекурсивный синтаксис шаблона { } и шаблон с отрицанием not null, при этом по умолчанию используется последний. Изменить настройки можно в любой момент на странице ReSharper | Options | Code Editing | C# | Syntax Style.

При использовании шаблона not null возникает одна сложность: в отличие от рекурсивного шаблона { LastName: { } lastName }, он не позволяет вставлять имена переменных в качестве проверяемого значения. Мы добавили контекстное действие Add pattern variable поверх шаблона not null, чтобы можно было найти выражения, которые получают доступ к тому же значению (поскольку мы вводим имя переменной), и заменить вновь введенным именем, консолидировав все случаи доступа к этому значению.

Стиль ArgumentNullException.ThrowIfNull для проверок на null

В .NET 6.0 SDK появился новый API для проверок на null: ArgumentNullException.ThrowIfNull. Наш движок анализа кода с самого начала распознавал этот вариант проверок, но использовать этот API в качестве стиля по умолчанию для проверок на null, проводимых ReSharper, было нельзя. В версии 2023.1 мы добавили в меню ReSharper | Options | Code Editing | C# | Null checking шаблон ArgumentNullException.ThrowIfNull.

Extract common property pattern

Если вы активно используете сопоставление свойств с образцом, попробуйте новую инспекцию с быстрым исправлением для извлечения общих элементов из нескольких шаблонов свойств, когда они встречаются в потоке кода. Код, созданный с помощью быстрого исправления Extract common property pattern, поможет сократить количество повторений за счет переноса общих шаблонов свойств в шаблоны более высокого уровня.

Удаление пустых директив region

Разработчики C# часто используют директиву #region и сворачивание кода в IDE, чтобы структурировать свой код. В результате рефакторинга некоторые директивы #region остаются пустыми, и код в свернутом виде может выглядеть странно. Новая инспекция позволяет найти пустые директивы #region в свернутом состоянии и применить быстрое исправление для очистки кода.

Замена span.SequenceEqual(“str”)

В анализ кода добавлена новая инспекция, которая предлагает заменить span.SequenceEqual("stringLiteral") на span is "stringLiteral" — более аккуратное и удобное синтаксическое решение в C#, чем вызов функции.

Вставка спецификации типа возвращаемого значения для лямбд

Лямбда-выражения в C# могут иметь неявно типизированные параметры и выведенные типы возвращаемых значений. Чтобы сделать код более понятным в сложных сценариях разрешения перегрузки, можно добавить явные типы. Начиная с версии C# 11, можно также добавить спецификацию типа возвращаемого значения в лямбда-выражения. Для этого мы добавили в ReSharper 2023.1 контекстное действие Insert return type specification. Его можно применять ко всем областям доступа, включая методы, классы, файлы, проекты и целые решения.

Инспекция Pattern is redundant

Шаблоны C# or/and/not удобно использовать для компактных проверок значений, но их сложнее распознать, чем такие традиционные выражения, как ||/&&/!. Кроме того, если пропущены скобки, они могут стать причиной ошибок, которые трудно найти. Чтобы с этим было легче справиться, мы добавили в версии 2023.1 новую возможность анализа кода, которая предупреждает о «мертвых» проверках в сложных шаблонах.

Контекстное действие Convert to list pattern

Мы продолжаем улучшать поддержку шаблонов списков C# 11. С помощью нового контекстного действия Convert to list pattern можно превратить проверки длины коллекции в шаблон списка. Действие можно использовать в любом контексте, допускающем проверку длины коллекции.

Поддержка C++

Предварительный просмотр макроподстановки

Предварительный просмотр макроподстановки

Наведя курсор на макрос, можно увидеть в окне подсказки раскрытие макроса с полной подсветкой синтаксиса и правильным форматированием кода. Раскрытие макроса можно, как и раньше, посмотреть прямо в коде с помощью контекстного действия Substitute macro call, но быстрое превью упрощает работу с макросами. Кроме того, во всплывающем окне быстрого просмотра документации (Ctrl+Shift+F1) можно посмотреть документацию по любому объекту из превью подстановки, просто щелкнув по этому объекту.

Отслеживание вызовов

Отслеживание вызовов

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

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

Изменения интерфейса

Диалог обновлений

Мы переработали диалог обновлений, в котором описываются изменения, вошедшие в последнюю сборку. Это поможет вам принять решение о том, стоит ли устанавливать обновление или можно его пропустить.

Новый диалог сочетаний клавиш

Начиная с версии 2023.1, при первом запуске ReSharper пользователь будет видеть экран с сочетаниями клавиш и сможет выбрать наиболее удобную схему.

Code Cleanup

Reformat inactive preprocessor branches in file — это новый тип задания в ReSharper 2023.1. Задание позволяет переформатировать неактивные ветки препроцессинга. Его можно применять только ко всему файлу сразу и оно доступно только для исходных файлов на C#.

Задание не может менять форматирование кода, скрытого за директивой препроцессора #if, которая всегда ложна. Вот два наиболее очевидных примера этого ограничения: #if false ... #endif и #define A #if !A ... #endif.

Юнит-тесты

Фильтры текстового поиска, применяемые к деревьям юнит-тестов в окнах Session и Explorer, теперь учитываются при запуске тестов с помощью кнопок запуска на панели инструментов. В списки включаются и затем выполняются только тесты, удовлетворяющие критериям поиска.

Рефакторинг Rename

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

dotTrace для macOS и Linux Бета dotUltimate

Теперь для Linux и macOS доступна автономная версия dotTrace. Благодаря этому в этих операционных системах можно выполнить полное профилирование, включая сбор и анализ снэпшотов производительности.

Миграция плагинов

Теперь, если API, к которым обращаются плагины ReSharper, остаются неизменными и корректно работают, миграция плагинов с одной версии на другую осуществляется автоматически.

Встроенный инструмент проверки API проверит совместимость установленных плагинов на уровне двоичного кода и выполнит миграцию подходящих. Если API, используемый плагином, больше недоступен в SDK, создатель плагина получит автоматическое уведомление из JetBrains Marketplace.

Прочее

Поддержка CSS по умолчанию отключена

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

Начиная с версии 2023.1, поддержка CSS будет по умолчанию отключена. Если вы все-таки хотите использовать этот язык, ее можно включить в меню ReSharper | Options | Environment | Products & Features, выбрав параметр CSS.

Прекращение разработки для Visual Studio 2010 и 2012

В настоящее время ReSharper и .NET Tools поддерживают 7 основных версий Visual Studio: с 2010 до самой новой — 2022. Начиная с версии 2023.1, этот список будет сокращен: мы прекращаем поддержку двух самых старых версий — Visual Studio 2010 и Visual Studio 2012.

Подробнее

Скачать

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