Что нового в Rider

Rider 2021.2 предлагает улучшенную поддержку C#, в том числе для анализа кода, ссылочных типов, допускающих значение null (NRT) и генераторов кода. Для веб-разработчиков мы подготовили поддержку конечных точек ASP.​NET Core и отладку приложений Blazor WebAssembly на стороне клиента. Для разработчиков игр, использующих Unity и Unreal Engine, также есть много интересного. А начальный экран теперь позволяет импортировать настройки из других IDE, таких как Visual Studio, VS for Mac или Visual Studio Code.

Поддержка конечных точек ASP.NET Core

Новое окно Endpoints поможет исследовать конечные точки ASP.​NET Core, которые зарегистрированы либо сопровождаются аннотацией [Route], [Http{Method}] или [AcceptVerbs], а также переходить к ним напрямую.

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

Вкладка HTTP Client позволяет создавать и посылать запросы приложению. Это может пригодиться вам при тестировании API.

Тестируйте API при помощи встроенного плагина OpenAPI Specifications. Встроенная поддержка Swagger UI для файлов OpenAPI поможет в написании запросов и разборе получаемых ответов.

Также мы поддержали новые возможности в редакторе:

  • При использовании HttpClient автодополнение предложит вам все URI, которые соответствуют действиям в контроллерах, аннотированных атрибутом [Route], [Http{Method}] или [AcceptVerbs].
  • Вы можете с легкостью выполнять навигацию между этими URI и атрибутами маршрута в контроллерах, пользуясь действиями Go to Declaration и Find Usages.
  • Если вы переименуете атрибут маршрута в контроллере, изменения также применятся к упоминаниям этого атрибута в URI. Вы можете переименовать маршрут прямо в строке URI.

Подробнее о возможностях нового окна Endpoints читайте в нашем блоге.

Отладка Blazor WebAssembly

Долгожданная новость: теперь Rider позволяет выполнять отладку Blazor WebAssembly на стороне клиента! Поддерживаются приложения .NET 5.0 и .NET Core 3.1.

Follow the official Microsoft guide to set up WASM debugging. После этого можете запускать отладку привычным для вас образом.

Чтобы пользоваться отладкой WASM на Linux и macOS, необходимо заранее установить сертификаты разработчика. If you are using Ubuntu, you can follow this guide.

Rider supports the debugging proxy if either of these NuGet packages are installed: Microsoft.AspNetCore.Components.WebAssembly.DevServer or Microsoft.AspNetCore.Components.WebAssembly.Server. В данный момент мы не поддерживаем индивидуальные прокси для приложений Blazor WASM.

Языковая поддержка

Анализ кода на C#

Используете временные переменные, чтобы поменять местами два значения? Предлагаем вам более элегантное решение. Модернизируйте ваш код при помощи нового быстрого исправления Swap via deconstruction.

Сократите количество операций выделения памяти и повысьте скорость работы вашего кода! Создавайте пустые массивы при помощи Array.Empty<T>.

При выделении памяти для нового Type[0] Rider предложит вам использовать тип Type.EmptyTypes, что более эффективно с точки зрения памяти.

Если вам не требуются определенные EventArgs, Rider сообщит вам о возможности замены new EventArgs() на EventArgs.Empty.

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

  • Используйте свойство generated_code из .editorconfig, чтобы помечать автоматически сгенерированные файлы и папки, таким образом исключая их из анализа.
  • Анализ кода для членов с большим количеством локальных функций и замыканий стал работать быстрее.
  • Улучшилась производительность действия Find similar issues и анализа кода для больших и сложных операторов и выражений switch.

Ссылочные типы, допускающие значение null (NRT)

Разрешили использование NRT и теперь вынуждены бесконечно скрывать предупреждения в коде?

Если вы скрыли предупреждение (!) для фрагмента кода, но со временем необходимость в этом исчезла, Rider уведомит вас.

