Skip to content

Терминология

Привязка (binding)

Значение, которое присваивается или связывается в области видимости.

Тип привязки

Тип значения: импорт, объявление let/const/var, экспорт, объявление функции/класса, параметры функции/метода и т.д.

Область видимости (scope)

Блок, в котором могут существовать привязки. Блок — код в {}: классы, функции, методы, колбэки, if/else и т.д. Области образуют иерархию: у родителя могут быть дочерние области; при совпадении имён дочерняя привязка затеняет родительскую.

Флаги области

Метаданные текущей области (не наследуются по цепочке): функция, конструктор, верхний уровень модуля и т.п.

Символ

Обёртка над привязкой со ссылками на каждое использование переменной в исходном тексте. Символам присваиваются ID в порядке обхода; каждая ссылка знает символ по этому ID.

Флаги символа

Метаданные символа/привязки.

Ссылка (reference)

Использование символа (и тем самым привязки); ссылкам тоже назначают ID по порядку сканирования. У ссылки есть тип: чтение, запись или оба.

Span

Начальное и конечное смещение узла в исходном тексте.