Что нового в ReSharper 2023.2

ReSharper 2023.2 предлагает улучшенную поддержку для C#, которая включает в себя новые инспекции для работы с локальными функциями и необработанными строками, а также для устранения распространенных ошибок Entity Framework. Кроме того, в этой версии добавлена поддержка рефакторинга C++ и дополнительных возможностей C++20 и C++23. В числе других новых функций — возможность создания юнит-тестов и навигации по ним, предиктивный режим отладчика и помощник на основе искусственного интеллекта AI Assistant.

Скачать

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

Главное

Улучшенная поддержка C#

Улучшенная поддержка C#

В ReSharper 2023.2 добавлены новые инспекции кода и быстрые исправления для работы с необработанными строковыми литералами и локальными функциями, а также для обработки распространенных ошибок Entity Framework и лишних директив nullable. Появилась поддержка C# 12, включая первичные конструкторы и лямбда-выражения с необязательными параметрами. Кроме того, мы улучшили поддержку сброса переменных и одноразовых ресурсов, а также добавили в ReSharper новые встроенные и межстрочные подсказки.

Подробнее

Создание юнит-тестов и навигация по ним

Юнит-тестирование в ReSharper было существенно обновлено: добавлена возможность удобного создания тестов для производственного кода и навигации по ним.

Чтобы создать тест, просто вызовите действие Generate Code и выберите Unit Test или нажмите Ctrl+U,C. ReSharper предложит выбрать имя класса теста и даже создаст новый проект с использованием предпочтительного фреймворка тестирования, если такого проекта еще нет. После создания теста можно перейти от его реализации к тестовому коду с помощью действия Navigate To или нажав Ctrl+U,F.

Подробнее

AI Assistant

AI Assistant Ограниченный доступ

Версия 2023.2 наших IDE на базе IntelliJ и .NET-инструментов включают важную новую функцию AI Assistant — помощник на основе искусственного интеллекта. Текущий набор функций AI Assistant, включающий чат-бота, органично вписывается в ключевые процессы работы: используйте контекстные действия, чтобы AI Assistant пояснил выбранные фрагменты кода, помог устранить потенциальные проблемы и сгенерировал XML-документацию.

Подробнее

Поддержка C#

Улучшенная поддержка необработанных строк

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

  • Инспекция Use raw string для преобразования многострочных буквальных строк в их необработанные аналоги.
  • Инспекция Simplify raw string для удаления лишних кавычек и знаков доллара.
  • Несколько контекстных действий для добавления и удаления кавычек, скобок интерполяции и знаков доллара, а также для переключения между однострочным и многострочным представлением.
  • Новые настройки форматирования кода для выравнивания содержимого необработанных строк и добавления отступов.
  • Улучшенная поддержка редактирования при нажатии клавиш Enter, Delete или Backspace.

Подробнее

Инспекции для распространенных ошибок Entity Framework

Инспекции для распространенных ошибок Entity Framework

Мы добавили несколько новых инспекций, быстрых исправлений и возможностей контекстной навигации для распространенных проблем, которые возникают при работе с базами данных, использующими фреймворки объектно-реляционного отображения (ORM), в частности Entity Framework.

  • Справиться с возможной «проблемой N+1» помогут инспекции Possible multiple queries to the database for related entities (N+1 problem) и Possible multiple queries to the database (N+1 problem), соответствующее быстрое исправление, а также контекстный переход вперед и назад для поиска мест в коде, где может возникнуть проблема.
  • Помимо выявления проблемы N+1, мы добавили еще одну удобную инспекцию для работы с Entity Framework: Query can return incomplete data for related entities. Для устранения этой ошибки мы также подготовили быстрое исправление и контекстную навигацию с поиском вперед и назад.

Подробнее о новых инспекциях для Entity Framework читайте в нашем блоге.

Инспекции для работы с локальными функциями

