38.4 Доступ к информации об узле

Основная информация об узле

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

Функция: treesit-node-parser узел

Эта функция возвращает парсер, связанный с узлом.

Функция: treesit-node-buffer узел

Эта функция возвращает буфер, связанный с парсером узла.

Функция: treesit-node-language узел

Эта функция возвращает язык, связанный с парсером узла.

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

Функция: treesit-node-start узел

Возвращает начальную позицию узла.

Функция: treesit-node-end узел

Возвращает конечную позицию узла.

Функция: treesit-node-text узел &optional объект

Возвращает текст буфера, который представляет узел, в виде строки. (Если узел получен при разборе строки, это будет текст из этой строки.)

Вот некоторые предикаты для узлов tree-sitter:

Функция: treesit-node-p объект

Проверяет, является ли объект синтаксическим узлом tree-sitter.

Функция: treesit-node-eq узел1 узел2

Проверяет, ссылаются ли узел1 и узел2 на один и тот же узел в синтаксическом дереве tree-sitter. Эта функция использует ту же метрику эквивалентности, что и equal. Вы также можете сравнивать узлы с помощью equal (см. Предикаты равенства).

Информация о свойствах

В общем, узлы в конкретном синтаксическом дереве делятся на две категории: именованные узлы и анонимные узлы. Определяет, является ли узел именованным или анонимным, грамматика языка (см. именованный узел).

Помимо именованности или анонимности, узел может иметь и другие свойства. Узел может быть “отсутствующим”: такие узлы вставляются парсером для восстановления после определенных видов синтаксических ошибок, т.е. что-то, что должно быть там согласно грамматике, но отсутствует. Это может произойти во время редактирования исходного кода программы, когда исходный код еще не находится в окончательной форме.

Узел может быть “дополнительным”: такие узлы представляют такие вещи, как комментарии, которые могут появляться в любом месте текста.

Узел может быть “устаревшим”, если его парсер выполнил переразбор по крайней мере один раз после создания узла.

Узел “имеет ошибку”, если текст, который он охватывает, содержит синтаксическую ошибку. Может быть так, что сам узел имеет ошибку или один из его потомков имеет ошибку.

Узел считается актуальным, если его парсер не удален, а буфер, которому он принадлежит, является активным буфером (см. Уничтожение буферов).

Функция: treesit-node-check узел свойство

Эта функция возвращает не nil, если узел имеет указанное свойство. свойство может быть named, missing, extra, outdated, has-error или live.

Функция: treesit-node-type узел

Именованные узлы имеют “типы” (см. тип узла). Например, именованный узел может быть узлом string_literal, где string_literal — это его тип. Тип анонимного узла — это просто текст, который представляет узел; например, тип узла ‘,’ — это просто ‘,’.

Эта функция возвращает тип узла в виде строки.

Информация как потомок или родитель

Функция: treesit-node-index узел &optional именованные

Эта функция возвращает индекс узла как дочернего узла его родителя. Если именованные не равны nil, учитываются только именованные узлы (см. именованный узел).

Функция: treesit-node-field-name узел

Дочерний узел родительского узла может иметь имя поля (см. имя поля). Эта функция возвращает имя поля узла как дочернего элемента его родителя.

Функция: treesit-node-field-name-for-child узел n

Эта функция возвращает имя поля n-го потомка узла. Возвращает nil, если n-го потомка не существует или n-й потомок не имеет имени поля.

Обратите внимание, что n учитывает как именованных, так и анонимных потомков, и n может быть отрицательным, например, −1 представляет последнего потомка.

Функция: treesit-node-child-count узел &optional именованные

Эта функция возвращает количество потомков узла. Если именованные не равны nil, учитываются только именованные потомки (см. именованный узел).

Вспомогательные функции

Функция: treesit-node-enclosed-p меньший больший &optional строгий

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

Возвращает не nil, если начало большего <= начало меньшего и конец большего <= конец меньшего.

Если строгий равен t, сравнение выполняется с помощью <, а не <=.

Если строгий равен partial, считается, что больший охватывает меньший, когда по крайней мере одна сторона охватывает строго.