В ReSharper 2024.1 мы расширили поддержку C#, добавив новые предложения по преобразованию кода в выражения коллекции и новые предупреждения об изменении коллекций внутри циклов foreach
. Поддержка Razor теперь обеспечивает обработку ссылок для директив @addTagHelper
и @removeTagHelper
. Кроме того, мы улучшили интерфейс и функционал редактирования пользовательских правил именования.
Доступна бесплатная пробная версия на 30 дней
Теперь пользователь будет чаще получать рекомендации преобразовать конструкции исходного кода в выражения коллекций C# 12, например в пустой массив или объявление и инициализацию ImmutableArray
.
Мы добавили новую инспекцию Possible 'System.InvalidOperationException: Collection was modified': при итерациях в циклах foreach
она предупредит вас о том, что коллекция была изменена, поскольку такие изменения могут вызвать исключения в среде выполнения. При анализе учитываются случаи выхода из цикла после изменения коллекции: в таких ситуациях предупреждение не выдается.
Инспекция предлагает соответствующее быстрое исправление, которое позволит моментально устранить проблему.
Функция Generate | Formatting Members позволяет создавать шаблонный код, переопределяющий метод ToString()
и возвращающий осмысленную строку для ваших типов. Начиная с версии 2024.1, эта функция поддерживает больше типов, например ISpanFormattable
, IUtf8SpanFormattable
и IFormattable
.
[MustDisposeResource]
: теперь при анализе кода C# все ресурсы, возвращенные асинхронными методами, включая ресурсы в обертке Task<IDisposable>
и ValueTask<IDisposable>
, корректно удаляются, и вам не грозит непреднамеренное удаление самой задачи. .ConfigureAwait(...)
, .AsTask()
, или .Result
. Вот некоторые улучшения, сделанные в рефакторинге Change Signature:
List<>
, с помощью автодополнения удобно выбрать нужный вариант, такой как int
. System.Collections.Generic.List<System.Int16>
, в итоговом коде он будет автоматически сокращен до List<short>
. in
и ref readonly
, а также типы record
. Начиная с этой версии, рефакторинг Make Static поддерживает параметры первичного конструктора. Они появляются в списке Introduce parameters и, чтобы их было проще отличить, обозначаются специальной иконкой. Этот рефакторинг доступен также для локальных функций.
В новой версии функция анализа кода поддерживает атрибут ProtoContract
и перечисление ImplicitFields
, входящие в библиотеку protobuf-net. Их можно использовать, чтобы отметить члены класса, неявно используемые для сериализации. В результате для таких членов больше не будет появляться предупреждение unused members.
@addTagHelper
и @removeTagHelper
Новая версия ReSharper умеет обрабатывать имена сборок, указанные в директивах @addTagHelper
и @removeTagHelper
в представлениях Razor. Благодаря этому пользователям доступны автодополнение кода, поиск использований и удобная навигация по коду.
Новая версия ReSharper воспринимает все необработанные имена сборок как ошибки и подсвечивает их красным, чтобы пользователь их не пропустил.
Важные улучшения поддержки C++:
Подробнее об обновлениях для C++: Что нового в ReSharper C++ 2024.1.
Мы активно дорабатываем режим активного использования ресурсов при анализе всего решения. Это позволит существенно сократить время анализа за счет более эффективного параллельного использования ядер процессора. Мы улучшили профиль распределения памяти при анализе кода, чтобы сократить затраты времени на сборку мусора. Процесс доработки продолжается, и мы будем благодарны, если вы попробуете использовать этот режим и оставите свой отзыв.
Переименование элементов кода теперь идет быстрее и эффективнее. Эти изменения затрагивают и другие ключевые компоненты ReSharper, повышая производительность многих функций, в том числе Find Usages.
Значительно улучшена производительность рефакторинга Move to Another Type для статических членов при обработке больших классов.
Теперь пользователям должно быть легче работать с расширенными правилами именования и соблюдать все правила, импортированные из файлов EditorConfig.
Новая настройка форматирования позволяет сохранять или удалять пробелы в пустых строках.
В версии ReSharper 2024.1 появилось новое окно Assembly Diff. В связи с этим внесены два изменения:
.zip
перенесено из Assembly Explorer в окно Assembly Diff. В новой версии ReSharper встроенный декомпилятор поддерживает формат пакетов WebCIL для WebAssemblies. Поддержка включает в себя:
.wasm
в Assembly Explorer. Поддержка десктопных приложений MAUI и macOS-приложений на базе .NET теперь доступна также в инструментах dotTrace, dotMemory и dotCover в Visual Studio.
Поддерживаемые целевые фреймворки:
net8.0-windows
, net7.0-windows
net8.0-maccatalyst
, net7.0-maccatalyst
net8.0-macos
, net7.0-macos
Подробнее о доступных режимах профилирования и ограничениях читайе здесь.
Поддержка проектов MAUI также доступна в автономных версиях этих инструментов .NET.
Автономный профилировщик dotMemory теперь поддерживает функцию Frozen Objects Heap (FOH), появившуюся в .NET 6 SDK. Это одно из улучшений для процесса сборки мусора.
FOH выделяет специальную область памяти для неизменяемых объектов. Эти объекты не меняются после их назначения, и их не касается сборка мусора. Благодаря поддержке этой технологии dotMemory может точнее проанализировать память, используемую неизменяемыми объектами в FOH, и эффективнее оптимизировать использование памяти.
Начиная с версии 2024.1, форматом вывода InspectCode по умолчанию станет SARIF. Поддержка формата XML скоро прекратится. В текущей версии результаты будут по-прежнему доступны в формате XML при использовании параметра -f="xml"
.
Мы завершили внутренний рефакторинг элементов управления текстом. Это не только поможет нам реализовать режим запуска ReSharper вне процесса, но и улучшит набор текста и связанные с этим аспекты работы редактора в ReSharper и Rider. Свежую информацию о работе над режимом запуска ReSharper вне процесса вы найдете здесь.
В Ленте плагинов JetBrains Marketplace появился новый механизм фильтрации на основе проверок совместимости. Теперь плагины, несовместимые с вашей версией ReSharper, больше не будут отображаться в менеджере расширений.
Доступна бесплатная пробная версия на 30 дней