Терминология
Привязка (binding)
Значение, которое присваивается или связывается в области видимости.
Тип привязки
Тип значения: импорт, объявление let/const/var, экспорт, объявление функции/класса, параметры функции/метода и т.д.
Область видимости (scope)
Блок, в котором могут существовать привязки. Блок — код в {}: классы, функции, методы, колбэки, if/else и т.д. Области образуют иерархию: у родителя могут быть дочерние области; при совпадении имён дочерняя привязка затеняет родительскую.
Флаги области
Метаданные текущей области (не наследуются по цепочке): функция, конструктор, верхний уровень модуля и т.п.
Символ
Обёртка над привязкой со ссылками на каждое использование переменной в исходном тексте. Символам присваиваются ID в порядке обхода; каждая ссылка знает символ по этому ID.
Флаги символа
Метаданные символа/привязки.
Ссылка (reference)
Использование символа (и тем самым привязки); ссылкам тоже назначают ID по порядку сканирования. У ссылки есть тип: чтение, запись или оба.
Span
Начальное и конечное смещение узла в исходном тексте.