Что нового в Rider

В Rider 2020.2 представлен ряд востребованных возможностей, таких как Localization Manager и поддержка шейдеров в рамках интеграции с Unity. Мы полностью переработали инструмент запуска юнит-тестов и API отладчика, сделав их более быстрыми, мощными и стабильными. Этот релиз также включает в себя улучшенную поддержку C#, точки останова в данных и полную поддержку пул-реквестов GitHub.

Отладчик

Новый API отладчика

Новый API отладчика

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

Точки останова в данных

Точки останова в данных Только для Windows

Точки останова в данных полезны, когда необходимо сосредоточиться на свойствах конкретного объекта. Обычно они используются в ситуациях, когда известно, какие данные изменятся, но неизвестно, какой именно код инициирует изменение. Эта возможность будет доступна в окне Watch и будет работать даже с элементами массивов. Ввиду текущих ограничений платформы возможность, вероятно, будет доступна только для .NET Core 3+ под Windows.

Подробнее

Действие Pin-To-Frame

Действие Pin-To-Frame

В Rider 2020.2 было добавлено действие Pin-To-Frame. С его помощью можно закреплять параметры функций, чтобы они отображались в списке стековых кадров. Действие используется при отладке рекурсивных функций, чтобы следить за тем, как изменяется состояние параметров с каждым шагом рекурсии.

Подробнее

Localization Manager

В Rider теперь доступен Localization Manager, который упрощает процесс локализации сайтов и приложений .NET. Чтобы перейти к нему, используйте меню Tools или откройте файл .resx двойным щелчком.

Localization Manager позволяет просматривать все содержимое включенных в проект файлов .resx (всех или некоторых из них) в одной таблице.

Легко находите все неиспользуемые ресурсы или ресурсы, для которых отсутствуют локализованные значения.

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

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

Экспортируйте всю таблицу в формат CSV для отправки переводчикам и импортируйте окончательную версию обратно в Localization Manager.

Добавляйте и редактируйте комментарии к любому объекту в файлах ресурсов прямо в таблице, а также экспортируйте и импортируйте добавленные комментарии.

Просматривайте всю иерархию файлов .resx в вашем решении в различных режимах группировки.

GameDev

Unity

Поддержка шейдеров

В Rider 2020.2 была добавлена долгожданная поддержка шейдеров Cg и HLSL! В рамках этой поддержки реализована подсветка синтаксиса, комплишен, семантическая подсветка ошибок, переход к определению, действие Find usages, рефакторинги и многое другое.

Rider полностью понимает структуру файлов шейдеров, включая макросы, и позволяет переходить к определениям макросов и разворачивать их прямо в коде. IDE обнаруживает и обрабатывает файлы, включаемые при помощи директивы #include, а Ctrl+Щелчок мыши по такому файлу позволит сразу к нему перейти.

Точки паузы

Точки паузы

Мы добавили новый вид точек останова. Если установить в коде точку останова и преобразовать ее в точку паузы, то, как только отладчик дойдет до нее, Unity Editor немедленно переключится в режим паузы, что позволит вам просматривать состояние игры в окне инспектора.

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

Анализ кода для Burst

Анализ кода для Burst

Компиляция кода при помощи Burst может значительно улучшить производительность вашего приложения Unity, однако такой код может использовать не все возможности языка.

Rider 2020.2 выполняет интеллектуальный анализ кода, вызываемого внутри контекстов Burst, и подсвечивает недопустимый код, например использующий упаковку, конструкции foreach или try/catch, обращение к статическим полям и так далее.

USB-отладка для устройств Apple

USB-отладка для устройств Apple

В Rider уже есть отличная поддержка отладки плееров Unity по сети, включая автономные плееры для десктопа, мобильных устройств и консолей.

В Rider 2020.2 была добавлена возможность отладки по USB на устройствах Apple (USB-отладка для Android-устройств запланирована на будущий релиз).

Массовые быстрые исправления

Массовые быстрые исправления

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

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

Расширенное отображение значений в отладчике

Расширенное отображение значений в отладчике

