Что нового в ReSharper 2025.1

ReSharper 2025.1 предоставляет начальную поддержку .NET 10 и превью-возможностей C# 14. В этой версии появились новые инспекции для распространенных ошибок в C# и улучшения для удобства работы. Производительность улучшена благодаря новой системе интернирования строк и обновленной поддержке Razor и Blazor. Также теперь есть интеграция с dotMemory в Visual Studio и новый плагин Qodana для контроля качества кода в CI/CD-пайплайнах.

Поддержка C#

Поддержка .NET 10 Preview и C# 14

ReSharper 2025.1 предоставляет начальную поддержку .NET 10 и новейших возможностей C# 14.

nameof для непривязанных обобщенных типов

Раньше при использовании nameof требовалось указывать все аргументы типа, что делало код излишне громоздким. В C# 14 можно использовать nameof(List<>) без явного указания аргументов типа. Теперь ReSharper обнаруживает лишние аргументы типа в выражениях nameof и предлагает быстрое исправление для их упрощения.

Поддержка преобразований для Span<T>

C# 14 вводит новые неявные преобразования между ReadOnlySpan<T>, Span<T> и T[], что упрощает работу с типами span и делает код более понятным. ReSharper полностью поддерживает эти новые правила, помогая писать эффективный и современный код на C#.

Модификаторы для простых параметров лямбда-выражений

C# 14 позволяет использовать модификаторы параметров, такие как ref, out, in и scoped, в лямбда-выражениях без явного указания типов параметров. ReSharper предложит быстрое исправление для удаления лишних указаний типов.

Обо всех улучшениях поддержки C# в ReSharper и Rider читайте в нашем блоге.

В дополнение к поддержке функциональности C# 14, в этом релизе вас ждет несколько новых инспекций, выявляющих распространенные ошибки и неэффективные конструкции во всех версиях C#.

Новое контекстное действие для преобразования интерполяции в конкатенацию

Новое контекстное действие позволяет преобразовать интерполяцию строк обратно в конкатенацию. ReSharper уже умел преобразовывать конкатенацию строк "Id = " + someId в интерполяцию $"Id = {someId}" или string.Format("Id = {0}", someId). Теперь добавлена и обратная трансформация — вы можете преобразовать интерполяцию обратно в конкатенацию, что дает больше свободы в работе со строками.

Избыточное дублирование кода

ReSharper теперь еще лучше выявляет и подсвечивает повторяющиеся фрагменты кода, особенно в условных конструкциях вроде if и switch, и предлагает варианты рефакторинга для более чистого кода, который удобнее поддерживать.

Возможное ошибочное использование CancellationToken

ReSharper теперь выявляет случаи, когда вместо локального CancellationToken по ошибке используется токен, переданный методу. Он предлагает быстрое исправление для замены некорректного токена или объединения нескольких токенов с использованием CancellationTokenSource.CreateLinkedTokenSource().

Использование nameof для ссылки на элемент перечисления

Вызов .ToString() для элементов перечисления создает лишнюю нагрузку во время выполнения. ReSharper теперь предлагает заменить его на nameof(SomeEnum.Member), что повышает производительность и делает код понятнее.

Предложения имен для компонентов кортежа

ReSharper 2025.1 предлагает явные имена компонентов кортежа вместо стандартных имен ItemN. Это делает код более понятным без дополнительных комментариев.

Проверка неточных чтений из потока

ReSharper теперь предупреждает, когда методы Stream.Read() и ReadAsync() используются без проверки возвращаемых значений — это может привести к неполному чтению данных. Он предлагает заменить их на .ReadExactly() для обеспечения корректности.

Предупреждение о модификации состояния в Debug.Assert

Поскольку вызовы Debug.Assert удаляются в сборках RELEASE, ReSharper теперь предупреждает, если внутри таких утверждений происходит изменение состояния, которое может привести к неожиданному поведению в продакшене.

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

В ReSharper 2025.1 также улучшена поддержка C++. Вас ждет:

  • новый рефакторинг Inline Macro;
  • поддержка нескольких новых расширений языка GNU;
  • оптимизация использования памяти в проектах Unreal Engine с большим количеством ассетов Blueprint;
  • встроенный Clang-Tidy 20 и поддержка использования Clang-Tidy на устройствах c ARM;
  • обновленная поддержка GoogleTest.

Больше информации о функциях для C++ вы найдете на странице, посвященной ReSharper C++ 2025.1.

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

Рефакторинг переключения <ImplicitUsings>

Имплицитные using-директивы автоматически подключают часто используемые пространства имен, снижая количество шаблонного кода. ReSharper теперь позволяет легко включать или отключать эту опцию на уровне проекта: при включении удаляет лишние явные using, а при отключении добавляет недостающие.

Обновленный рефакторинг Transform Parameters

Мы модернизировали рефакторинг Transform Parameters, добавив поддержку кортежей значений, записей и асинхронных сценариев для повышения гибкости и удобства сопровождения кода.

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

Контекстное действие Chop formatting

Новое действие форматирования применяет стиль Chop к различным C#-конструкциям, улучшая читаемость и единообразие кода.