В ReSharper 2023.2 добавлены две новые инспекции с быстрыми исправлениями для улучшения читаемости кода с использованием локальных функций:

  • Рекомендация ставить явный оператор return или continue перед локальными функциями в конце метода.
  • Предложение перенести локальные функции в конец метода или блока и отделить их от исполняемого кода явным return, continue или другим оператором передачи управления.

В тех случаях, когда вы не хотите или не можете менять код, ReSharper 2023.2 покажет межстрочную подсказку с операторами return; или continue; перед локальными функциями, чтобы помочь прочитать код, не меняя его.

Подробнее о новых инспекциях — в нашем блоге.

Инспекции для директив #nullable и NRT-аннотаций

Инспекции для директив #nullable и NRT-аннотаций

В новой версии появились несколько новых инспекция для директив #nullable и NRT-аннотаций:

  • инспекция Redundant nullable directive;
  • инспекция Unused nullable directive;
  • инспекция, предупреждающая о случаях, когда аннотации ссылочных типов, допускающих значение null (NRT), противоречат атрибутам JetBrains.Annotations базового члена.

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

Улученная навигация для объявлений var

Улученная навигация для объявлений var

Теперь в случае распространенных оберточных типов все навигационные действия (Go to…, Find Usages и т. д.) предлагают базовые типы при переходе от var. Например, при вызове действия Go to declaration на ключевом слове var переменной с типом ImmutableArray<Person>? ReSharper предложит перейти к Person.

Подробнее об этом читайте в нашем блоге.

Первичные конструкторы Превью C# 12

В версии 2023.2 мы добавили поддержку первичных конструкторов для классов non-record и типов non-record struct, появившихся в предварительной версии C# 12. Несколько инспекций выявляют эти типы там, где инициализацию можно выразить с помощью нового первичного конструктора, и предлагают применить быстрое исправление, чтобы заметно сократить объем повторяющегося кода.

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

Об этих и многих других функциях для работы с первичными конструкторами читайте в нашем блоге.

Поддержка значений параметров по умолчанию в лямбдах

Поддержка значений параметров по умолчанию в лямбдах Превью C# 12

В рамках работы над поддержкой нововведений C# 12 мы добавили поддержку значений параметров по умолчанию в лямбда-выражениях. Помимо стандартного набора предупреждений, касающихся распознавания этого синтаксиса, мы также переработали инспекцию The parameter has the same default value, чтобы она учитывала значения параметров по умолчанию в лямбдах. Подробнее

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

В ReSharper 2023.2 добавлены две новые инспекции, чтобы было проще управлять освобождением объектов:

  • Инспекция Return of a variable captured by ‘using’ statement предупреждает, что возвращаемый объект сразу же освобождается.
  • Инспекция Return of a task produced by ‘using’-captured object выявляет сценарии, когда задание (Task) создается объектом, который был захвачен выражением using, а затем сразу же возвращен.

Кроме того, мы улучшили функцию Generate dispose pattern, обеспечив поддержку интерфейса IAsyncDisposable и возможность генерации асинхронного метода для освобождения ресурсов.

Подробнее об этих изменениях можно прочитать здесь.

Улучшенная поддержка сброса переменных C#

Мы добавили новые возможности анализа кода для поддержки сброса переменных C#:

  • Теперь можно быстро проверить имена и типы сброшенных значений с помощью функции Push-to-Hint.
  • Предупреждение The _ name is typically reserved for local parameters without usages касается переменных и параметров с именем _, которые на самом деле используются. Они выглядят так, будто их значение сброшено, но в действительности все наоборот.
  • Добавлена инспекция Use discard assignment для замены неиспользуемой переменной или параметра со сброшенным значением.

Подробнее

Встроенные подсказки

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

Встроенные подсказки с именами компонентов значений кортежа

Когда значение передается аргументу кортежа или возвращаемому типу, C# позволяет опустить имена компонентов. Однако в отсутствие имен сложнее понять смысл каждого компонента — приходится смотреть его целевой тип. Например, многие разработчики вынуждены проверять, куда назначен кортеж (null, false), чтобы понять, что означают его компоненты.

