Анализ кода

ReSharper обеспечивает непрерывный анализ качества кода на C#, VB.NET, XAML, XML, ASP.NET, ASP.NET MVC, ASP.NET Core, HTML, ResX и Protobuf. Ошибки и проблемы обнаруживаются мгновенно, без предварительной компиляции.

Инспекции ReSharper на панели маркеров в Visual Studio

Непрерывный анализ качества кода

Более 2200 инспекций, которые ReSharper использует для поиска проблем в коде, позволят мгновенно увидеть все потенциально опасные места в текущем файле или даже во всем решении Visual Studio.

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

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

Анализ кода в ReSharper

Ошибки

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

Ошибки выделяются красным шрифтом или подчеркиваются волнистой линией. Если навести курсор на ошибку, ее описание отобразится во всплывающей подсказке.

ReSharper способен обнаруживать ошибки не только в коде на C# или VB.NET, но и в файлах с выделенным кодом и ссылках в файлах разметки ASP.NET, а также вызовах ASP.NET MVC.

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

В билд-скриптах (NAnt и MSBuild) ReSharper анализирует и подсвечивает неизвестные свойства, таргеты, задачи и атрибуты.

Инспекции кода также доступны для HTML и XML.

Предупреждения

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

Предложения

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

Например, может быть интересно, что тот или иной параметр объявлен с базовым типом, т. е. метод использует только члены базового типа параметра. ReSharper также может предложить автоматическую реализацию свойства из свойства с резервным полем, преобразование вызова статического метода в вызов метода расширения или использование ключевого слова «var» везде, где это возможно.

Подсказки

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

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

Быстрые исправления ошибок в ReSharper

Быстрые исправления

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

Альтернативный текст

Инспекции в масштабе решения

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

  • неиспользуемые незакрытые объявления;
  • неиспользуемые возвращаемые значения незакрытых методов;
  • незакрытые поля, к которым не осуществляется доступ;
  • неиспользуемые параметры в незакрытых членах;
  • абстрактные или виртуальные события, которые никогда не вызываются;
  • неназначенные поля;
  • члены и типы, которые можно сделать внутренними, а не общедоступными.

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

Отключение и настройка инспекций кода

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

Для отключения и конфигурации инспекций кода используйте меню Code Inspection | Inspection Severity в настройках ReSharper. Вы также можете настроить отдельное предупреждение, предложение или подсказку, используя меню Options for inspection в списке действий, открывающемся по нажатию Alt+Enter.

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

Вы можете переключаться между ошибками, предупреждениями и предложениями с помощью сочетаний клавиш Alt+PageDown (вперед) и Alt+PageUp (назад). Чтобы перемещаться только по ошибкам (пропуская предупреждения и предложения), нажимайте Shift+Alt+ PageDown (переход к следующей ошибке) и Shift+Alt+ PageUp (переход к предыдущей ошибке). При этом в строке состояния будет показано сообщение с описанием текущей ошибки, предупреждения или предложения.

Есть еще один способ навигации по проблемам кода: ReSharper найдет все проблемы в определенной области, и вы сможете просмотреть их в специальном окне.

Подсветка кода, соответствующего паттерну поиска, и замена его другим паттерном

Настраиваемые инспекции кода

В ReSharper есть функция Structural Search and Replace, которая позволяет найти код, соответствующий определенному паттерну, и при необходимости заменить его кодом, соответствующим другому паттерну. Более того, ReSharper может вести непрерывный мониторинг решения на предмет заданных паттернов поиска, подсвечивать код, соответствующий паттерну, и предлагать быстрые исправления для замены кода в соответствии с паттернами замены.

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

Обнаружение ошибок по всему решению

Мониторинг ошибок и предупреждений во всех поддерживаемых языках в рамках всего решения

ReSharper способен анализировать не только текущий файл, но и все решение целиком.

Представим, что вы изменили модификатор доступа члена с общедоступного на внутренний, предполагая, что он использовался только внутри текущей сборки. На этом этапе ReSharper не находит ошибок в текущем файле. Затем вы запускаете анализ по всему решению, и ReSharper обнаруживает, что что-то пошло не так. Вы переходите к следующей ошибке в решении и видите, что кто-то использовал этот член вне текущего проекта.

