Новое в ReSharper 2024.1

В ReSharper 2024.1 мы расширили поддержку C#, добавив новые предложения по преобразованию кода в выражения коллекции и новые предупреждения об изменении коллекций внутри циклов foreach. Поддержка Razor теперь обеспечивает обработку ссылок для директив @addTagHelper и @removeTagHelper. Кроме того, мы улучшили интерфейс и функционал редактирования пользовательских правил именования.

Скачать

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

Поддержка C#

Больше преобразований в выражения коллекций

Больше преобразований в выражения коллекций

Теперь пользователь будет чаще получать рекомендации преобразовать конструкции исходного кода в выражения коллекций C# 12, например в пустой массив или объявление и инициализацию ImmutableArray.

Инспекция Collection was modified

Инспекция Collection was modified

Мы добавили новую инспекцию Possible 'System.InvalidOperationException: Collection was modified': при итерациях в циклах foreach она предупредит вас о том, что коллекция была изменена, поскольку такие изменения могут вызвать исключения в среде выполнения. При анализе учитываются случаи выхода из цикла после изменения коллекции: в таких ситуациях предупреждение не выдается.

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

Обновление функции Generate | Formatting Members

Обновление функции Generate | Formatting Members

Функция Generate | Formatting Members позволяет создавать шаблонный код, переопределяющий метод ToString() и возвращающий осмысленную строку для ваших типов. Начиная с версии 2024.1, эта функция поддерживает больше типов, например ISpanFormattable, IUtf8SpanFormattable и IFormattable.

Улучшенная поддержка одноразовых ресурсов в асинхронных методах

Улучшенная поддержка одноразовых ресурсов в асинхронных методах

  • Улучшения аннотации [MustDisposeResource]: теперь при анализе кода C# все ресурсы, возвращенные асинхронными методами, включая ресурсы в обертке Task<IDisposable> и ValueTask<IDisposable>, корректно удаляются, и вам не грозит непреднамеренное удаление самой задачи.
  • Возвращаемые значения типа Task: правильный анализ возвращаемых значений типа Task в версии 2024.1 гарантирует проверку удаления ожидаемого ресурса, включая ресурсы, полученные через .ConfigureAwait(...), .AsTask(), или .Result.
Обновления рефакторинга Change Signature

Обновления рефакторинга Change Signature

Вот некоторые улучшения, сделанные в рефакторинге Change Signature:

  • Теперь рефакторинг поддерживает методы Deconstruct. Параметры можно добавлять, удалять, переименовывать, а также менять их порядок. Все эти изменения отражаются и в объявлении метода, и в его использованиях.
  • Автодополнение кода теперь доступно для параметров типа: если нужно указать тип, например, для List<>, с помощью автодополнения удобно выбрать нужный вариант, такой как int.
  • Пространства имен типов автоматически сокращаются при добавлении или обновлении параметров. В результате код после применения рефакторинга становится более чистым и простым. Например, если в диалоге Change Signature указать тип System.Collections.Generic.List<System.Int16>, в итоговом коде он будет автоматически сокращен до List<short>.
  • Теперь рефакторинг поддерживает больше возможностей, появившихся в последних версиях C#, например модификаторы in и ref readonly, а также типы record.
Обновления рефакторинга Make Static

Обновления рефакторинга Make Static

Начиная с этой версии, рефакторинг Make Static поддерживает параметры первичного конструктора. Они появляются в списке Introduce parameters и, чтобы их было проще отличить, обозначаются специальной иконкой. Этот рефакторинг доступен также для локальных функций.

Поддержка библиотеки protobuf-net

В новой версии функция анализа кода поддерживает атрибут ProtoContract и перечисление ImplicitFields, входящие в библиотеку protobuf-net. Их можно использовать, чтобы отметить члены класса, неявно используемые для сериализации. В результате для таких членов больше не будет появляться предупреждение unused members.

Поддержка Razor

Разрешение ссылок для директив @addTagHelper и @removeTagHelper

Разрешение ссылок для директив @addTagHelper и @removeTagHelper

Новая версия ReSharper умеет обрабатывать имена сборок, указанные в директивах @addTagHelper и @removeTagHelper в представлениях Razor. Благодаря этому пользователям доступны автодополнение кода, поиск использований и удобная навигация по коду.

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

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

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

