.NET Tools Releases

ReSharper 2020.3: поддержка C# 9 и генераторов кода, новые возможности для встроенных подсказок, поддержка UI-фреймворка Avalonia

Read this post in other languages:
English

Всем привет! Представляем третий финальный релиз ReSharper в этом году!

С недавним выходом C# 9 мы начали реализовывать поддержку новых возможностей языка в инструментах ReSharper — это стало главной повесткой ReSharper 2020.3. Важно было покрыть и генераторы кода. В итоге, мы также реализовали долгожданную поддержку UI-фреймворка Avalonia и добавили некоторые новые возможности, которые помогут вам в повседневной работе. Поговорим подробнее об этих улучшениях.

ReSharper 2020.3

C# 9

В C# 9 впервые появились типы record — ссылочные типы с семантикой значений. Они прекрасно подходят для свойств init-only, значения которым можно задать только в ходе инициализации объекта. С типами record вы можете делать свойства и целые объекты неизменяемыми, при этом продолжая использовать инициализаторы объектов.

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

Для позиционных записей со сгенерированным компилятором методом Deconstruct() ReSharper при необходимости предложит объявление о деконструкции.

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

В высокоуровневых программах вы можете размещать код точки входа сразу после директив using (вам не нужны для этого пространства имен или классы). Однако существует несколько правил: во-первых, только один файл в проекте может содержать код верхнего уровня; во-вторых, эти строки должны размещаться сверху — предшествуя любым типам и пространствам имен.

ReSharper поможет вам в соблюдении этих правил, если вы случайно нарушите их при работе с кодом. Также для кода верхнего уровня доступны рефакторинги Extract Method и Extract Local Variable.

Теперь не обязательно указывать тип после оператора new, если он может быть однозначно определен из контекста. Такие выражения носят название target-typed. ReSharper предлагает различные варианты синтаксиса для конструкции new и поддерживает действие Find Usages для конструкторов.

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

ReSharper поддерживает и множество других обновлений языка: статические лямбды, параметры discard в лямбда-выражениях, target-typing для условий, нативные целочисленные типы, методы расширения GetEnumerator для foreach, указатели на функции.

Генераторы кода

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

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

Встроенные подсказки удобны и позволяют расслабиться. Но что если они нужны вам не всегда? И что если можно было бы самим выбирать, когда призывать их на помощь? Теперь такая возможность есть — вы можете настроить для подсказок режим видимости Push-to-Hint. Он позволяет просматривать подсказку, удерживая клавишу Ctrl, (как только вы ее отпустите, подсказка исчезнет) либо двойным нажатием Ctrl (чтобы убрать подсказку, вам нужно будет снова дважды нажать Ctrl).

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

Кстати говоря, появился новый тип подсказок! ReSharper теперь отмечает неявное приведение типов прямо в коде. Наведя на подсказку и нажав Ctrl+Click, вы перейдете к реализации преобразования типов.

Avalonia

