Что нового в ReSharper 2021.1

В ReSharper 2021.1 мы обновили анализ кода, поддержали шаблоны маршрута ASP.NET, добавили возможность переименовывать компоненты кортежей и многое другое.

Скачать

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

Анализ кода

Больше шаблонов для объединения

Инспекция Merge into pattern теперь охватывает больше шаблонов. Объединяйте проверки на null с другими проверками в единый шаблон:

Переделывайте выражения conditional?.Access во вложенные сопоставления шаблонов:

Сокращайте вложенные операторы if, объединяя проверки:

И наконец, вы можете соединять шаблоны с деконструкцией:

Расширение поддержки C# 9.0

Мы расширили поддержку типов Record (из C# 9.0). Для объявлений типов record теперь работают рефакторинги Extract interface и Extract superclass, а также File Layout и различные возможности, связанные с XML-документацией.

Мы добавили ряд новых инспекций и действий. Использование Redundant explicit property declaration для свойств в объявлениях типов record поможет при переходе на код, использующий типы Record с позиционными параметрами и неявными объявлениями свойств. Есть и соответствующее быстрое исправление — Remove explicit property.

Если вам захочется превратить record в class, используйте действие To class, которое позаботится о позиционных параметрах и первичном конструкторе. Также есть действие To record, работающее противоположным образом.

Если вам нужно превратить позиционные параметры и первичный конструктор в обычные свойства, конструктор и явный метод Deconstruct(), вы можете использовать контекстное действие To explicit constructor.

Соблюсти порядок также поможет инспекция Redundant 'record' type declaration body (и соответствующее быстрое исправление). Она позволяет заменять пустое тело объявления record на точку с запятой.

Действие Find usages теперь умеет находить использования первичного конструктора Record и неявного метода Deconstruct().

Встраивание временной переменной

Представляем вам новую инспекцию Inline temporary variable. Иногда может оказаться, что вы используете одно и то же значение под разными именами. Хотелось бы сделать такой код более прозрачным — возможно ли это? Возможно! И ReSharper поможет вам в этом.

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

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

Логические конструкции not делают проверки типов более читаемыми. ReSharper предлагает замену синтаксиса !() на конструкцию not.

Вместо Slice и Substring ReSharper теперь предлагает использовать оператор диапазона, если это позволяет упростить код.

Мы отключили инспекцию Namespace does not correspond to file location для файлов с кодом верхнего уровня.

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

Мы сделали первые шаги в сторону поддержки C# 10.0 и научили ReSharper работать с интерполяцией константных строк.

Мы выпустим отдельный блогпост об анализе кода в версии 2021.1. Не пропустите!

Шаблоны маршрута ASP.​NET Core

Шаблоны маршрута часто используются в MVC-приложениях для соотнесения HTTP-запросов и URL-адресов. В версии 2021.1 мы ввели поддержку шаблонов маршрута: работая с ними, вы можете пользоваться структурной навигацией, инспекциями и быстрыми исправлениями. Рассмотрим несколько примеров.

Базовые инспекции проверяют шаблоны маршрута на предмет синтаксических ошибок, таких как размещение маршрута с параметрами catch-all посреди шаблона, объявление опционального параметра catch-all, назначение опциональному параметру значения по умолчанию и т. д.

Параметры маршрутов порождают интересные ситуации. Что если вы объявите параметр с одним и тем же именем в контроллере и в действии? ReSharper сообщит вам об этом.

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

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

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

ReSharper также работает с ограничениями, задаваемыми лично пользователем. Если такое ограничение не распознается (такое иногда бывает), добавьте к классу ограничения аннотацию [RouteParameterConstraint] (из JetBrains.Annotations).

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

Переименовывать параметры маршрута теперь можно не только вручную — вы можете пользоваться рефакторингом Rename.

Все эти возможности работают для маршрутизации на основе атрибутов. Мы очень ждем ваших отзывов!

Подробнее о шаблонах маршрута ASP.NET читайте в нашем блоге.

Переименование в кортежах

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

Навигация

Появилось новое действие — Navigate to Windows Explorer. Вы найдете его в меню Navigate | Navigate to либо нажав Ctrl+Shift+A и введя название действия. Оно может быть полезно, если вы работаете непосредственно с файлом (например, копируете путь внутри репозитория или сам файл) либо если вы предпочитаете просматривать VCS-историю файла при помощи расширений Git для Windows Explorer.

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

Мы по-прежнему работаем над перемещением части сервисов ReSharper в отдельный процесс и поддержкой режима «‎out of process»‎, но при этом продолжаем улучшать производительность там, где это возможно. Вот что ждет вас в этом обновлении.

  • Теперь вы можете быстрее печатать в файлах Razor, являющихся частью объемных решений.
  • Теперь вы можете быстрее печатать в объемных файлах, где работают анализаторы ReSharper.
  • Подсказки данных в отладчике стали быстрее и отзывчивее.
  • Мы оптимизировали работу ReSharper с документами общего доступа — теперь IDE потребляет при этом меньше памяти.
  • Мы улучшили производительность юнит-тестирования на JavaScript и TypeScript.

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

Мы добавили несколько новых настроек:

  • Теперь вы можете выбрать, вставлять ли пробел перед скобками target-typed оператора new() и внутри них.
  • Вы можете указать, чтобы IDE делала перенос строки перед оператором присваивания.
  • Для меток можно задать отрицательный отступ.

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

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

Также мы исправили множество ошибок — полный список исправлений можно посмотреть в нашем баг-трекере.

EditorConfig

EditorConfig становится популярным инструментом среди .NET-разработчиков, и мы продолжаем улучшать его интеграцию с ReSharper. Вот что мы изменили в этот раз:

  • Мы улучшили то, как ReSharper считывает настройки правил именования из EditorConfig, и то, как он записывает в EditorConfig правила именования, заданные пользователем.
  • Если EditorConfig переопределяет правила именования, ReSharper уведомит вас об этом на странице настроек именования.
  • Мы поддержали параметр EditorConfig csharp_indent_case_contents_when_block.

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

  • We’ve implemented support for VSTest adapters – a feature that allows you to discover and run tests from a third party framework. Теперь вы не ограничены набором фреймворков, которые мы поддерживаем. Включить эту возможность можно в разделе ReSharper | Options | Tools | Unit Testing | Test Frameworks | VSTest.
  • Мы поддержали MSTest для проектов Universal Windows Platform в Visual Studio 2019.
  • Некоторые из вас сталкивались с проблемой порождения процессов: когда тестовый ранер завершает работу, а порожденный им процесс продолжает работать. Мы добавили настройку, позволяющую указать, как IDE поступать в таком случае. Вы можете выбрать один из трех вариантов: IDE будет спрашивать вас, что делать с порожденным процессом, игнорировать проблему либо завершать процесс самостоятельно. Спросив вас, что делать с процессом, IDE сохранит ваше решение в ReSharper | Options | Tools | Unit Testing | Test Runner. Вы всегда можете удалить такую запись, если решение было неверным.
  • Мы реализовали ряд инспекций для NUnit-библиотеки AutoFixture. Теперь ReSharper проверяет, правильный ли тип у тестового значения, нет ли в атрибуте [InlineAutoData] лишних аргументов. Также IDE сообщит вам, если для тестового класса или метода отсутствует атрибут [TestFixture] или [Test].
  • Мы обновили поддержку QUnit до версии 2.14.0.

Поддержка языка C++

В ReSharper C++ 2021.1 мы поддержали несколько новых языковых возможностей C++20 и C++17: классы в параметрах non-type в шаблонах, правила выведения аргументов шаблонов классов и noexcept в составе типа функции. Также мы пополнили шаблоны базового и постфиксного автодополнения новыми элементами для корутин: co_await, co_yield и co_return.

Стиль синтаксиса C++

Благодаря новому набору настроек стиля, вы можете автоматически применять выбранный стиль синтаксических конструкций в своем проекте. При помощи соответствующих инспекций, быстрых исправлений и контекстных действий Apply Syntax Style и Cleanup selection вы сможете легко обновить кодовую базу и соблюдать единый стиль кода.

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

  • Появилось действие, позволяющее копировать ссылки на GitHub при использовании Copy FQN. Когда вы запускаете Copy Fully-qualified name из главного меню (ReSharper | Edit) или с помощью Ctrl+Shift+A, ReSharper выполняет копирование и открывает контекстное меню, где вы можете выбрать из целого набора форматов, если вам не подходит стандартный. Теперь это меню включает и ссылки на GitHub.
  • Если вы используете регулярные выражения в строках при разработке на C#, VB.NET или JavaScript (и даже при работе в Razor Pages), вам может пригодиться возможность расширять/сужать выделенную область — теперь она также работает для инъекций.
  • Мы добавили подсказки приведения типов для кортежей.
  • В меню File Layout для методов теперь доступно ограничение Body. Оно позволяет указывать различные правила для методов с телом-блоком и телом-выражением.

Новый начальный экран в dotTrace и dotMemory dotUltimate

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

Скачать

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