Понимание сообщений об ошибках и предупреждений от анализатора Dart

Вы когда-нибудь видели сообщение об ошибке и задавались вопросом, что оно означает и что с этим делать? Возможно, вам доступно больше информации, которая поможет вам ответить на эти вопросы, чем вы думаете.

Возьмем довольно распространенный пример. Проблема в следующем коде:

В IntelliJ IDEA сообщение отображается в представлении Dart Analysis:

В Visual Studio Code сообщение о проблеме появляется на панели «Проблемы»:

Кажется странным, что есть проблема, потому что мы только что проверили, что values не null в строке выше.

Сообщение говорит нам, что не так, но на самом деле оно не помогает нам понять, почему проверка была недостаточной или как реагировать на ошибку. Эта дополнительная информация действительно доступна; просто может быть не очевидно, как его найти. В оставшейся части этой статьи показано, как найти расположение этой дополнительной информации в выходных данных IntelliJ IDEA, Visual Studio Code и инструмента командной строки dart analyze.

IntelliJ ИДЕЯ

Если вы наведете курсор на выделенный текст, вы можете получить дополнительную информацию:

Наведение включает сообщение, которое мы видели выше (которое мы называем сообщением о проблеме), а также другую полезную информацию:

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

Контекстное сообщение включает URL-адрес дополнительной документации, связанной с продвижением типа, и сообщает вам строку и файл, в которых определено поле. К сожалению, вы не можете перейти к местоположению контекста при наведении курсора, но вы можете это сделать из представления Dart Analysis.

Хотя в представлении Dart Analysis отображается только сообщение о проблеме, двойной щелчок по сообщению позволяет перейти к тексту с красным волнистым подчеркиванием, где сообщается о проблеме. Для других полезных функций вызовите контекстное меню:

С помощью контекстного меню вы можете перейти либо к месту, где было сообщено о диагностике (используя Переход к источнику, который работает так же, как двойной щелчок по сообщению о проблеме), либо к объявлению values (используя пункт меню, помеченный контекстным сообщением). При выборе Открыть документацию открывается внешняя документация по диагностике.

Код Visual Studio

В Visual Studio Code есть два способа просмотреть дополнительную информацию. Первый — развернуть запись на панели «Проблемы»:

Первая строка — это сообщение, которое мы видели раньше (которое мы называем сообщением о проблеме). Двойной щелчок по первой или второй строке приведет вас к тексту с красным волнистым подчеркиванием, где находится проблема.

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

Третья строка представляет собой контекстное сообщение, объясняющее, почему сравнения с нулевым значением недостаточно, чтобы сделать тип не допускающим значение null. Дважды щелкнув контекстное сообщение, вы перейдете к объявлению values. Контекстное сообщение включает URL-адрес дополнительной документации, связанной с продвижением типа.

Вы также можете увидеть эту информацию, наведя курсор на выделенный текст, что приведет к открытию текста при наведении:

Текст при наведении содержит ту же информацию, что и панель «Проблемы». Он содержит ссылку для перехода к внешней документации и еще одну ссылку для перехода к объявлению values.

дартс анализ

Анализатор командной строки dart analyze может отображать ту же информацию, что и IDE, но для просмотра всей информации необходимо использовать флаг--verbose.

Краткое содержание

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

Если вы обнаружите диагностику, которую все еще трудно понять — потому что сообщение неясно, ему нужно контекстное сообщение, чтобы помочь вам найти другие связанные участки кода, или документация недостаточно полная — сообщите нам об этом, создав Проблема с dart-lang/sdk. Мы всегда заинтересованы в улучшении инструментов.