Другие улучшения

  • В комментариях теперь автоматически добавляется пробел после //, а длинные строки аккуратно переносятся. Примеры можно найти в тикетах: [RSRP-225809], [RSRP-78312].
  • Также появилась настройка, позволяющая не делать перенос строки перед единственным аргументом лямбда-выражения в вызове метода. [RSRP-467905]

Взаимодействие с IDE

Улучшенная активация Push-to-Hint и индикатор режима

Мы усовершенствовали поведение Push-to-Hint в ReSharper, чтобы избежать случайного срабатывания из-за конфликтов с другими сочетаниями клавиш на Ctrl. Теперь также есть визуальный индикатор, который показывает, когда режим активен.

Контекстная подсветка для расширенного списка типов

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

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

Потребление памяти

В этой версии мы полностью переработали систему интернирования строк. IDE обрабатывает огромное количество строк — исходный код, элементы синтаксиса, имена символов и пути к файлам — поэтому важно, чтобы строки обрабатывались эффективно. Новая система интернирования строк в среднем хранит в четыре раза больше уникальных строк по сравнению с предыдущей версией и при этом потребляет примерно в два раза меньше памяти. Это освобождает ресурсы в крупных .NET-проектах.

Улучшения для Blazor и Razor

Для версии 2025.1 была полностью переработана поддержка Razor tag helpers и компонентов Blazor. Эта давно необходимая переработка сокращает время анализа на 5–10% для больших решений ASP.NET с интенсивным использованием компонентов. Вы также заметите меньше повторного анализа при редактировании файлов .cshtml/.razor, а также значительно меньше ложных сообщений об ошибках.

Последние новости о ReSharper в режиме out-of-process (OOP)

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

Обо всех подробностях читайте в нашем блоге.

Профилирование памяти dotUltimate

Анализ снэпшотов с dotMemory в Visual Studio

dotMemory теперь полностью интегрирован с Microsoft Visual Studio. Раньше профилирование можно было запускать только в Visual Studio, а для анализа результатов нужно было переходить в отдельное приложение dotMemory. Теперь вы можете профилировать приложение и анализировать снимки памяти, не покидая IDE.

Качественный код

Расширение Qodana Team Code Quality

Qodana — это инструмент проверки качества кода для команд, основанный на инспекциях JetBrains. Он помогает выполнять проверки и аудит кода, а также устанавливать критерии качества в вашей CI/CD-системе. Теперь его можно установить через установщик ReSharper и подключить проекты Qodana (в облаке или на вашем сервере) прямо в Visual Studio.

Вы сможете находить ошибки, проблемы и уязвимости, запускать проверки в CI/CD-пайплайне, а результаты сразу видеть в IDE — там, где вы работаете. Qodana можно также скачать как отдельный инструмент через установщик ReSharper.

Разработка игр

Плагин Unity для ReSharper

ReSharper 2025.1 включает в себя плагин для Unity, который поддерживает все основные рабочие процессы разработки игр. Он предоставляет автодополнение для функций событий и API, подсказки со ссылками на документацию Unity, а также специализированные инспекции для выявления распространенных ошибок. Плагин включает поддержку файлов ShaderLab, обеспечивая подсветку синтаксиса, автодополнение кода и поиск ошибок. Он также автоматически обрабатывает файлы .meta и обнаруживает неявное использование полей и методов в сценах, префабах и ассетах Unity.

ReSharper C++ продолжает предоставлять специализированную поддержку разработки на Unreal Engine.

Декомпиляция

ReSharper 2025.1 включает несколько улучшений декомпилятора: добавлена поддержка новейших возможностей C# и улучшена читаемость кода. Вот что нового:

  • Поддержка членов с модификатором required.
  • Добавлена поддержка нового типа System.Threading.Lock, представленного в C# 13.
  • Поддержка полей с модификатором ref и параметров с модификатором scoped.
  • Поддержка анти-ограничения allows ref struct для обобщенных типов.
  • Поддержка using на основе шаблонов для типов ref struct.
  • Поддержка интерполяции строк.
  • Некоторые целочисленные константы в декомпилированном коде теперь сопровождаются комментариями с их шестнадцатеричным значением — для лучшей читаемости.
  • Поддержка пространств имен, ограниченных файлом.

Другие важные улучшения

Новый постфиксный шаблон .inject

Первичные конструкторы в C# 12 упростили внедрение зависимостей. Новый постфиксный шаблон .inject делает этот процесс еще удобнее: он автоматически добавляет параметр в первичный конструктор и предлагает подходящее имя.

Поддержка структурированного логирования

ReSharper теперь предлагает расширенную поддержку структурированного логирования, упрощая написание и анализ логов.

Языковые инъекции в возвращаемые значения

ReSharper теперь поддерживает аннотации language injection для возвращаемых значений методов — раньше такая возможность была только для параметров, полей и свойств.

Улучшенные многострочные комментарии To-do

Раньше для многострочных To-do комментариев требовалось соблюдать отступы для продолжения строки. В ReSharper 2025.1 это ограничение снято — теперь такие комментарии проще писать и редактировать. При этом отступы всё ещё сохраняются там, где они действительно нужны.