ReSharper 2023.2 предлагает улучшенную поддержку для C#, которая включает в себя новые инспекции для работы с локальными функциями и необработанными строками, а также для устранения распространенных ошибок Entity Framework. Кроме того, в этой версии добавлена поддержка рефакторинга C++ и дополнительных возможностей C++20 и C++23. В числе других новых функций — возможность создания юнит-тестов и навигации по ним, предиктивный режим отладчика и помощник на основе искусственного интеллекта AI Assistant.
В ReSharper 2023.2 добавлены новые инспекции кода и быстрые исправления для работы с необработанными строковыми литералами и локальными функциями, а также для обработки распространенных ошибок Entity Framework и лишних директив nullable. Появилась поддержка C# 12, включая первичные конструкторы и лямбда-выражения с необязательными параметрами. Кроме того, мы улучшили поддержку сброса переменных и одноразовых ресурсов, а также добавили в ReSharper новые встроенные и межстрочные подсказки.
Юнит-тестирование в ReSharper было существенно обновлено: добавлена возможность удобного создания тестов для производственного кода и навигации по ним.
Чтобы создать тест, просто вызовите действие Generate Code и выберите Unit Test или нажмите Ctrl+U,C. ReSharper предложит выбрать имя класса теста и даже создаст новый проект с использованием предпочтительного фреймворка тестирования, если такого проекта еще нет. После создания теста можно перейти от его реализации к тестовому коду с помощью действия Navigate To или нажав Ctrl+U,F.
Версия 2023.2 наших IDE на базе IntelliJ и .NET-инструментов включают важную новую функцию AI Assistant — помощник на основе искусственного интеллекта. Текущий набор функций AI Assistant, включающий чат-бота, органично вписывается в ключевые процессы работы: используйте контекстные действия, чтобы AI Assistant пояснил выбранные фрагменты кода, помог устранить потенциальные проблемы и сгенерировал XML-документацию.
Мы добавили новые инспекции и контекстные действия для работы с необработанными строками, а также улучшили поддержку редактирования и ввели новые возможности форматирования. Среди них:
Мы добавили несколько новых инспекций, быстрых исправлений и возможностей контекстной навигации для распространенных проблем, которые возникают при работе с базами данных, использующими фреймворки объектно-реляционного отображения (ORM), в частности Entity Framework.
Подробнее о новых инспекциях для Entity Framework читайте в нашем блоге.
В ReSharper 2023.2 добавлены две новые инспекции с быстрыми исправлениями для улучшения читаемости кода с использованием локальных функций:
return или continue перед локальными функциями в конце метода. return, continue или другим оператором передачи управления. В тех случаях, когда вы не хотите или не можете менять код, ReSharper 2023.2 покажет межстрочную подсказку с операторами return; или continue; перед локальными функциями, чтобы помочь прочитать код, не меняя его.
Подробнее о новых инспекциях — в нашем блоге.
#nullable и NRT-аннотаций В новой версии появились несколько новых инспекция для директив #nullable и NRT-аннотаций:
JetBrains.Annotations базового члена. Подробнее об этих инспекциях читайте в нашем блоге.
var Теперь в случае распространенных оберточных типов все навигационные действия (Go to…, Find Usages и т. д.) предлагают базовые типы при переходе от var. Например, при вызове действия Go to declaration на ключевом слове var переменной с типом ImmutableArray<Person>? ReSharper предложит перейти к Person.
Подробнее об этом читайте в нашем блоге.
В версии 2023.2 мы добавили поддержку первичных конструкторов для классов non-record и типов non-record struct, появившихся в предварительной версии C# 12. Несколько инспекций выявляют эти типы там, где инициализацию можно выразить с помощью нового первичного конструктора, и предлагают применить быстрое исправление, чтобы заметно сократить объем повторяющегося кода.
Иногда инициализация типа должна быть менее тривиальной, и ее уже нельзя выразить с помощью первичного конструктора. Для таких случаев мы предусмотрели несколько контекстных действий, позволяющих отменить подстановку параметров первичного конструктора в конструкторы и обычные поля.
Об этих и многих других функциях для работы с первичными конструкторами читайте в нашем блоге.
В рамках работы над поддержкой нововведений C# 12 мы добавили поддержку значений параметров по умолчанию в лямбда-выражениях. Помимо стандартного набора предупреждений, касающихся распознавания этого синтаксиса, мы также переработали инспекцию The parameter has the same default value, чтобы она учитывала значения параметров по умолчанию в лямбдах. Подробнее
В ReSharper 2023.2 добавлены две новые инспекции, чтобы было проще управлять освобождением объектов:
Кроме того, мы улучшили функцию Generate dispose pattern, обеспечив поддержку интерфейса IAsyncDisposable и возможность генерации асинхронного метода для освобождения ресурсов.
Подробнее об этих изменениях можно прочитать здесь.
Мы добавили новые возможности анализа кода для поддержки сброса переменных C#:
_ name is typically reserved for local parameters without usages касается переменных и параметров с именем _, которые на самом деле используются. Они выглядят так, будто их значение сброшено, но в действительности все наоборот.
Когда значение передается аргументу кортежа или возвращаемому типу, C# позволяет опустить имена компонентов. Однако в отсутствие имен сложнее понять смысл каждого компонента — приходится смотреть его целевой тип. Например, многие разработчики вынуждены проверять, куда назначен кортеж (null, false), чтобы понять, что означают его компоненты.
Здесь на помощь приходят встроенные подсказки. ReSharper 2023.2 выводит на экран подсказки с именами компонентов кортежа, если эти имена не указаны явно. В результате код становится проще читать и понимать.
Для стандартных и null-компонентов в ReSharper 2023.2 отображаются подсказки с целевыми типами, даже если у целевого компонента нет явного имени. Исключение составляют типы строк и объектов, потому что они обычно малоинформативны.
Еще одна распространенная ситуация, в которой имена могут улучшить читаемость — паттерны деконструкции. В этом случае явное имя известно либо из метода Deconstruct, либо из компонентов исходного кортежа. Задача этих подсказок — дать вам дополнительный контекст, если в самом паттерне недостаточно данных, чтобы понять, что к чему относится, например value is ({ }, true, null).
#pragma warning Директивы Pragma позволяют легко отключать и восстанавливать предупреждения компилятора по их идентификаторам. Однако, несмотря на то, что такие идентификаторы являются отличным способом взаимодействия с компилятором, в них может быть сложно разобраться человеку. Без специальных знаний невозможно понять, к чему относится идентификатор CS0168 или CS0618, и что требует внимания.
Запросы LINQ часто бывают сложными и включают в себя несколько трансформаций и проекций. В результате отладка таких запросов занимает много времени, особенно при работе с большими наборами данных. Чтобы вам было проще анализировать результаты на каждом этапе выполнения запроса, новая версия ReSharper в ходе отладки показывает промежуточные результаты в виде встроенных подсказок.
Графические элементы редактора, в которых отображаются промежуточные результаты, помогают быстро найти неожиданные значения или неверные трансформации.
В ReSharper C++ добавлен рефакторинг Safe Delete для безопасного удаления символов из исходного кода. Его можно применять в отношении классов, функций, переменных, перечисляемых типов, пространств имен и даже концептов.
Прежде чем удалять символ, ReSharper C++ находит его использования и показывает превью изменений в исходном коде — так вы можете убедиться, что не будет удалено ничего лишнего. При попытке удаления сложной сущности, такой как класс или пространство имен, ReSharper C++ рекурсивно проверит использование всех ее членов.
В этой версии поддерживаются некоторые новые возможности языка, в том числе if consteval, модули стандартной библиотеки C++23, атрибут [[no_unique_address]] и статический operator()/operator[].
В ReSharper 2023.2 добавлена пара новых возможностей форматирования кода C#, которые улучшают читаемость цепочек вызовов метода.
Первая опция контролирует наличие разрыва строки перед первым вызовом метода. Вторая предназначена для случаев, когда смешиваются вызов метода и вызов свойства, и определяет, нужен ли разрыв строки после вызова свойства.
AI Assistant не встроен в ReSharper, его нужно устанавливать отдельно. Доступ к AI Assistant временно ограничен, и вы можете оказаться в листе ожидания.
Подробнее об AI Assistant и его установке через Toolbox App или установщик dotUltimate читайте в документации.
По умолчанию AI Assistant в ReSharper знает, какие языки, фреймворки, библиотеки и технологии используются в вашем решении. Благодаря этому он генерирует более точные и конкретные ответы.
При использовании опции Smart chat помощник ссылается на конкретные файлы и символы, получает фрагменты кода или информацию о свежих изменениях в проекте, находит использования тех или иных методов. В результате он предлагает наиболее точные решения.
После установки плагина AI Assistant в ReSharper появятся контекстные действия для использования возможностей искусственного интеллекта. AI Assistant умеет:
В 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. Подробнее