Что нового в ReSharper 2021.2

В ReSharper 2021.2 появились новые инспекции и быстрые исправления для анализа кода на C# и работы со cсылочными типами, допускающими значение null (NRT). Многие из возможностей, которые раньше работали только для файлов, созданных вручную, теперь также доступны для автоматически сгенерированных файлов. Также ReSharper 2021.2 обеспечивает поддержку однофайловых приложений в Assembly Explorer, улучшенный механизм обработки проблем, найденных при динамическом анализе программы (DPA), и продвинутые правила именования для объектов типа record, методов расширения и переменных catch.

Скачать

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ReSharper сообщит вам об избыточных атрибутах 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? не разрешен)

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

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

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

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

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

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

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

Генераторы кода производят код во время компиляции, позволяя разработчикам сократить количество скучной однообразной работы. Многие из возможностей, которые раньше работали только для файлов, созданных вручную, теперь также доступны для автоматически сгенерированных файлов. Мы улучшили возможности редактора и отладчика, а также добавили поддержку анализа ошибок в решении (Solution-Wide Error Analysis или SWEA) и соответствующие рефакторинги.

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

Отслеживание ошибок в решении (Solution Wide Error Analysis или SWEA) теперь можно выполнять и для сгенерированных файлов. Если в таком файле обнаружится ошибка, вы сразу увидите ее и сможете перейти к соответствующему коду.

Вы можете регулировать настройки SWEA в ReSharper | Options | Code Inspection | Settings | Enable solution-wide analysis. По умолчанию сгенерированные файлы включены в анализ.

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

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

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

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

Теперь при отладке ReSharper показывает собственные Data Tips. Это обеспечит вас возможностью поиска, подсветкой свойств и пр.

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

Поддержка URI HttpClient

В предыдущем релизе мы поддержали шаблоны маршрута ASP.NET. Придерживаясь того же курса, в версии 2021.2 мы улучшили поддержку строк URI HttpClient:

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

Навигация

Мы добавили несколько полезных возможностей навигации:

  • ReSharper стал еще лучше понимать код при отладке. Теперь, выполнив Go To Declaration (Ctrl+Click) для интерфейсной ссылки, вы перейдете напрямую к реализациям.
  • Список Go To Base/Inheritors теперь включает скрытые переопределения.

Стиль и форматирование кода

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

Предпочитаете использовать стиль отступов Pico? Настроить стиль Pico теперь можно на вкладке Brace Layout, перейдя на страницу ReSharper | Options | Code Editing | C# | Formatting Style | Braces Layout.

Мы изменили настройки форматирования, выставляемые по умолчанию, для нескольких сценариев — теперь они соответствуют стандартным настройкам Visual Studio.

Рефакторинг Inline Function для C++

Новый рефакторинг Inline Function позволяет быстро заменить вызов функции телом этой функции. ReSharper C++ сам выполнит все необходимые преобразования, разрешит конфликты имен и переформатирует полученный код.

Подсказки при преобразовании типов C++

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

Что нового в ReSharper C++ 2021.2

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

Улучшенный механизм обработки найденных проблем

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

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

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

Менеджер сборок

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

Повышение производительности анализа покрытия dotUltimate

Повышение производительности анализа покрытия
  • Теперь dotCover позволяет запускать параллельный анализ покрытия тестовых классов на основе одной сборки. В некоторых случаях это может ускорить анализ покрытия.
  • Для проектов .NET Core и .NET теперь можно делать предварительную загрузку тест-раннеров для юнит-тестов — имея их в памяти, вы сможете быстрее запускать анализ покрытия.

Что нового в dotCover 2021.2

Анализ распределения памяти dotUltimate

Мы продолжаем улучшать возможности анализа распределения памяти. В представлении Memory Allocation появились две дополнительные вкладки:

  • Вкладка Methods перечисляет методы, для которых была выделена память.
  • На вкладке Call Tree вы сможете проанализировать дерево вызовов. Каждый узел дерева показывает не только вызванный метод, но и объекты, на которые была выделена память при вызове.

Что нового в dotMemory 2021.2

Нативное профилирование dotUltimate

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

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

Razor

Теперь, если при разработке больших представлений Razor редактор начинает работать медленно, вы можете выключить автоматические подсказки и виды анализа, создающие большую нагрузку на процессор. Для этого перейдите в ReSharper | Options | Environment | Editor | Behavior | Razor | Allow CPU-intensive typing assist.

ReSharper Command Line Tools

Мы внесли критическое изменение в инструмент InspectCode. Начиная с версии 2021.2 InspectCode автоматически восстанавливает пакеты NuGet и собирает решение перед тем, как приступить к анализу. Если такое поведение, напротив, нежелательно, используйте ключ --no-build, чтобы выключить восстановление NuGet и сборку решения.

Скачать

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