Важные улучшения поддержки C++:

  • Мы переработали реализацию модулей C++20, в результате повысилась производительность и появилась поддержка внутренних разделов модулей.
  • У Change Signature появились новые возможности, в том числе теперь можно изменить тип параметра на указатель, ссылку или значение.
  • Call Tracking теперь поддерживает цепочки исходящих вызовов.
  • В новой версии легко настроить стиль генерируемых документирующих комментариев. Кроме того, в документирующих комментариях теперь есть инспекции для проверки грамматики.
  • В этой версии мы добавили поддержку фреймворка Slate UI для Unreal Engine.

Подробнее об обновлениях для C++: Что нового в ReSharper C++ 2024.1.

Производительность

Режим активного использования ресурсов при анализе всего решения

Режим активного использования ресурсов при анализе всего решения

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

Более быстрый рефакторинг Rename

Переименование элементов кода теперь идет быстрее и эффективнее. Эти изменения затрагивают и другие ключевые компоненты ReSharper, повышая производительность многих функций, в том числе Find Usages.

Более быстрый рефакторинг Move to Another Type

Значительно улучшена производительность рефакторинга Move to Another Type для статических членов при обработке больших классов.

Форматирование кода

Улучшенный интерфейс пользовательских правил именования

Теперь пользователям должно быть легче работать с расширенными правилами именования и соблюдать все правила, импортированные из файлов EditorConfig.

Настройка Remove whitespace on blank lines

Настройка Remove whitespace on blank lines

Новая настройка форматирования позволяет сохранять или удалять пробелы в пустых строках.

Декомпилятор

Новое специальное окно Assembly Diff

Новое специальное окно Assembly Diff

В версии ReSharper 2024.1 появилось новое окно Assembly Diff. В связи с этим внесены два изменения:

  • Сравнение сборок, пакетов NuGet, папок и архивов .zip перенесено из Assembly Explorer в окно Assembly Diff.
  • Селектор Diff mode и кнопки Compare и Diff Options перенесены на панель Actions в окне Assembly Diff.
Поддержка формата пакетов WebCIL

Поддержка формата пакетов WebCIL

В новой версии ReSharper встроенный декомпилятор поддерживает формат пакетов WebCIL для WebAssemblies. Поддержка включает в себя:

  • Декомпиляцию WebCIL.
  • Возможность просмотра файлов .wasm в Assembly Explorer.
  • Поддеревья метаданных для узлов WASM в Assembly Explorer, включая заголовки WASM и WebCIL.

Поддержка MAUI в dotTrace, dotMemory и dotCover dotUltimate

Поддержка десктопных приложений MAUI и macOS-приложений на базе .NET теперь доступна также в инструментах dotTrace, dotMemory и dotCover в Visual Studio.

Поддерживаемые целевые фреймворки:

  • MAUI Windows (в dotTrace, dotMemory, dotCover): net8.0-windows, net7.0-windows
  • MAUI Mac (только в dotTrace): net8.0-maccatalyst, net7.0-maccatalyst
  • Приложения macOS (в dotTrace и dotMemory): net8.0-macos, net7.0-macos

Подробнее о доступных режимах профилирования и ограничениях читайе здесь.

Поддержка проектов MAUI также доступна в автономных версиях этих инструментов .NET.

Поддержка Frozen Object Heap dotUltimate

Автономный профилировщик dotMemory теперь поддерживает функцию Frozen Objects Heap (FOH), появившуюся в .NET 6 SDK. Это одно из улучшений для процесса сборки мусора.

FOH выделяет специальную область памяти для неизменяемых объектов. Эти объекты не меняются после их назначения, и их не касается сборка мусора. Благодаря поддержке этой технологии dotMemory может точнее проанализировать память, используемую неизменяемыми объектами в FOH, и эффективнее оптимизировать использование памяти.

Инструменты командной строки

SARIF — теперь формат по умолчанию

SARIF — теперь формат по умолчанию

Начиная с версии 2024.1, форматом вывода InspectCode по умолчанию станет SARIF. Поддержка формата XML скоро прекратится. В текущей версии результаты будут по-прежнему доступны в формате XML при использовании параметра -f="xml".

Прочее

Рефакторинг запуска вне процесса

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

Менеджер расширений

В Ленте плагинов JetBrains Marketplace появился новый механизм фильтрации на основе проверок совместимости. Теперь плагины, несовместимые с вашей версией ReSharper, больше не будут отображаться в менеджере расширений.

Скачать

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