Отладчик Rider теперь отображает дополнительную контекстную информацию при работе с проектами Unity. Это облегчает доступ к активной сцене, дочерним игровым объектам и любым присоединенным компонентам.

Кроме того, при отображении значений некоторых типов в Rider теперь показывается более подробная информация: углы Эйлера для кватернионов, точные значения координат для векторов, состояние (включенное/выключенное) для компонентов Behaviour и так далее.

Интегрированная поддержка UnityYamlMerge

Интегрированная поддержка UnityYamlMerge

Rider will automatically use Unity’s Smart Merge tool to merge asset files when performing integrated version control operations.

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

  • Значительно снижено использование памяти и повышена скорость обработки при индексации текстовых ассетов для поиска использований кода в сценах, префабах и других ассетах.
  • Добавлен дополнительный словарь для встроенного в Rider средства проверки орфографии, который содержит распространенные термины, связанные с Unity API.
  • Code Cleanup теперь распознает типы Unity и больше не будет менять порядок сериализованных полей, чтобы не нарушать их отображение в инспекторе Unity.
  • More minor features and fixes.

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

Rider для Unreal Engine

Вас интересует разработка игр на Unreal Engine? Мы стремимся сделать Rider автономной, универсальной и полнофункциональной IDE для разработки игр, поэтому реализовали в нем предварительную поддержку разработки с использованием Unreal Engine:

  • Нативная поддержка C++, основанная на движке ReSharper C++.
  • Оптимизированная производительность для работы с проектами Unreal Engine.
  • Улучшенная интеграция с Unreal Editor и отображение информации из файлов Blueprints в редакторе Rider.
  • Понимание используемых в UE механизмов рефлексии и RPC, а также контроль соблюдения правил именования UE.
  • Поддержка HLSL и C#, JSON, а также диалектов uproject/uplugin.

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

Анализ кода

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