Все, что вам нужно — явно включить анализ по всему решению, а затем просмотреть список ошибок в специальном окне.

Даже не открывая это окно, можно легко перемещаться по ошибкам в решении с помощью команд Go to Next Error/Warning in Solution (Shift+Alt+PageDown) и Go to Previous Error/Warning in Solution (Shift+Alt+F12).

Предупреждения при анализе всего решения

Отслеживание предупреждений по всему решению

Как только последняя ошибка в решении исправлена, красный индикатор строки состояния становится зеленым. Однако анализ всего решения может сделать ваш код еще лучше. Кликните по значку Include Warnings в окне ошибок, и ReSharper начнет отслеживать предупреждения по всему решению (как предупреждения компилятора, так и обнаруженные с помощью инспекций ReSharper с уровнем серьезности Warning).

Если в решении вновь появятся ошибки, ReSharper автоматически скроет предупреждения, чтобы вы могли сосредоточиться на исправлении ошибок. Предупреждения начнут отображаться, когда все ошибки будут устранены.

Отслеживание вызовов

Раньше попытки отследить последовательности вызовов приводили к открытию нескольких окон Find Results и потере контекста. Чтобы этого не происходило, ReSharper визуализирует всю последовательность вызовов в одном окне. Функция называется Call Tracking и позволяет просматривать цепочки вызовов в вашем коде и перемещаться по ним.

Благодаря поддержке событий, интерфейсов и замыканий, Call Tracking значительно превосходит Call Hierarchy — функциональность, предусмотренную в Visual Studio.

Для визуализации последовательности вызовов выберите ReSharper | Inspect | Outgoing Calls или ReSharper | Inspect | Incoming Calls либо воспользуйтесь функцией Inspect This.

Команда Find Code Issues

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

Для поиска проблем по всему решению выберите в меню ReSharper | Inspect | Code Issues in Solution, а если нужно искать только в текущем проекте, перейдите к ReSharper | Inspect | Code Issues in Current Project. Еще один способ — кликнуть правой кнопкой по интересующему узлу в окне Solution Explorer и выбрать пункт Find Code Issues.

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

Отслеживание значений

Функция Value Tracking предоставляет важную информацию о потоке данных в вашей программе. Поместите курсор на любую переменную, параметр, поле или свойство в исходном коде и попросите ReSharper провести анализ. Затем можно проследить весь путь значения в программе от источника до потребителей.

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

Чтобы визуализировать поток данных, в котором участвует значение, выберите ReSharper | Inspect | Value Origin или ReSharper | Inspect | Value Destination в меню либо воспользуйтесь функцией Inspect This.

Аннотации кода

Иногда даже столь мощному механизму анализа кода, каким обладает ReSharper, не хватает знаний для выявления некоторых проблем. Например, если метод ни в коем случае не должен возвращать значение null и его клиенты устроены соответствующим образом, анализ кода никогда не найдет возможную проблему в случае, если кто-то изменил метод так, что он стал возвращать null.

В этом и многих других случаях фреймворк JetBrains.Annotations позволяет выявлять проблемы, которые иными способами обнаружить невозможно. Атрибуты, объявленные в этом фреймворке, позволяют адаптировать анализ кода ReSharper к конкретным требованиям.

Чтобы использовать атрибуты аннотации ReSharper в исходном коде, установите соответствующий пакет NuGet. Для этого просто добавьте директиву using JetBrains.Annotations;, и ReSharper поможет автоматически получить нужный пакет.

Inspect This

Inspect ThisCtrl+Shift+Alt+A — это единое сочетание клавиш для нескольких функций ReSharper, которые объединяют в себе анализ кода и навигацию, среди них: отслеживание вызовов, отслеживание значений, иерархия типов и диаграмма зависимостей типов.

Обратите внимание:

Все сочетания клавиш, приведенные на этой странице, соответствуют набору сочетаний «Visual Studio», использующемуся в ReSharper по умолчанию. Подробнее о двух наборах сочетаний клавиш, доступных в ReSharper, вы можете узнать в его документации.