Внести вклад
Расширенная диагностика

Расширенная диагностика

Существует множество шаблонов кода, которые технически корректны для компилятора или среды выполнения, но могут иметь сложные нюансы или предостережения. Эти шаблоны могут не давать ожидаемого разработчиком эффекта, что часто приводит к ошибкам. Компилятор Angular включает "расширенную диагностику", которая выявляет многие из этих шаблонов, чтобы предупредить разработчиков о потенциальных проблемах и обеспечить соблюдение общих лучших практик в кодовой базе.

Диагностики

В настоящее время Angular поддерживает следующие расширенные диагностики:

Настройка

Расширенные диагностики по умолчанию являются предупреждениями и не блокируют компиляцию. Каждая диагностика может быть настроена как:

Категория ошибки Эффект
warning По умолчанию — компилятор выдает диагностику как предупреждение, но не блокирует компиляцию. Компилятор завершит работу со статусом 0, даже если есть предупреждения.
error Компилятор выдает диагностику как ошибку и прерывает компиляцию. Компилятор завершит работу с ненулевым кодом статуса, если выдана одна или несколько ошибок.
suppress Компилятор не выдает диагностику вообще.

Строгость проверки можно настроить как опцию компилятора Angular:

{
  "angularCompilerOptions": {
    "extendedDiagnostics": {
      "checks": {
        "invalidBananaInBox": "suppress"
      },
      "defaultCategory": "error"
    }
  }
}

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

Поле defaultCategory используется для любых диагностик, которые явно не перечислены в checks. Если оно не установлено, такие диагностики будут рассматриваться как warning.

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

Семантическое версионирование

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

Однако установка "defaultCategory": "error" превратит такие предупреждения в жесткие ошибки. Это может привести к тому, что обновление минорной версии вызовет ошибки компиляции, что может быть воспринято как нарушение semver (критическое изменение). Любые новые диагностики могут быть подавлены или понижены до предупреждений с помощью вышеуказанной настройки, поэтому влияние новой диагностики должно быть минимальным для проектов, которые по умолчанию рассматривают расширенную диагностику как ошибки. Использование ошибки по умолчанию — очень мощный инструмент; просто помните об этом нюансе semver при решении, подходит ли error в качестве значения по умолчанию для вашего проекта.

Новые диагностики

Команда Angular всегда открыта для предложений о новых диагностиках, которые могут быть добавлены. Расширенные диагностики, как правило, должны:

  • Обнаруживать распространенные, неочевидные ошибки разработчиков в шаблонах Angular.
  • Четко формулировать, почему этот шаблон может привести к багам или непреднамеренному поведению.
  • Предлагать одно или несколько понятных решений.
  • Иметь низкий, желательно нулевой, уровень ложных срабатываний.
  • Применяться к подавляющему большинству приложений Angular (не быть специфичными для неофициальной библиотеки).
  • Улучшать корректность или производительность программы (не стиль, эта ответственность ложится на линтер).

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