## Структура диагностических сообщений SWC
Сообщения об ошибках в SWC формируются как диагностические записи, включающие несколько уровней информации: текстовое описание проблемы, контекст исходного кода, позиционные данные и дополнительные заметки компилятора. Основная цель такой структуры — обеспечить быстрое сопоставление ошибки с конкретным участком AST или строкой исходного файла.
Типичное сообщение включает:
* **тип ошибки (error / warning / note)**
* **текст диагностики**
* **позицию в исходном коде (line, column)**
* **фрагмент кода (code frame)**
* **внутренние коды диагностики**
* **дополнительные пояснения (notes)**
SWC стремится сохранять совместимость с форматами ошибок Babel и TypeScript, но при этом использует собственную систему диагностик, основанную на Rust-подобной модели ошибок.
---
## Базовый формат диагностического вывода
В CLI-режиме сообщение об ошибке обычно представлено в текстовом виде:
```
error: Unexpected token
× source.js:10:15
│
10 │ const a = ;
│ ^
```
Ключевые элементы:
* `error:` — уровень серьезности
* описание проблемы
* путь к файлу и позиция
* визуальный указатель на место ошибки
Внутренне SWC хранит это как структуру:
```ts
{
severity: "Error",
message: "Unexpected token",
location: {
file: "source.js",
line: 10,
column: 15
}
}
```
---
## Code frame и локализация ошибки
Code frame — один из наиболее информативных элементов диагностики. Он показывает контекст строки с ошибкой и визуально выделяет проблемный участок.
Пример:
```
8 │ function test() {
9 │ return
10 │ const x = 10;
│ ^^^^^^ Unexpected token
11 │ }
```
Особенности формирования:
* отображаются несколько строк до и после ошибки
* используется моноширинное выравнивание
* указатель `^` или подчеркивание указывает точный диапазон
При синтаксических ошибках диапазон может охватывать целую конструкцию AST-узла, а не только один символ.
---
## Типы диагностических сообщений
### Синтаксические ошибки
Возникают на этапе парсинга JavaScript/TypeScript. SWC использует парсер, написанный на Rust, поэтому ошибки формируются до этапа трансформации AST.
Примеры:
* пропущенные скобки
* некорректные токены
* нарушения грамматики ECMAScript
```
error: Unexpected token `}`
× app.js:5:1
```
Часто такие ошибки сопровождаются минимальным контекстом, так как парсер не всегда может восстановить AST.
---
### Ошибки трансформации AST
Возникают во время работы плагинов или встроенных трансформаций (например, TypeScript → JavaScript, JSX → JS).
Пример:
```
error: Failed to transform JSX element
× component.tsx:12:8
```
Причины:
* некорректная структура AST
* несовместимость плагина и версии SWC
* нарушение ожидаемого типа узла
---
### Ошибки конфигурации `.swcrc`
SWC активно использует JSON-конфигурацию, и ошибки в ней являются отдельной категорией диагностик.
Пример:
```
error: Invalid configuration
× .swcrc
│ Unexpected field "jscx"
```
Характерные проблемы:
* опечатки в ключах конфигурации
* несовместимые опции
* неверные типы значений
SWC в таких случаях часто указывает путь до конкретного поля конфигурации, если возможно восстановить структуру JSON.
---
## Коды ошибок и диагностика
Внутренняя система SWC может использовать коды диагностики, которые помогают классифицировать ошибку.
Пример условного формата:
```
error[E1001]: Unexpected token
error[E2203]: Invalid JSX syntax
```
Структура:
* префикс `E` — ошибка
* числовой код — категория
* текстовое описание — человекочитаемая форма
Коды полезны для:
* автоматической обработки логов
* интеграции с CI/CD
* фильтрации ошибок по типам
---
## Многоуровневые сообщения (notes)
SWC поддерживает вложенные диагностические заметки, расширяющие контекст ошибки.
Пример:
```
error: Cannot find module
note: imported here
× index.js:2:1
```
Структура notes:
* дополнительная причина
* цепочка вызовов
* подсказки о происхождении ошибки
Такие сообщения формируют цепочку диагностики, полезную при сложных трансформациях.
---
## Ошибки при работе с TypeScript
При обработке TypeScript SWC может выявлять ошибки типов и синтаксиса.
Пример:
```
error: Type annotations are not allowed here
× file.ts:7:12
```
Особенности:
* SWC не выполняет полноценную type-checking систему как tsc
* ошибки ограничены синтаксическим уровнем
* типы рассматриваются как грамматические конструкции
---
## Ошибки JSX
JSX-диагностика включает проверку структуры элементов:
```
error: Expected corresponding JSX closing tag for
× component.jsx:14:5
```
Типичные случаи:
* незакрытые теги
* неверное вложение компонентов
* использование зарезервированных имен
---
## Разбор позиции ошибки
Позиционные данные включают:
* `line` — номер строки
* `column` — символ в строке
* `span` — диапазон байтов или символов
Пример внутренней структуры:
```ts
{
line: 15,
column: 8,
span: {
start: 120,
end: 128
}
}
```
`span` особенно важен при трансформациях AST, так как позволяет точно сопоставить ошибку с исходным диапазоном после изменений кода.
---
## Работа с source maps
При включённых source maps ошибки могут отображаться в исходном TypeScript/JSX, а не в сгенерированном JavaScript.
Поведение:
* ошибка трансформации → отображение в исходнике
* ошибка рантайм-совместимости → маппинг через sourcemap
* несоответствие маппинга → fallback на сгенерированный код
Пример:
```
error: Unexpected token
× src/app.tsx:22:9
```
Даже если ошибка возникла в скомпилированном файле, SWC пытается восстановить оригинальную позицию через mapping table.
---
## Сложные цепочки ошибок
При массовых ошибках SWC может агрегировать несколько диагностик:
```
error: Multiple errors occurred
error[E1001]: Unexpected token
error[E1002]: Invalid expression
error[E1003]: Missing semicolon
```
Особенности:
* ошибки группируются по фазам компиляции
* каждая диагностика независима
* порядок не всегда соответствует порядку в коде
---
## Практика интерпретации сообщений
Чтение ошибок SWC сводится к последовательному анализу:
1. определение фазы (parse / transform / config)
2. анализ позиции (file + line + column)
3. проверка code frame
4. интерпретация message + code
5. анализ notes (если присутствуют)
Особое значение имеет соотношение между AST-уровнем ошибки и текстовым представлением, поскольку SWC оперирует промежуточной структурой, а не только исходным кодом.
---
## Частые паттерны ошибок
### Незавершённые выражения
```
error: Unexpected end of input
```
Возникает при обрыве кода или незакрытых конструкциях.
---
### Несовместимость синтаксиса
```
error: Experimental syntax 'decorators' is not enabled
```
Связано с отсутствием соответствующих опций в `.swcrc`.
---
### Ошибки плагинов
```
error: Plugin transform failed
```
Обычно указывает на:
* некорректный AST вход
* исключение в пользовательском плагине
* несовместимость версий
---
## Диагностика через логирование
SWC позволяет выводить расширенные диагностические данные, полезные для анализа:
* JSON-формат ошибок
* структурированные AST-метаданные
* трассировка этапов компиляции
Пример JSON-ошибки:
```json
{
"severity": "Error",
"code": "E1001",
"message": "Unexpected token",
"location": {
"file": "index.js",
"line": 3,
"column": 10
}
}
```
Такая форма удобна для интеграции с внешними инструментами анализа.
---
## Особенности интерпретации в больших проектах
В монорепозиториях и сложных сборках диагностика SWC может включать:
* агрегацию ошибок из разных пакетов
* нормализацию путей файлов
* кэширование диагностики между запусками
При этом один и тот же тип ошибки может проявляться в разных слоях трансформации, что требует сопоставления span-диапазонов с исходными файлами через sourcemap цепочку.