В ReSharper 2021.2 появились новые инспекции и быстрые исправления для анализа кода на C# и работы со cсылочными типами, допускающими значение null (NRT). Многие из возможностей, которые раньше работали только для файлов, созданных вручную, теперь также доступны для автоматически сгенерированных файлов. Также ReSharper 2021.2 обеспечивает поддержку однофайловых приложений в Assembly Explorer, улучшенный механизм обработки проблем, найденных при динамическом анализе программы (DPA), и продвинутые правила именования для объектов типа record, методов расширения и переменных catch.
Доступна бесплатная пробная версия на 30 дней
Используете временные переменные, чтобы поменять местами два значения? Предлагаем вам более элегантное решение. Модернизируйте ваш код при помощи нового быстрого исправления Swap via deconstruction.
Сократите количество операций выделения памяти и повысьте скорость работы вашего кода! Создавайте пустые массивы при помощи Array.Empty<T>
.
При выделении памяти для нового Type[0]
ReSharper предложит вам использовать тип Type.EmptyTypes
, что более эффективно с точки зрения памяти.
Если вам не требуются определенные EventArgs
, ReSharper сообщит вам о возможности замены new EventArgs()
на EventArgs.Empty
.
Другие улучшения:
generated_code
из .editorconfig
, чтобы помечать автоматически сгенерированные файлы и папки, таким образом исключая их из анализа. switch
. Разрешили использование 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, если это допустимо.
Другие улучшения, достойные внимания:
Подробнее о поддержке 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.
В предыдущем релизе мы поддержали шаблоны маршрута ASP.NET. Придерживаясь того же курса, в версии 2021.2 мы улучшили поддержку строк URI HttpClient
:
HttpClient
автодополнение предложит вам все URI, которые соответствуют действиям в контроллерах, аннотированных атрибутом [Route]
, [Http{Method}]
или [AcceptVerbs]
. Мы добавили несколько полезных возможностей навигации:
Вам может понадобиться указать продвинутые правила именования для объектов record, методов расширения и переменных catch. Начиная с этого релиза у вас есть возможность настраивать эти правила.
Предпочитаете использовать стиль отступов Pico? Настроить стиль Pico теперь можно на вкладке Brace Layout, перейдя на страницу ReSharper | Options | Code Editing | C# | Formatting Style | Braces Layout.
Мы изменили настройки форматирования, выставляемые по умолчанию, для нескольких сценариев — теперь они соответствуют стандартным настройкам Visual Studio.
Новый рефакторинг Inline Function позволяет быстро заменить вызов функции телом этой функции. ReSharper C++ сам выполнит все необходимые преобразования, разрешит конфликты имен и переформатирует полученный код.
Мы добавили в ReSharper C++ встроенные подсказки для неявных преобразований типов, угрожающих нечаянной потерей данных или проблемами с производительностью. Теперь ReSharper C++ укажет на неявные преобразования типов в вашем коде.
Теперь DPA хранит по два значения для каждой найденной проблемы — максимальное и текущее. Это предотвращает ложноотрицательные результаты: раньше найденные проблемы могли не пройти порог и исчезнуть из списка — не потому, что они были исправлены, а потому, что изменились условия запуска (программа исполнилась быстрее, необходимая функциональность не запустилась и т.д.).
The embedded decompiler can now decompile single-file apps. Поддерживаются форматы однофайловых приложений, используемые в SDK .NET Core 3.1, .NET 5 и будущем .NET 6. Сборки, идущие в комплекте с этими приложениями, теперь можно просматривать точно так же, как вы просматриваете сборки обычных приложений.
Мы продолжаем улучшать возможности анализа распределения памяти. В представлении Memory Allocation появились две дополнительные вкладки:
Теперь, если при разработке больших представлений Razor редактор начинает работать медленно, вы можете выключить автоматические подсказки и виды анализа, создающие большую нагрузку на процессор. Для этого перейдите в ReSharper | Options | Environment | Editor | Behavior | Razor | Allow CPU-intensive typing assist.
Мы внесли критическое изменение в инструмент InspectCode. Начиная с версии 2021.2 InspectCode автоматически восстанавливает пакеты NuGet и собирает решение перед тем, как приступить к анализу. Если такое поведение, напротив, нежелательно, используйте ключ --no-build
, чтобы выключить восстановление NuGet и сборку решения.
Доступна бесплатная пробная версия на 30 дней