Мы добавили контекстное действие, позволяющее найти все скрытые предупреждения, связанные с допустимостью null, в выбранной области видимости. Просматривая результаты в окне Find Results, вы сможете оценить, где скрыть предупреждение по-прежнему нужно, а где от этого можно избавиться.

Появился новый рефакторинг для изменения допустимости значения null: воспользоваться быстрым исправлением, действием Refactor This или рефакторингом без модального диалога можно при добавлении или удалении аннотации допустимости null (?).

Rider обновит соответствующие аннотации и предложит применить изменения ко всей кодовой базе.

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

Обновите атрибуты JetBrains.Annotations, применив синтаксис NRT и атрибуты, поддерживаемые компилятором. К примеру, вы можете заменить [CanBeNull] string на string?

Rider сообщит вам об избыточных атрибутах JetBrains.Annotations ([NotNull] string, [ItemCanBeNull] List<string?> и пр.) и предложит соответствующее быстрое исправление.

Если синтаксис type annotation не разрешен, новая инспекция и соответствующее быстрое исправление добавят аннотации, поддерживаемые компилятором. Например:

  • замена [JetBrains.Annotations.NotNull] T param на [DisallowNull] T param (where T: class?)
  • замена [JetBrains.Annotations.CanBeNull] T на [System.Diagnostics.MaybeNull] T (в C# 8, где синтаксис T? не разрешен)

Мы добавили в Rider новые инспекции и быстрые исправления для работы с аннотациями, которые поддерживаются компилятором ([DisallowNull], [AllowNull], [MaybeNull], [NotNull] и др.).

Появилась инспекция для отслеживания избыточных аннотаций (например, использование [AllowNull] для типа NRT) и соответствующее быстрое исправление, чтобы убирать их.

Rider предложит вам использовать синтаксис NRT, если это допустимо.

Другие улучшения, достойные внимания:

  • Теперь Rider проверяет, должны переменные допускать значение null или нет, и по возможности предлагает более строгие типы.
  • Мы обновили многие контекстные действия, быстрые исправления и постфиксные шаблоны так, чтобы они лучше работали со скрытием предупреждений, связанных с допустимостью null. Они либо оставляют скрытие такого предупреждения, либо добавляют скрытие предупреждения для нового кода, заменившего исходный код, в котором такое скрытие уже было.
  • Мы улучшили поддержку дженериков, использующих NRT.

Подробнее о поддержке NRT в ReSharper и Rider 2021.2 читайте в этом блог-посте.

Поддержка генерации кода

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

К сгенерированным файлам теперь также применимы рефакторинги. К примеру, вы можете использовать рефакторинг Rename, чтобы переименовать автоматически сгенерированное свойство. При этом Rider также переименует соответствующий символ в коде, написанном вручную.

Рефакторинг Change Signature позволяет проверить, скомпилируется ли код, который будет автоматически сгенерирован после внесения изменений.

Также вы можете пользоваться Find Usages, искать наследников, переходить от сгенерированного кода к коду, написанному вручную (Ctrl+Click и Navigate To), и многое другое.

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

Ошибки и предупреждения, найденные в сгенерированном коде, отобразятся в редакторе и на панели маркеров.

Также теперь Rider поддерживает код, созданный генераторами кода в VB.NET.

Игровая зона

Постепенно становясь первоклассной IDE для разработки игр, Rider вводит новые возможности для Unity и некоторые важные улучшения поддержки Unreal Engine в рамках программы раннего доступа. Если вы используете Godot, обязательно попробуйте плагин Godot Support для Rider.

Поддержка Unity

Умная интеграция Rider с редактором Unity обеспечивает проверку наличия открытых и несохраненных сцен перед коммитом. Вам больше не придется беспокоиться, все ли вы сохранили перед коммитом.

Как вы знаете, Rider показывает ссылку на документацию для классов и методов Unity во всплывающем окне. Теперь же вы можете использовать действие External Documentation (и соответствующе сочетание клавиш), чтобы перейти к документации, минуя всплывающее окно.

Теперь в Rider можно делать отладку локальных UWP-проигрывателей: для этого нужно настроить Windows так, чтобы он разрешал подключение к отлаживаемому процессу.

Представление Packages в Unity Explorer теперь гораздо быстрее отображается при повторном открытии решения и даже воспроизводит раскрытые папки.

В этом релизе мы улучшили отладку IL2CPP-проигрывателей за счет отключения Break on Unhandled Exception при подключении к IL2CPP-проигрывателю.

Как обычно, мы добавили множество мелких улучшений и исправлений. Например, методы [UnitySetup] больше не отмечаются как неиспользованные, а имена слоев корректно отображаются в списке автодополнения для старых проектов. Мы улучшили производительность инспекций для Unity — прежде всего тех, которые работают с большими файлами.

Unreal EngineРанний доступ

Пока что Rider для Unreal Engine доступен в рамках программы раннего доступа. Однако он уверенно движется в сторону релиза. Ниже мы расскажем обо всем, над чем работали со времен релиза 2021.1.

Поддержка Unreal Engine 5. Да, все так! Rider for Unreal работает с новыми проектами Unreal Engine 5 не хуже, чем с проектами Unreal Engine 4.

Поддержка открытия файлов .uproject. Да, больше не придется генерировать файлы решений Visual Studio — Rider научился открывать проекты Unreal Engine прямо из файла <ИмяПроекта>.uproject.

Rider для Unreal Engine теперь работает на Mac! Просто откройте нужный файл <ИмяПроекта>.uproject и наслаждайтесь Rider for Unreal Engine на вашем Mac. Вы сможете редактировать код на C++ и файлы шейдеров (HLSL), выполнять навигацию, запускать инспекции и рефакторинги, настраивать стиль кода и применять для него быстрые исправления. Также мы поддержали Blueprint (поиск кода в файлах Blueprint, ссылки и счетчики Code Vision и навигацию), тесную интеграцию с Unreal Editor и встроенный в него отладчик. Версия для macOS работает с Unreal Engine 4.26 и выше.

Крупное обновление поддержки Natvis и встроенная демонстрация результатов отладки. Мы добавили поддержку наследуемых атрибутов, спецификаторов формата, настраиваемых элементов списка и др. — в том числе однострочные описания всех структур, не поддерживаемых Natvis, и узел [Raw View] для просмотра данных объекта.

Расширенные настройки стиля кода. Rider распознает проекты Unreal и сам выставляет настройки, позволяющие IDE понимать конвенции стиля кода UE и следовать им. Он подсветит код, нарушающий правильный стиль, и предложит быстрые исправления, чтобы внести правки.

Последнее, но не менее значимое нововведение — плагин EzArgs, обеспечивающий простой доступ к аргументам конфигурации run/debug для C++: достаточно просто ввести аргумент в раскрывающийся список на панели инструментов.

Инструмент очистки кода Code Cleanup

Мы объединили окна Reformat File и Code Cleanup. Старые сочетания клавиш для этих окон продолжат работать, но теперь вы сможете пользоваться единым представлением и выполнять оба шага одновременно. Для профилей очистки указываются входящие в них действия. Также теперь есть кнопка для переключения в режим редактирования профилей.

В окне коммита теперь можно включить автоматическую очистку кода для ваших изменений и выбрать желаемый профиль. Либо воспользуйтесь новой опцией в окне Reformat and Cleanup для переформатирования/очистки только тех изменений в текущем файле, которые не были закоммичены.

Теперь действия по переформатированию кода, оптимизации импортов и реорганизации кода также доступны для CSS, JavaScript и SQL. Вы можете отредактировать правила в Settings | Editor | Code Cleanup.

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

Импорт настроек из других IDE

Пользуетесь Rider в первый раз? Для тех, кто никогда не пользовался Rider, мы добавили на начальный экран возможность импортировать настройки из других IDE, таких как Visual Studio, Visual Studio для Mac и Visual Studio Code. Также Rider распознает настройки ReSharper.

Подробнее об импорте настроек из других IDE читайте в нашем блоге.

Упорядочивание окон с помощью перетаскивания

Теперь нужное окно можно просто перетащить в удобное место — как внутри основного окна IDE, так и в отдельное окно. Просто нажмите на заголовок окна и, удерживая его, перетащите в любую подсвеченную область.

Прозрачные заголовки окон Только для macOS

Для пользователей macOS заголовки окон IDE теперь прозрачные (за исключением полноэкранного режима). Это значит, что между заголовком окна и самим окном нет видимой границы.

Расширенные настройки

Настроить параметры Rider для конкретных сценариев использования можно в меню Preferences/Settings раздела Advanced Settings. Например, можно добавить левое поле в режиме Distraction-free или сделать так, чтобы курсор двигался вниз, когда вы используете действие Comment with Line Comment.

Новый вариант навигации в Preferences/Settings

Мы упростили навигацию в окне настроек Preferences/Settings: в правом верхнем углу окна появились стрелки. Они позволяют быстро перемещаться между открытыми разделами.

Отладчик

По умолчанию отладчик вычисляет и показывает значения свойств. Но иногда их вычисление могло занимать много времени. Поэтому мы добавили новое действие Disable Evaluation of Selected Item.

Бывает, что вычисление вызова метода оказывается фатальным для сеанса отладки, особенно в случае с нативным кодом. Теперь Rider запоминает проблемные вызовы и запрещает вам вычислять их.

При пошаговой отладке каждый новый файл открывается в новой вкладке, из-за чего панель вкладок может здорово разрастись. Теперь вы можете воспользоваться вкладкой предпросмотра. Она позволяет просматривать файлы в одной вкладке друг за другом, не открывая каждый файл в отдельной вкладке. Включить эту возможность можно в Settings/Preferences | General | Editor Tabs | Opening Policy.

Управление версиями

Списки изменений (changelists)

Раньше узел, хранящий изменения, которые не были закоммичены, назывался Default Changelist. В этом релизе мы сделали формулировку более точной — Changes. Это изменение распространяется на все новые проекты.

Rider больше не будет автоматически создавать списки изменений при выполнении операций Git. К примеру, при cherry-pick больше не будет создаваться список изменений.

Если вы хотите, чтобы списки, напротив, создавались, перейдите в Preferences/Settings | Version Control | Changelists и отметьте галочкой Create changelists automatically.

Текстовый поиск в версиях «Локальной истории»

Мы добавили поле поиска в диалоговом окне Local History, чтобы вам было легче переходить к нужному тексту в версиях локальной истории. Для быстрого поиска по истории файла щелкните правой кнопкой мыши по измененному файлу, выберите Local History | Show History в контекстном меню и введите ключевые слова в поле поиска.

Цифровая подпись GPG

Теперь вы можете защитить Git-коммиты, подписав их с помощью GPG. Включить эту функцию можно в Preferences/Settings | Version Control | Git. Если вы пользуетесь ключом GPG в первый раз, вам сначала нужно будет настроить его. Если вы хотите использовать настроенный ранее ключ GPG, необходимо выбрать его из выпадающего списка.

Повышение минимальной поддерживаемой версии Git

Теперь самая ранняя версия Git, которую поддерживает IDE — 2.17. Мы внесли это изменение, поскольку сейчас версия 2.17 — самая ранняя, для которой еще выпускаются обновления безопасности.

Редактор

Структурное удаление

Мы реализовали структурное удаление кода. Теперь можно выделять и удалять код, используя любой вид структурного выделения (структурную навигацию, расширение/сужение области выделения, реорганизацию кода и др.), — Rider сам внесет необходимые структурные модификации. Вы можете убирать запятые и точки с запятыми для аргументов в вызове метода, удалять скобки в аргументах атрибута или в пустых инициализаторах объекта.

Быстрый просмотр документации

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

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

Предпочитаете использовать стиль отступов Pico? Настроить стиль Pico теперь можно на вкладе Braces Layout, перейдя на страницу Preferences/Settings | Editor | Code Style | C# | Braces Layout.

Веб-разработка

Перезагрузка страниц в браузере при сохранении изменений

Теперь, когда вы делаете превью HTML-файлов в браузере и параллельно сохраняете новые изменения в HTML-файле или связанных с ним файлах CSS и JavaScript, IDE автоматически обновит превью. Эта возможность включена по умолчанию.

Рефакторинг Rename для React useState hooks

Вам больше не нужно тратить время на рефакторинг каждого значения или функции useState — Rider переименует их самостоятельно. Установите курсор на значение состояния и нажмите Shift+F6 или выберите Refactor | Rename в контекстном меню.

Автоматический импорт для require()

Знаете ли вы, что Rider умеет добавлять отсутствующие операторы импорта при вводе ES6-символов? Теперь это также возможно для модулей CommonJS: при автодополнении кода будут добавлены необходимые импорты require.

Подробнее об этом рассказываем в статье о WebStorm.

Xamarin

Теперь вы можете генерировать не только файлы .apk, но и файлы .aab (Android App Bundle). Скоро .apk станет единственным форматом, который можно будет загрузить на Google Play Store.

Появилась возможность создавать и редактировать XCAssets для imageset, appiconset и colorset прямо в Rider. Это позволяет просматривать различные конечные устройства и относящиеся к ним изображения, иконки и цвета. Вы можете добавлять или перемещать изображения и иконки, просто перетаскивая их. Также мы добавили инструмент выбора цвета, позволяющий с легкостью выбирать цвета.

Теперь, когда вы редактируете разметку Android или файлы ресурсов, файл Resource.Designer.cs генерируется автоматически и убирает все ошибки, которые ранее показывались неверно.

Поддержка F#

Постфиксные шаблоны при автодополнении кода

Постфиксные шаблоны помогают преобразовывать введенные вами выражения, не возвращаясь в начало строки. Мы наконец поддержали их для F#, начав с шаблона let.

Действия

В Rider появилось новое действие, позволяющее выполнять деконструкцию паттернов для tuples и вариантов union.

Мы добавили новые действия для реорганизации кода. Вы можете перемещать элементы вверх, вниз, влево и вправо прямо внутри enum и вариантов union, полей record и вариантов union, предложений в match, кортежей и параметров функций.

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

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

  • Рефакторинг Inline Variable теперь также работает для связывания let верхнего уровня.
  • Мы значительно улучшили рендеринг XML-документации в редакторе.
  • Вы можете указать версию языка в свойствах проекта — она будет автоматически продублирована в .fsproj.
  • Мы дополнили поддержку F# новыми быстрыми исправлениями, рефакторингами и другими улучшениями. Please take a look at the full release notes for more information.

Поддержка Apple Silicon Только для macOS Ранний доступ/0>

Открыт ранний доступ к версии Rider 2021.2 с полной нативной поддержкой чипа M1. Эта версия не включает трансляцию x64-to-ARM64. Используются следующие среды исполнения:

  • Совместимая с Apple Silicon JBR (JetBrains Runtime) для фронтэнда.
  • .NET 6 Preview 4 для бэкенда.

Подробнее о этом читайте на сайте поддержки Rider.

Поддержка баз данных

Генерация из обычного источника данных

Генерация DDL-источников — еще один наш шаг на пути к созданию простой системы версионирования баз данных. Теперь вы можете хранить DDL-файлы в VCS-системе и заново генерировать их каждый раз, когда структура вашей базы обновляется.

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

Раздельные папки для функций и процедур

Опция Separate Procedures and Functions, доступная в настройках проводника баз данных (значок шестеренки), помещает функции и процедуры в разные папки. При включении опции изменения применятся сразу же.

Что касается SQL Server, то для скалярных и табличных функций также есть разные узлы. Для PostgreSQL есть специальный узел, хранящий триггерные функции.

Раздельные узлы для триггеров, ключей и индексов

Еще одна новая настройка — Show Constraints and Triggers in the Schema. Если ее включить, триггеры, ключи и индексы будут отражаться в отдельных узлах на корневом уровне схемы, а не внутри таблиц.

Автодополнение для синонимов объектов из других баз данных SQL Server

Теперь вы можете пользоваться автодополнением для синонимов объектов из других баз данных.

Плагины

dotCover

Теперь dotCover позволяет запускать параллельный анализ покрытия тестовых классов на основе одной сборки. В некоторых случаях это может ускорить анализ покрытия.

Для проектов .NET Core и .NET теперь можно делать предварительную загрузку тест-раннеров для юнит-тестов — имея их в памяти, вы сможете быстрее запускать анализ покрытия.

Другие улучшения, достойные внимания:

  • Мы улучшили поддержку возможностей C# 8.0 и C# 9.0 в дереве покрытия: в частности, теперь показываются стандартные реализации интерфейсов.
  • Теперь dotCover предлагает перезапустить редактор Unity, если изменились фильтры покрытия.

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

Теперь DPA хранит по два значения для каждой найденной проблемы — исторический максимум и значение, полученное при последнем запуске. Это предотвращает ложноотрицательные результаты: раньше найденные проблемы могли не пройти порог и исчезнуть из списка — не потому, что они были исправлены, а потому, что изменились условия запуска.

Есть и другие улучшения:

  • DPA автоматически выключается при запуске профилирования производительности.
  • В окне Dynamic Program Analysis теперь можно адресовать сразу несколько проблем.
  • Теперь вы можете игнорировать проблемы в асинхронных методах при помощи атрибута SuppressMessage.

Анонс SpecFlow

SpecFlow is a tool to bring Behavior-Driven Development to .NET. В ответ на запрос сообщества мы решили помочь разработчикам SpecFlow создать плагин SpecFlow для JetBrains Marketplace. Он обеспечивает подсветку синтаксиса, автодополнение, навигацию и генерацию скелетов для тестов SpecFlow. Подробнее об этих возможностях можно узнать из вебинара Андреаса Виллиха.

Популярные плагины

Мы обновили список популярных плагинов, отображающийся в мастере настройки Rider при первичной настройке. Новый список такой:

Другие возможности

Solution Explorer

Большие по объему директории (node_modules, libs и пр.) могут значительно замедлять индексирование файлов, которое необходимо для быстрого текстового поиска. Теперь вы можете выключить индексирование для той или иной директории через контекстное меню.

Появилась возможность редактировать свойства (Build Action, Copy to Output Directory и др.) сразу нескольких файлов, выбранных в Solution Explorer.

Assembly Explorer и Decompiler

The embedded decompiler now can decompile single-file apps. Поддерживаются форматы однофайловых приложений, используемые в SDK .NET Core 3.1, .NET 5 и будущем .NET 6.

Сборки, идущие в комплекте с такими приложениями, теперь можно просматривать привычным способом.

JetBrains Toolbox App

Вы больше не пропустите критически важные обновления продуктов в JetBrains Toolbox App. Rider сообщит, что можно скачать новую версию, и предложит ее установить. Эта функция будет работать с JetBrains Toolbox App 1.20.8804 или более поздних версий.

Разное

  • Теперь, если при разработке больших представлений Razor редактор начинает работать медленно, вы можете выключить автоматические подсказки и виды анализа, создающие большую нагрузку на процессор. Для этого перейдите в Preferences/Settings | Editor | General | Typing Assistance | Razor | Allow CPU-intensive typing assist.
  • Список Go To Base/Inheritors теперь включает скрытые переопределения.
  • Мы поддержали шаблоны сообщений логов из Microsoft LoggerExtensions. Теперь Rider анализирует код, добавляет подсветку и предлагает контекстные действия.
  • Мы добавили возможность скрывать предупреждения для асинхронных методов.
  • Rider покажет предупреждение при попытке запустить 64-битное веб-приложение на 32-битном IIS Express ("use64Bit": false in launchSettings.json) в режиме выполнения внутри процесса.