В ReSharper 2023.1 улучшена поддержка C#, в том числе добавлен ряд инспекций для оптимизации и ускорения работы с разными типами коллекций, а также новые настраиваемые способы добавления в код проверок на null. Мы также обновили модули C++20, поддержали первую порцию возможностей C++23, а также добавили предварительный просмотр макроподстановки и отслеживание вызовов для C++. Кроме того, стало удобнее выполнять юнит-тестирование и очистку кода.
Доступна бесплатная пробная версия на 30 дней
Новый набор инспекций с быстрыми исправлениями поможет оптимизировать и ускорить работу с разными типами коллекций за счет уменьшения количества объектов Lookup в коллекциях:
Contains(item)
перед добавлением элемента в HashSet
или другие коллекции, в которых реализован интерфейс ISet
. ContainsKey(key)
перед добавлением элемента в Dictionary
или другие коллекции, в которых реализован интерфейс IDictionary
. TryAdd(key, value)
для коллекций Dictionary
или унаследованных от Dictionary
. TryGetValue(key, out value)
для коллекций IDictionary
, когда это возможно. Чтобы обеспечить единство стиля проверок not null
в шаблонах, мы добавили новую настройку Syntax style. Она предлагает на выбор два варианта: пустой рекурсивный синтаксис шаблона { }
и шаблон с отрицанием not null
, при этом по умолчанию используется последний. Изменить настройки можно в любой момент на странице ReSharper | Options | Code Editing | C# | Syntax Style.
При использовании шаблона not null возникает одна сложность: в отличие от рекурсивного шаблона { LastName: { } lastName }
, он не позволяет вставлять имена переменных в качестве проверяемого значения. Мы добавили контекстное действие Add pattern variable поверх шаблона not 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, поможет сократить количество повторений за счет переноса общих шаблонов свойств в шаблоны более высокого уровня.
Разработчики 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. Его можно применять ко всем областям доступа, включая методы, классы, файлы, проекты и целые решения.
Шаблоны C# or/and/not
удобно использовать для компактных проверок значений, но их сложнее распознать, чем такие традиционные выражения, как ||/&&/!
. Кроме того, если пропущены скобки, они могут стать причиной ошибок, которые трудно найти. Чтобы с этим было легче справиться, мы добавили в версии 2023.1 новую возможность анализа кода, которая предупреждает о «мертвых» проверках в сложных шаблонах.
Мы продолжаем улучшать поддержку шаблонов списков C# 11. С помощью нового контекстного действия Convert to list pattern можно превратить проверки длины коллекции в шаблон списка. Действие можно использовать в любом контексте, допускающем проверку длины коллекции.
Наведя курсор на макрос, можно увидеть в окне подсказки раскрытие макроса с полной подсветкой синтаксиса и правильным форматированием кода. Раскрытие макроса можно, как и раньше, посмотреть прямо в коде с помощью контекстного действия Substitute macro call, но быстрое превью упрощает работу с макросами. Кроме того, во всплывающем окне быстрого просмотра документации (Ctrl+Shift+F1) можно посмотреть документацию по любому объекту из превью подстановки, просто щелкнув по этому объекту.
В ReSharper C++ появилась долгожданная функция Call tracking. Теперь можно просматривать цепочки вызовов в иерархии входящих вызовов и переходить по ним. В окне результатов отслеживания вызовов можно дважды щелкнуть по пункту иерархии, чтобы перейти к нужному вызову, или развернуть любой узел и посмотреть входящие в него вызовы.
Мы переработали диалог обновлений, в котором описываются изменения, вошедшие в последнюю сборку. Это поможет вам принять решение о том, стоит ли устанавливать обновление или можно его пропустить.
Reformat inactive preprocessor branches in file — это новый тип задания в ReSharper 2023.1. Задание позволяет переформатировать неактивные ветки препроцессинга. Его можно применять только ко всему файлу сразу и оно доступно только для исходных файлов на C#.
Задание не может менять форматирование кода, скрытого за директивой препроцессора #if
, которая всегда ложна. Вот два наиболее очевидных примера этого ограничения: #if false ... #endif
и #define A #if !A ... #endif
.
Фильтры текстового поиска, применяемые к деревьям юнит-тестов в окнах Session и Explorer, теперь учитываются при запуске тестов с помощью кнопок запуска на панели инструментов. В списки включаются и затем выполняются только тесты, удовлетворяющие критериям поиска.
Мы улучшили процедуру переименования файлов в проекте. Начиная с этой сборки, при переименовании файла внутри решения будет появляться диалог с возможностью переименования всех связанных символов (классов, интерфейсов и т. д.) в соответствии с изменениями.
Теперь, если API, к которым обращаются плагины ReSharper, остаются неизменными и корректно работают, миграция плагинов с одной версии на другую осуществляется автоматически.
Встроенный инструмент проверки API проверит совместимость установленных плагинов на уровне двоичного кода и выполнит миграцию подходящих. Если API, используемый плагином, больше недоступен в SDK, создатель плагина получит автоматическое уведомление из JetBrains Marketplace.
Поскольку CSS редко используется в ReSharper, мы сочли нерациональным уделять много внимания поддержке новых версий языка. Поэтому поддержка CSS была приостановлена, пока мы не найдем более удобный способ поддержки этого языка.
Начиная с версии 2023.1, поддержка CSS будет по умолчанию отключена. Если вы все-таки хотите использовать этот язык, ее можно включить в меню ReSharper | Options | Environment | Products & Features, выбрав параметр CSS.
В настоящее время ReSharper и .NET Tools поддерживают 7 основных версий Visual Studio: с 2010 до самой новой — 2022. Начиная с версии 2023.1, этот список будет сокращен: мы прекращаем поддержку двух самых старых версий — Visual Studio 2010 и Visual Studio 2012.
Доступна бесплатная пробная версия на 30 дней