Механизм анализа кода теперь учитывает атрибуты JetBrains.Annotations (как NotNull, так и CanBeNull), используемые в API, даже если в коде запрещено использование ссылочных типов, допускающих значение null (#nullable disable).

Кроме того, для IAsyncEnumerable‹T› теперь доступны контекстные действия для преобразования foreach в LINQ-выражения и обратно, если для вашего проекта установлен NuGet-пакет System.Linq.Async.

Теперь можно легко сгенерировать реализации IEqualityComparer‹T› и IComparer‹T› с помощью соответствующих быстрых исправлений.

Механизм анализа кода теперь учитывает аннотации компилятора (такие как AllowNull и DisallowNull) при проверке допустимости значения null для реализованных и переопределенных членов.

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

Анализ кода теперь учитывает правила dotnet_diagnostic из файла .editorconfig. Укажите в файле .editorconfig минимальный уровень значимости инспекций (пример: dotnet_diagnostic.CS1058.severity = hint), и Rider будет учитывать его при отображении инспекций.

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

Для кода XAML теперь доступны встроенные подсказки. Подсказки отображаются для названий свойств разметки и для свойств DataContext, а также для внешних и внутренних отступов (чтобы не приходилось запоминать их порядок).

Быстрое исправление Suppress nullable warning with ! можно отключить для отдельного решения через меню, вызываемое нажатием Alt+Enter.

Юнит-тестирование

Мы полностью переработали наш инструмент запуска юнит-тестов: теперь для обеих сред выполнения (.NET Framework и .NET Core), запускаемых из процесса Visual Studio, используется один и тот же инструмент запуска. Это помогло решить множество проблем с обнаружением, запуском и отладкой юнит-тестов, а также дало возможность полностью управлять иерархиями юнит-тестов для .NET Core.

Новый инструмент запуска юнит-тестов содержит следующие важные улучшения:

  • Встроенная поддержка MSFakes для фреймворков юнит-тестирования NUnit, xUnit и MSTest v2.
  • Встроенная поддержка TypeMock Isolator для NUnit, xUnit и MSTest v2.
  • Тесты MSTest v2 теперь можно запускать без установленной Visual Studio.

Rider теперь поддерживает атрибут DisplayName в тестах .NET Core для фреймворков xUnit и NUnit.

При настройке фильтра для дерева юнит-тестов теперь можно выбрать несколько статусов одновременно. Для того чтобы выделить несколько статусов или, напротив, снять с них выделение, удерживайте при нажатии на них клавишу Ctrl.

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

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

В меню, доступном по нажатию Alt+Enter, теперь есть действие для открытия диалога настроек, если один из ваших юнит-тестов MSTest завершится со статусом «Visual studio installation folder is not set».

Интеграция с системами контроля версий

Пул-реквесты GitHub

Расширенная поддержка пул-реквестов GitHub наконец-то доступна! Вы сможете просматривать, назначать и даже объединять пул-реквесты, читать встроенные комментарии и изучать хронологию, отправлять комментарии и ревью, а также принимать изменения.

Новая поддержка включает в себя:

  • Обновленный внешний вид средства просмотра пул-реквестов.
  • Отображение результатов предкоммитных проверок в хронологии.
  • Работу с ревью.
  • Взаимодействие с комментариями.
  • Возможность выполнить merge пул-реквеста прямо из IDE.

Подробнее об этой новой функциональности читайте в нашем блоге.

Другие возможности работы с VCS

Помимо полной поддержки пул-реквестов GitHub были добавлены и другие возможности работы с системами контроля версий:

  • Поддержка Git, установленного в WSL2.
  • Улучшенное отображение результатов действия Compare branches.
  • Возможность выбрать несколько локальных коммитов на вкладке Log в окне Git и объединить их в один. Это действие доступно из контекстного меню, вызываемого правой кнопкой мыши.

NuGet

В окне NuGet в новом разделе Implicitly Installed Packages теперь можно просмотреть все транзитивные пакеты, относящиеся к решению или проекту.

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

Мы добавили новое всплывающее контекстное меню, которое можно вызвать, нажав Alt+Enter на пакете NuGet или щелкнув на нем правой кнопкой мыши. Оно позволяет быстро выполнять любые релевантные действия с отдельными пакетами NuGet: обновлять, удалять, открывать в Assembly Explorer для изучения API, отображать в файловом менеджере, переходить на страницу пакета на NuGet.org или искать зависящий от них код.

Также добавлено новое действие Quick NuGet Documentation, позволяющее просматривать пути неявных ссылок на пакет.

Мы также улучшили поле поиска пакетов. Щелкните на иконку увеличительного стекла либо нажмите Alt+Стрелка вниз, чтобы открыть историю недавних запросов поиска пакетов.

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

На вкладке Feeds теперь сразу можно увидеть недействительные пути веб-каналов: они будут выделены красным прямоугольником.

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

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

Поддержка F#

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

Рефакторинг Introduce Variable теперь работает и для выражений. При вызове он отобразит подвыражения, к которым может быть применен (при условии, что вы не выделили конкретную часть кода), и предложит заменить похожие подвыражения. Он также автоматически подберет для новой переменной подходящее название, исходя из типа и контекста.

Рефакторинг Rename теперь поддерживает переименование шаблона «_». Если вам нужно превратить шаблон «_» в переменную с названием, можно вызвать рефакторинг, вместо того чтобы делать это вручную. Кроме того, предлагая название для переменной, рефакторинг учитывает ее тип и контекст, в котором она используется.

Быстрые исправления и контекстные действия

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

Другие возможности работы с VCS

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

Анализаторы

Анализаторы

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

Редактор

Теперь доступно больше возможностей для настройки подсветки различных видов символов. Кроме того, сокращения типов теперь подсвечиваются аналогично полным названиям соответствующих типов, а функции могут подсвечиваться аналогично методам. Both are external contributions, and we thank Igor Bagdamyan for them.

Rider теперь отображает подсказки типов для выражений внутри цепочек |>. Они помогают следить за преобразованиями в цепочке без необходимости просчитывать их в уме. This too is an external contribution, which we’d like to thank Saul Rennison for.

Редактор теперь подсвечивает в коде обозначения цветов, чтобы сделать их более заметными.

Finally, we now have an F# Compiler Service monitor – thanks again to Saul. Монитор оповещает пользователя об активности FCS при помощи специального индикатора. Это нужно в основном для диагностики, чтобы помочь разработчику понять, почему IDE «задумалась»; в случае, если поведение покажется подозрительным, вы всегда можете сообщить о нем команде Rider, чтобы она его проанализировала.

To learn more about updates in F# support, please take a look at the release notes on GitHub.

Поддержка x:Bind

Хорошие новости для разработчиков UWP: мы наконец-то реализовали поддержку компилируемых привязок x:Bind!

Rider корректно интерпретирует код x:Bind и предлагает различные инспекции и соответствующие быстрые исправления. Он предупреждает об отсутствующих сеттерах свойств и атрибутах BindBack, а также о коллизиях при перегрузке методов. Кроме того, доступен набор быстрых исправлений Create from Usage, позволяющих сгенерировать в выделенном коде C# полноценное поле, свойство или метод.

Для атрибутов propertyPath, BindBack и UpdateSourceTrigger внутри выражений x:Bind доступен комплишен и информация о параметрах.

Рефакторинги Change Signature и Safe Delete теперь распознают вызовы методов в коде XAML и вносят в них соответствующие изменения, а рефакторинги Make Static/Const и Encapsulate Field способны работать при вызове напрямую из кода XAML и корректно обновляют код XAML, если вызвать их из отделенного кода C#.

Анализ кода x:Bind поддерживает проверки на допустимость значения null. Rider теперь показывает инспекции, связанные с использованием значения null, непосредственно в коде XAML, если код C# содержит атрибуты CanBeNull и NotNull; например, для аргументов метода, на который ссылается свойство propertyPath, могут быть показаны инспекции «Possible System.NullReferenceException» и «Possible null assignment to non-nullable entity».

Другие возможности Rider, такие как действие Find usages или действие перехода к объявлению, также умеют работать с привязками x:Bind.

Плагины

dotTrace

dotTrace dotUltimate

Плагин dotTrace может профилировать нативную часть приложений Mono/Unity под Windows. Начните сеанс со включенной опцией Enable native profiling, и в снэпшотах производительности будут показаны стеки вызовов как для нативного, так и для управляемого кода.

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

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

Теперь в разделе Settings/Preferences | Build, Execution, Deployment | Dynamic Program Analysis | Filtering доступна возможность фильтрации по процессам, модулям, классам и методам, позволяющая сузить область динамического анализа программы.

  • Чтобы анализировать только какой-то конкретный метод, класс и т. д., добавьте его в список Analyze code only in.
  • Чтобы скрыть какой-то метод, класс и т. д. от анализа, добавьте его в список Do not analyze code in.

dotCover dotUltimate

В новом релизе добавлено несколько полезных возможностей в dotCover:

  • Окно Unit Tests Coverage теперь позволяет экспортировать отчеты о покрытии кода.
  • В окне Unit Tests Coverage теперь есть функциональность быстрого поиска.
  • Теперь можно переходить от символа в коде к тому же символу в дереве покрытия (Navigate to | Coverage Tree или при помощи иконки Navigate from Editor на панели инструментов в окне Coverage).

Azure Toolkit для Rider

После того как вы установите эмулятор хранилища данных Azurite при помощи npm (npm install -g azurite), в окне Services появится узел Azurite. Оттуда вы сможете запускать и останавливать эмулятор хранилища данных, а также удалять его данные.

При использовании триггеров типа «таймер» в Azure Functions необходимо ввести корректное выражение NCrontab, чтобы определить время запуска функции. Azure Toolkit для Rider упрощает редактирование файла crontab, предоставляя комплишен с несколькими примерами выражений, на которых можно основываться при написании своих собственных.

Rider теперь проверяет выражения NCrontab на корректность и показывает дополнительную информацию о возможных ошибках.

Плагин Markdown

Плагин Markdown

Теперь в Rider есть поддержка Markdown. Rider 2020.2 поставляется вместе с плагином Markdown. Плагин распознает файлы Markdown в вашем решении, предоставляет специальный редактор для них и отображает сгенерированный HTML в режиме интерактивного предпросмотра.

Поддержка Godot

Поддержка Godot

Мы переработали конфигурации запуска для Godot. Конфигурации Player и Editor поддерживают запуск, отладку и запуск с профилированием. Кроме того, можно редактировать параметры командной строки, используемые для запуска плеера и редактора.

Вы также можете выполнять запуск или отладку отдельных сцен прямо из контекстного меню на панели Solution Explorer.

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

Редактор больших значений

Редактор больших значений

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

Новое отображение логических ячеек

Новое отображение логических ячеек

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

Предпросмотр запроса при редактировании

Теперь, прежде чем записать новые значения в редакторе данных, можно посмотреть, какой запрос будет выполнен. В редакторе теперь есть иконка DML, которая становится активной при наличии незаписанных изменений. Нажмите на иконку, чтобы открыть диалог предпросмотра DML-запроса. Отображаемый в окне запрос может отличаться от фактического SQL-запроса, который будет выполнен для изменения данных, так как для обновления таблиц Rider использует драйвер JDBC; однако в большинстве случаев запросы будут совпадать.

Читайте статью Что нового в DataGrip, чтобы узнать обо всех улучшениях в работе с базами данных, которые также присутствуют в Rider 2020.2.

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

Новые возможности для JavaScript

Новые возможности для JavaScript

Новые интеллектуальные intention-действия (Alt+Enter) помогут ускорить выполнение некоторых операций. Например, можно быстро преобразовать цикл for с числовым индексом в перебирающий метод forEach. Кроме того, стало проще просматривать документирующие комментарии в файлах JavaScript и TypeScript: мы сделали рендеринг прямо в редакторе — теперь все аккуратнее.

Prettier в качестве форматера по умолчанию в JavaScript-проектах

Prettier в качестве форматера по умолчанию в JavaScript-проектах

Форматирование кода с помощью Prettier стало еще удобнее. Просто скачайте плагин из JetBrains MarketPlace, а затем на странице Settings/Preferences | Plugins установите флажок возле новой опции «On code reformat», и IDE будет использовать Prettier вместо встроенного инструмента форматирования. По умолчанию это работает только для файлов .js, .ts, .jsx и .tsx, но вы можете легко добавить другие типы файлов.

Первоклассная поддержка Vue

Первоклассная поддержка Vue

За прошедший год мы добавили поддержку Nuxt.js, настройки стиля кода для Vue, улучшенную обработку Vue-файлов в проектах на TypeScript и множество других возможностей. Работать с проектами Vue в Rider стало еще удобнее.

Прочитайте статью Что нового в WebStorm, чтобы узнать обо всех улучшениях для веб-разработчиков, которые также присутствуют в Rider 2020.2.

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

Диалог Conflicts был переработан и теперь является самостоятельным этапом в интерфейсе рефакторингов. Конфликты теперь отображаются не в виде простого списка, а в виде дерева с группированием по файлам. Чтобы вернуться к отображению в виде списка, нажмите иконку Flatten на панели инструментов справа.

При вызове рефакторингов Introduce parameter и Introduce field Rider уточнит, к какой части выражения следует применить рефакторинг.

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

Xamarin

Есть два важных изменения:

  • Шаблоны файлов доступны в проектах Xamarin как для macOS, так и для iOS.
  • Мы улучшили синхронизацию с Xcode: теперь, если файл .Designer.cs отсутствует, Rider генерирует его автоматически, а не показывает сообщение об ошибке.

Прочее

  • Новый стиль отображения результатов поиска в Search Everywhere.
  • Теперь отладчик поддерживает присоединение к конфигурациям размещения среды выполнения .NET Core и запуск их в режиме отладки.
  • Для всех исполняемых проектов генерируются конфигурации запуска.
  • Теперь поддерживается использование поля ProjectReferences в проектах веб-сайтов.