Здесь на помощь приходят встроенные подсказки. ReSharper 2023.2 выводит на экран подсказки с именами компонентов кортежа, если эти имена не указаны явно. В результате код становится проще читать и понимать.

Для стандартных и null-компонентов в ReSharper 2023.2 отображаются подсказки с целевыми типами, даже если у целевого компонента нет явного имени. Исключение составляют типы строк и объектов, потому что они обычно малоинформативны.

Еще одна распространенная ситуация, в которой имена могут улучшить читаемость — паттерны деконструкции. В этом случае явное имя известно либо из метода Deconstruct, либо из компонентов исходного кортежа. Задача этих подсказок — дать вам дополнительный контекст, если в самом паттерне недостаточно данных, чтобы понять, что к чему относится, например value is ({ }, true, null).

Улучшенная поддержка директив #pragma warning

Улучшенная поддержка директив #pragma warning

Директивы Pragma позволяют легко отключать и восстанавливать предупреждения компилятора по их идентификаторам. Однако, несмотря на то, что такие идентификаторы являются отличным способом взаимодействия с компилятором, в них может быть сложно разобраться человеку. Без специальных знаний невозможно понять, к чему относится идентификатор CS0168 или CS0618, и что требует внимания.

Графические элементы для LINQ

Графические элементы для LINQ

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

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

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

Safe Delete

Safe Delete

В ReSharper C++ добавлен рефакторинг Safe Delete для безопасного удаления символов из исходного кода. Его можно применять в отношении классов, функций, переменных, перечисляемых типов, пространств имен и даже концептов.

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

Другие возможности C++20 и C++23

Другие возможности C++20 и C++23

В этой версии поддерживаются некоторые новые возможности языка, в том числе if consteval, модули стандартной библиотеки C++23, атрибут [[no_unique_address]] и статический operator()/operator[].

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

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

Графические элементы для LINQ

Форматирование цепочек вызовов API

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

Первая опция контролирует наличие разрыва строки перед первым вызовом метода. Вторая предназначена для случаев, когда смешиваются вызов метода и вызов свойства, и определяет, нужен ли разрыв строки после вызова свойства.

AI Assistant Ограниченный доступ

AI Assistant не встроен в ReSharper, его нужно устанавливать отдельно. Доступ к AI Assistant временно ограничен, и вы можете оказаться в листе ожидания.

Подробнее об AI Assistant и его установке через Toolbox App или установщик dotUltimate читайте в документации.

Чат c AI Assistant

Чат c AI Assistant

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

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

Контекстные действия

Контекстные действия

После установки плагина AI Assistant в ReSharper появятся контекстные действия для использования возможностей искусственного интеллекта. AI Assistant умеет:

  • пояснять выделенный код;
  • находить возможные проблемы;
  • предлагать код для нереализованных методов;
  • генерировать XML-документацию.

Предиктивный режим отладчика Бета-версия Visual Studio 2022

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

  • отображать ожидаемые значения переменных;
  • визуально «отключать» те части программы, которые не будут выполняться;
  • предупреждать о том, что дальнейшее выполнение программы приведет к исключению.

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

Чтобы включить предиктивный режим, перейдите в меню ReSharper | Options | Tools | Debugger | Editor Integration | Predictive debugger | Show predicted values (beta).

Подробнее

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

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

Сравнение сборок

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

Чтобы выполнить сравнение, нажмите Compare Two Assemblies в окне Assembly Explorer. Сравнивать можно как приложения, состоящие из одного файла, так и файлы .exe или .dll.

Подробнее

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

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

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

Разное

Динамический анализ программы

  • Раньше DPA мог ошибочно учитывать время паузы во время отладки как время выполнения кода. Это приводило к ложным предупреждениям об ошибках БД. В версии 2023.2 эта проблема устранена.
  • Кроме того, раньше при анализе подсвечивались большие блоки кода, если соответствующий стек вызовов содержал распределение памяти по лямбда-функциям. Теперь подсветка стала точнее.
Скачать

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