В ReSharper 2020.3 мы поддержали Avalonia — UI-фреймворк на основе XAML. Работая с фреймворком, вы теперь можете использовать весь арсенал инструментов ReSharper: инспекции кода и соответствующий набор быстрых исправлений (как для выделенного C#-кода, так и для файлов .axaml), в том числе инспекции для Avalonia, автодополнение и прочие возможности редактора, навигацию и рефакторинги.

В Go to Text (или Find Text) мы включили еще один инструмент для навигации по проекту — нечеткий текстовый поиск, который учитывает возможные опечатки и даже пропущенные слова. Результаты можно просмотреть во всплывающем окне, а также в окне Find Results — сразу после результатов обычного точного поиска.

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

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

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

Мы обновили поддержку .editorconfig. Во-первых, мы поддержали чтение свойств Roslyn: file_header_templates, dotnet_sort_system_directives_first и dotnet_separate_import_directive_groups. Во-вторых, настройка «Spaces around ‘=’» теперь экспортируется в .editorconfig. Для существующих файлов ее значение определяется автоматически, а для новых файлов вы можете прописать его вручную. По умолчанию используется значение «true».

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

Что если бы анализ использования памяти выполнялся прямо в ходе запуска и отладки кода? А вы, спокойно работая над проектом, периодически получали бы отчет о замыканиях, недопустимом количестве выделенной памяти или же, напротив, — о том, что все хорошо и вы молодцы.

Представляем динамический анализ программы (DPA)! Незаметный и легко настраиваемый, он прекрасно дополняет плагин Heap Allocations Viewer. Подробнее о DPA читайте в нашем блоге.

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

Бывало ли, что при структурной навигации вы выбирали фрагмент кода, удаляли его и… оставались с лишней запятой? Такие вещи могут порядком раздражать. Теперь ReSharper позволяет делать не только структурное выделение, но и структурное удаление. Мелочь — но думаем, она вам пригодится!

Инструменты командной строки

Итак, первое: с помощью инструмента командной строки CleanupCode вы теперь можете переформатировать набор файлов или папок, не указывая при этом файл решения. Это может здорово сэкономить ваше время. Если вы добавили всего несколько файлов, вам не придется ждать, пока ReSharper просканирует все решение. Команда выглядит так:

cleanupcode.exe [Путь к папке] [Путь к файлу] [Путь к другому файлу]

Обращаем ваше внимание, что в этом режиме инструмент выполняет только форматирование и ничего не чистит.

Второе: мы вернули плагины, но пока что только для Windows. InspectCode и CleanupCode теперь могут автоматически загружать и подключать плагины. Вам понадобится ID плагина: зайдите на JetBrains Marketplace, откройте страницу плагинов и перейдите в раздел Versions, а затем нажмите на любую из версий, и скопируйте ID плагина. После этого запустите нужную команду с ключом -x=[ID]:

cleanupcode.exe -x=[ID] [Путь к файлу решения]

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

Декомпилятор

Private Source Link теперь поддерживается во встроенном компиляторе. При переходе к внешним источникам, требующим подключения к частными серверами с исходным кодом, ReSharper попросит вас ввести данные вашей учетной записи. Если вы используете GitHub или BitBucket и уже указывали данные для авторизации в настройках Visual Studio, ReSharper применит их автоматически.

Также мы реализовали некоторые менее заметные, но не менее важные внутренние обновления: улучшили синхронизацию между Viewer и исходных кодом, поддержали новые возможности C# 9 в декомпиляторе.

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

  • Что касается поддержки Blazor, мы поддержали параметры generic и вывод типов для них на основе использований, а также минимизировали задержки при открытии решений.
  • Появилось новое быстрое исправление, позволяющее переходить от проверки последовательных шаблонов к более сложным проверкам сравнения шаблонов.
  • Мы добавили поддержку nullable-аннотаций для обобщенных типов, не ограниченных ссылочными типами и типами значений (в том числе поддержано ограничение default).
  • Небольшое обновление для TypeScript — поддержка nullish coalescing и optional chaining.
  • В рефакторинге Change Signature обновлен инструмент «Resolve with call tree».

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

Подробнее об этом релизе ReSharper читайте на нашем сайте.

ReSharper C++ 2020.3 и Unreal Engine — полный набор для разработчика игр

Для разработчиков на Unreal Engine ReSharper C++ 2020.3 предлагает интеграцию редактора с UnrealHeaderTool, усовершенствованную проектную модель, а также новые инспекции, основанные на анализе потока управления в файлах шейдеров (HLSL). Также мы реализовали правила сравнения C++20 и добавили новые инспекции, помогающие с внедрением новой библиотеки Ranges.

Кроме того:

  • Улучшенное автодополнение импорта и контекстное действие для инвертирования тернарных выражений.
  • Навигация к совпадающим препроцессорным директивам, действия Peek Implementation и Peek Base Symbols.
  • Новые инспекции для обновления кода и Clang-Tidy 11.
  • Обновление поддержки Catch2 и переключатели компилятора /external:*.

Подробнее читайте в нашем блоге. И наконец, напоминаем, что подписка на ReSharper теперь покрывает ReSharper C++ и наоборот!

dotPeek

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

  • Больше возможностей C#, в том числе статические локальные функции, атрибуты на локальных функциях и одноразовые (init-only) сеттеры.
  • Узел <Top-level Entry Point> в Assembly Explorer — для представления кода верхнего уровня.
  • В IL Viewer появилась новая контекстная подсветка владельцев пользовательских атрибутов и улучшенная подсветка точек выхода из функций.
  • Действие Locate in Metadata — для объявлений и использований в исходном коде или IL-коде, а также для элементов в Assembly Explorer.
  • Поддержка Private Source Link.

Подробнее об обновлениях в dotPeek читайте на нашем сайте.

dotTrace

  • dotTrace теперь позволяет профилировать приложения .NET 5.

dotCover

  • Появилась возможность выполнять анализ покрытия кода приложений, целевой платформой которых является .NET 5.
  • Теперь вы можете указать ReSharper, какие проекты необходимо собирать при запуске сессии непрерывного тестирования, что поможет ускорить их.
  • Окно Unit Tests Coverage в Visual Studio позволит отфильтровать результаты по целевому фреймворку.

dotMemory

  • dotMemory теперь позволяет профилировать приложения .NET 5.
  • Мы добавили инспекции для графика Timeline: High Garbage Collection pressure, Pinned objects in Gen0 и Fast Large Objects Heap growth rate.
  • Представление Heap Fragmentation теперь отображает кучу для закрепленных объектов (Pinned Objects Heap) — сегмент кучи, впервые введенный в .NET 5. При профилировании dotMemory показывает объем памяти, выделенный куче для закрепленных объектов, и обновляет его в режиме реального времени.

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

Ваша команда ReSharper
The Drive to Develop

Discover more