Treesitter

Nvim の :help ページは、生成されており、ソースから tree-sitter-vimdoc パーサーを用いて作成されています。


Treesitter の統合
Nvim は、バッファのインクリメンタルなパースのために tree-sitter ライブラリを統合しています: https://tree-sitter.github.io/tree-sitter/
警告: Treesitter のサポートはまだ実験的なものであり、頻繁に変更される可能性があります。このドキュメントも最新の変更を完全に反映していない場合があります。

パーサーファイル treesitter-parsers

パーサーは、treesitter の心臓部です。これらは、treesitter が parser ランタイムディレクトリで検索するライブラリです。
Nvim にはこれらのパーサーが含まれています。
C
Lua
Markdown
Vimscript
Vimdoc
Treesitter クエリファイル ft-query-plugin
手動で、または https://github.com/nvim-treesitter/nvim-treesitter のようなプラグインを使用して、より多くのパーサーをインストールできます。
パーサーは、'runtimepath' ディレクトリの parser/{lang}.* として検索されます。同じ言語の複数のパーサーが見つかった場合、最初のパーサーが使用されます。(注: これは通常、「ユーザー設定 > プラグイン > バンドル」の優先順位を意味します。)
ファイルパスからパーサーをロードするには
vim.treesitter.language.add('python', { path = "/path/to/python.so" })
ファイルシステムで大文字と小文字が区別される場合、パーサー名は小文字であると想定されます。
特定の ファイルタイプ を treesitter 言語 (パーサーの名前) に関連付けるには、vim.treesitter.language.register() を使用します。たとえば、ファイルタイプが svg または xslt のバッファに xml treesitter パーサーを使用するには、次のようにします。
vim.treesitter.language.register('xml', { 'svg', 'xslt' })
Nvim が ENABLE_WASMTIME でビルドされている場合、wasm パーサーもロードできます
vim.treesitter.language.add('python', { path = "/path/to/python.wasm" })

TREESITTER クエリ treesitter-query

Treesitter クエリは、ハイライト表示などの目的で、パースされた TSTree に関する情報を抽出する方法です。簡単に言うと、query は 1 つ以上のパターンで構成されます。pattern は構文木内のノードタイプに対して定義されます。match は、パターンに一致する構文木の特定の要素に対応します。パターンは、オプションでキャプチャと述語を定義できます。capture を使用すると、パターン内の特定のノードに名前を関連付けることができます。predicate は、一致に任意のメタデータと条件付きデータを追加します。
クエリは、https://tree-sitter.github.io/tree-sitter/using-parsers#query-syntax で説明されている lisp のような言語で記述されます。注: そこにリストされている述語は、Nvim がサポートするものとは異なります。Nvim がサポートする述語の完全なリストについては、treesitter-predicates を参照してください。
Nvim は、runtimepath 下の queries ディレクトリにある *.scm ファイルとしてクエリを検索します。各ファイルには、特定の言語および目的に対応するクエリが含まれています。たとえば、Lua ファイルのハイライト表示には queries/lua/highlights.scm が使用されます。デフォルトでは、runtimepath 上の最初のクエリが使用されます (通常は、ユーザー設定がプラグインよりも優先され、プラグインが Nvim にバンドルされているクエリよりも優先されることを意味します)。クエリが他のクエリを置き換えるのではなく拡張する必要がある場合は、treesitter-query-modeline-extends を使用します。
Lua から treesitter クエリを操作するための利用可能なメソッドのリストについては、lua-treesitter-query を参照してください。

TREESITTER クエリ述語 treesitter-predicates

述語は、条件付きでノードをキャプチャするために評価される特別なスキームノードです。たとえば、eq? 述語は次のように使用できます。
((identifier) @variable.builtin
  (#eq? @variable.builtin "self"))
"self" テキストに対応する識別子のみを一致させるため。このようなクエリを使用して、組み込みの関数や変数を異なる方法でハイライト表示できます。
以下の述語が組み込まれています
eq? treesitter-predicate-eq?
ノードに対応するテキストに対して文字列を照合します
((identifier) @variable.builtin (#eq? @variable.builtin "self"))
((node1) @left (node2) @right (#eq? @left @right))
any-eq? treesitter-predicate-any-eq?
eq? と同様ですが、数量化されたパターンでは 1 つのキャプチャされたノードのみが一致する必要があります。
match? treesitter-predicate-match?
vim-match? treesitter-predicate-vim-match?
regexp をノードに対応するテキストに対して照合します
((identifier) @constant (#match? @constant "^[A-Z_]+$"))
注: ^ および $ アンカーは、ノードのテキストの先頭と末尾に一致します。
any-match? treesitter-predicate-any-match?
any-vim-match? treesitter-predicate-any-vim-match?
match? と同様ですが、数量化されたパターンでは 1 つのキャプチャされたノードのみが一致する必要があります。
lua-match? treesitter-predicate-lua-match?
match? と同様に、lua-patterns をノードに対応するテキストに対して照合します
any-lua-match? treesitter-predicate-any-lua-match?
lua-match? と同様ですが、数量化されたパターンでは 1 つのキャプチャされたノードのみが一致する必要があります。
contains? treesitter-predicate-contains?
ノードに対応するテキストの一部に対して文字列を照合します
((identifier) @foo (#contains? @foo "foo"))
((identifier) @foo-bar (#contains? @foo-bar "foo" "bar"))
any-contains? treesitter-predicate-any-contains?
contains? と同様ですが、数量化されたパターンでは 1 つのキャプチャされたノードのみが一致する必要があります。
any-of? treesitter-predicate-any-of?
指定された文字列のいずれかをノードに対応するテキストに対して照合します
((identifier) @foo (#any-of? @foo "foo" "bar"))
これは、ノードが多くのキーワードのいずれかに一致するかどうかを確認するための推奨される方法です。これは、このために最適化されているためです。
has-ancestor? treesitter-predicate-has-ancestor?
指定されたノードタイプのいずれかを、ノードのすべての上位ノードに対して照合します
((identifier) @variable.builtin
  (#any-of? @variable.builtin "begin" "end")
  (#has-ancestor? @variable.builtin range_expression))
has-parent? treesitter-predicate-has-parent?
指定されたノードタイプのいずれかを、ノードの直接の親に対して照合します
(((field_expression
     (field_identifier) @method)) @_parent
 (#has-parent? @_parent template_method function_declarator))
lua-treesitter-not-predicate
各述語には、述語の否定である not- という接頭辞が付いた述語があります。
lua-treesitter-all-predicate
lua-treesitter-any-predicate
クエリは、数量化子を使用して複数のノードをキャプチャできます。キャプチャに複数のノードが含まれている場合、述語はキャプチャに含まれるすべてのノードが述語に一致する場合にのみ一致します。一部の述語 (eq?match?lua-match?contains?) は、キャプチャに含まれるノードのいずれかが述語に一致する場合に一致させるために、代わりに any- 接頭辞を受け入れます。
例として、次の Lua コードを考えてみましょう
-- TODO: This is a
-- very long
-- comment (just imagine it)
次の述語付きクエリを使用します
(((comment)+ @comment)
 (#match? @comment "TODO"))
このクエリは、@comment によってキャプチャされたすべてのノードが述語に一致するわけではないため、一致しません。代わりに、次を使用します
(((comment)+ @comment)
 (#any-match? @comment "TODO"))
さらに述語は vim.treesitter.query.add_predicate() を介して追加できます。使用可能なすべての述語を一覧表示するには、vim.treesitter.query.list_predicates() を使用します。

TREESITTER クエリディレクティブ treesitter-directives

Treesitter ディレクティブは、ノードまたは一致のメタデータを格納し、副作用を実行します。たとえば、set! ディレクティブは、一致またはノードにメタデータを設定します
((identifier) @foo (#set! type "parameter"))
以下のディレクティブが組み込まれています
set! treesitter-directive-set!
特定の一致またはキャプチャにキー/値メタデータを設定します。値は、metadata[key] (一致固有) または metadata[capture_id][key] (キャプチャ固有) としてアクセスできます。
パラメーター
{capture_id} (オプション) {key} {value}
((identifier) @foo (#set! @foo kind "parameter"))
((node1) @left (node2) @right (#set! type "pair"))
((codeblock) @markup.raw.block (#set! priority 90))
offset! treesitter-directive-offset!
キャプチャされたノードの範囲を取得し、オフセットを適用します。これにより、capture_id を持つキャプチャされたノードの metadata[capture_id].range として、{start_row}, {start_col}, {end_row}, {end_col}} のようなリストの形式で新しい範囲が設定されます。treesitter-language-injections に役立ちます。
パラメーター
{capture_id} {start_row} {start_col} {end_row} {end_col}
((identifier) @constant (#offset! @constant 0 1 0 -1))
gsub! treesitter-directive-gsub!
lua-pattern を使用してノードの内容を変換します。これにより、新しい metadata[capture_id].text が設定されます。
パラメーター
{capture_id} {pattern} {replacement}
(#gsub! @_node ".*%.(.*)" "%1")
trim! treesitter-directive-trim!
ノードの末尾から空白行をトリミングします。これにより、新しい metadata[capture_id].range が設定されます。
パラメーター
{capture_id}
(#trim! @fold)
さらにディレクティブは vim.treesitter.query.add_directive() を介して追加できます。使用可能なすべてのディレクティブを一覧表示するには、vim.treesitter.query.list_directives() を使用します。

TREESITTER クエリモデル行 treesitter-query-modeline

Nvim は、; で始まるクエリ内のコメントである「モデル行」のセットを使用して、クエリの動作をカスタマイズすることをサポートしています。現在サポートされているモデル行の代替案を以下に示します
inherits: {lang}... treesitter-query-modeline-inherits
このクエリが {lang} からのクエリを継承する必要があることを指定します。これは、括弧で囲まれていない限り、{lang} のクエリを再帰的に下降します: ({lang})注: これは、別の言語のクエリを含めるために使用することを目的としています。クエリを同じ言語のクエリを拡張するようにする場合は、extends を使用します。
extends treesitter-query-modeline-extends
このクエリが、他のクエリとマージされる、つまりクエリの拡張として使用されるべきであることを指定します。注意: 拡張の順序と、ベースとして使用されるクエリは、'runtimepath'の値に依存します。
注意: これらのモデルラインコメントはクエリの先頭にある必要がありますが、繰り返すことができます。たとえば、次の2つのモデルラインブロックはどちらも有効です。
;; inherits: typescript,jsx
;; extends
;; extends
;;
;; inherits: css

TREESITTER 構文強調表示 treesitter-highlight

構文強調表示は、highlights.scmという名前のクエリによって指定されます。これは、解析されたTSTreeTSNodeを、強調表示グループに割り当てることができるcaptureと一致させます。たとえば、次のクエリ
(parameters (identifier) @variable.parameter)
関数parametersノード内の任意のidentifierノードを、@variable.parameterという名前のキャプチャと一致させます。たとえば、Luaコードの場合
function f(foo, bar) end
これは( :InspectTree を参照)として解析されます
(function_declaration ; [1:1 - 24]
  name: (identifier) ; [1:10 - 10]
  parameters: (parameters ; [1:11 - 20]
    name: (identifier) ; [1:12 - 14]
    name: (identifier))) ; [1:17 - 19]
上記のクエリは、foobar@variable.parameterとして強調表示します。
リテラル式を一致させることも可能です(パーサーがそれらを返す場合)。
[
  "if"
  "else"
] @keyword.conditional
適切なパーサーとhighlights.scmクエリがruntimepathに見つかった場合、現在のバッファのtreesitter強調表示は、vim.treesitter.start()を使用して簡単に有効にできます。
treesitter-highlight-groups
@が接頭辞として付いたキャプチャ名は、そのまま強調表示グループとして使用できます。一般的に使用される多くのキャプチャでは、対応する強調表示グループはデフォルトでNvimの標準強調表示グループにリンクされています(例:@commentCommentにリンクされています)。ただし、カラースキームでオーバーライドできます。
フォールバックシステムが実装されているため、より具体的なグループはより一般的なグループにフォールバックします。たとえば、別々のドキュメントコメントがある言語(例:c、javaなど)では、@comment.documentationを使用できます。このグループが定義されていない場合、通常の@commentの強調表示が使用されます。これにより、既存のカラースキームはすぐに機能しますが、それらを利用できるようにするクエリに対して、より具体的なバリアントを追加することができます。
追加のルールとして、キャプチャの強調表示は、言語の名前をドットの後に追加することで、言語ごとに常に特化させることができます。たとえば、言語ごとにコメントを異なるように強調表示するには
hi @comment.c guifg=Blue
hi @comment.lua guifg=DarkBlue
hi link @comment.documentation.java String
以下は、Nvimのクエリで使用される標準キャプチャのリストです。現在のカラースキームに従って強調表示されています(正確な定義を表示するには、いずれかで:Inspectを使用してください)。
@variable さまざまな変数名 @variable.builtin 組み込み変数名(例:thisself) @variable.parameter 関数のパラメータ @variable.parameter.builtin 特殊なパラメータ(例:_it) @variable.member オブジェクトと構造体のフィールド
@constant 定数識別子 @constant.builtin 組み込み定数値 @constant.macro プリプロセッサによって定義された定数
@module モジュールまたは名前空間 @module.builtin 組み込みモジュールまたは名前空間 @label GOTOおよびその他のラベル(例:Cのlabel:)、heredocラベルを含む
@string 文字列リテラル @string.documentation コードをドキュメント化する文字列(例:Python docstrings) @string.regexp 正規表現 @string.escape エスケープシーケンス @string.special その他の特殊な文字列(例:日付) @string.special.symbol 記号またはアトム @string.special.path ファイル名 @string.special.url URI(例:ハイパーリンク)
@character 文字リテラル @character.special 特殊文字(例:ワイルドカード)
@boolean ブールリテラル @number 数値リテラル @number.float 浮動小数点数リテラル
@type 型またはクラスの定義とアノテーション @type.builtin 組み込み型 @type.definition 型定義の識別子(例:Cのtypedef <type> <identifier>
@attribute 属性アノテーション(例:Pythonデコレータ、Rustライフタイム) @attribute.builtin 組み込みアノテーション(例:Pythonの@property) @property キー/値ペアのキー
@function 関数定義 @function.builtin 組み込み関数 @function.call 関数呼び出し @function.macro プリプロセッサマクロ
@function.method メソッド定義 @function.method.call メソッド呼び出し
@constructor コンストラクタ呼び出しと定義 @operator 記号演算子(例:+*
@keyword 特定のカテゴリに当てはまらないキーワード @keyword.coroutine コルーチンに関連するキーワード(例:Goのgo、Pythonのasync/await) @keyword.function 関数を定義するキーワード(例:Goのfunc、Pythonのdef) @keyword.operator 英単語である演算子(例:andor) @keyword.import モジュールを含めたりエクスポートしたりするためのキーワード(例:Pythonのimportfrom) @keyword.type 名前空間と複合型を記述するキーワード(例:structenum) @keyword.modifier 他の構造体を変更するキーワード(例:conststaticpublic) @keyword.repeat ループに関連するキーワード(例:forwhile) @keyword.return returnyieldのようなキーワード @keyword.debug デバッグに関連するキーワード @keyword.exception 例外に関連するキーワード(例:throwcatch
@keyword.conditional 条件に関連するキーワード(例:ifelse) @keyword.conditional.ternary 三項演算子(例:?:
@keyword.directive さまざまなプリプロセッサディレクティブとシバン @keyword.directive.define プリプロセッサ定義ディレクティブ
@punctuation.delimiter デリミタ(例:;.,) @punctuation.bracket ブラケット(例:(){}[]) @punctuation.special 特殊記号(例:文字列補間での{}
@comment 行コメントとブロックコメント @comment.documentation コードをドキュメント化するコメント
@comment.error エラータイプのコメント(例:ERRORFIXMEDEPRECATED) @comment.warning 警告タイプのコメント(例:WARNINGFIXHACK) @comment.todo todoタイプのコメント(例:TODOWIP) @comment.note 注釈タイプのコメント(例:NOTEINFOXXX
@markup.strong 太字テキスト @markup.italic 斜体テキスト @markup.strikethrough 取り消し線テキスト @markup.underline 下線付きテキスト(リテラルの下線マークアップのみ!)
@markup.heading 見出し、タイトル(マーカーを含む) @markup.heading.1 トップレベルの見出し @markup.heading.2 セクション見出し @markup.heading.3 サブセクション見出し @markup.heading.4 など @markup.heading.5 さらに @markup.heading.6 6つのレベルは誰にとっても十分なはずです
@markup.quote ブロック引用 @markup.math 数学環境(例:LaTeXの$ ... $
@markup.link テキスト参照、脚注、引用など @markup.link.label リンク、参照の説明 @markup.link.url URLスタイルのリンク
@markup.raw リテラルまたは逐語的なテキスト(例:インラインコード) @markup.raw.block スタンドアロンブロックとしてのリテラルまたは逐語的なテキスト
@markup.list リストマーカー @markup.list.checked チェック済みのtodoスタイルのリストマーカー @markup.list.unchecked チェックされていないtodoスタイルのリストマーカー
@diff.plus 追加されたテキスト(diffファイルの場合) @diff.minus 削除されたテキスト(diffファイルの場合) @diff.delta 変更されたテキスト(diffファイルの場合)
@tag XMLスタイルのタグ名(例:XML、HTMLなど) @tag.builtin 組み込みタグ名(例:HTML5タグ) @tag.attribute XMLスタイルのタグ属性 @tag.delimiter XMLスタイルのタグデリミタ
treesitter-highlight-spell
特別な@spellキャプチャを使用して、ノードがNvimの組み込みスペルチェッカーによってスペルチェックされる必要があることを示すことができます。たとえば、次のキャプチャは、チェックされるコメントとしてマークします。
(comment) @spell
@nospellもあり、@spellでスペルチェック領域を無効にします。
treesitter-highlight-conceal
Treesitterの強調表示は、concealメタデータを介してconcealをサポートします。慣例により、隠蔽されるノードは@concealとしてキャプチャされますが、任意のキャプチャを使用できます。たとえば、次のクエリを使用して、Markdownでコードブロックデリミタを非表示にすることができます。
(fenced_code_block_delimiter @conceal (#set! conceal ""))
また、ノードを単一の文字に置き換えることもできます。これは(従来の構文とは異なり)カスタムの強調表示を付けることができます。たとえば、次の(推奨されない)クエリは、!=演算子をUnicodeグリフに置き換えます。これは、他の演算子と同じように強調表示されます。
"!=" @operator (#set! conceal "≠")
この方法で指定された隠蔽は、'conceallevel'を尊重します。
treesitter-highlight-priority
Treesitterは、デフォルトの優先度100で強調表示を設定するためにnvim_buf_set_extmark()を使用します。これにより、プラグインはtreesitterよりも低いまたは高い強調表示優先度を設定できます。また、個々のクエリパターンの優先度を、その"priority"メタデータ属性を設定して手動で変更することもできます。
((super_important_node) @superimportant (#set! priority 105))

TREESITTER 言語インジェクション treesitter-language-injections

次の情報は、https://tree-sitter.github.io/tree-sitter/syntax-highlighting#language-injectionから引用されたものであることに注意してください。
一部のソースファイルには、複数の異なる言語で記述されたコードが含まれています。例には次のものがあります。
HTMLファイル。これには、<script>タグ内のJavaScriptと<style>タグ内のCSSを含めることができます。
ERBファイル。これには、<% %>タグ内のRubyと、これらのタグの外側のHTMLが含まれています。
PHPファイル。これには、<phpタグの間にHTMLを含めることができます。
JavaScriptファイル。これには、正規表現リテラル内の正規表現構文が含まれます。
Ruby。これには、heredocリテラル内のコードスニペットを含めることができます。heredocデリミタは多くの場合、言語を示します。
Lua。これには、vim.cmd()呼び出し内にVimscriptスニペットを含めることができます。
Vimscript。これには、:lua-heredocブロック内にLuaスニペットを含めることができます。
これらの例はすべて、親構文ツリーと、親ツリーの特定のノード内にある1つ以上の注入された構文ツリーの観点からモデル化できます。言語インジェクションクエリを使用すると、次のキャプチャを使用してこれらの「インジェクション」を指定できます。
@injection.content - キャプチャされたノードの内容が別の言語を使用して再解析される必要があることを示します。
@injection.language - キャプチャされたノードのテキストに、@injection.contentを再解析するために使用する必要がある言語の名前が含まれている可能性があることを示します。
@injection.filename - キャプチャされたノードのテキストにファイル名が含まれている可能性があることを示します。対応するファイルタイプは、vim.filetype.match()を介してルックアップされ、@injection.contentを再解析するために使用する必要がある言語の名前として扱われます。
言語インジェクションの動作は、パターンに関連付けられたいくつかのプロパティによっても構成できます。
injection.language - 特定の言語の名前をハードコードするために使用できます。
injection.combined - ツリー内のすべてのマッチングノードの内容が1つのネストされたドキュメントとして解析される必要があることを示します。
injection.include-children - @injection.contentノードのテキスト全体を、子ノードのテキストを含めて再解析する必要があることを示します。デフォルトでは、子ノードのテキストは、注入されたドキュメントから除外されます。
injection.self - ノードのテキストがノードのLanguageTreeと同じ言語で解析される必要があることを示します。
injection.parent - キャプチャされたノードのテキストがノードの親LanguageTreeと同じ言語で解析される必要があることを示します。

VIM.TREESITTER lua-treesitter

このドキュメントの残りの部分は、Nvimのtreesitter統合のための主要なインターフェースである、vim.treesitter Luaモジュールのリファレンスマニュアルです。以下のコンテンツのほとんどは、関数ドキュメントから自動生成されています。
vim.treesitter.language_version
バンドルされたtreesitterライブラリでサポートされている最新のパーサーABIバージョン。
vim.treesitter.minimum_language_version
バンドルされたtreesitterライブラリでサポートされている最も古いパーサーABIバージョン。

TREESITTER TREES treesitter-tree TSTree

「treesitter tree」は、バッファの解析された内容を表し、さらなる分析に使用できます。これは、treesitterライブラリによって保持されているオブジェクトへのuserdata参照です。
treesitter treeのインスタンスTSTreeは、以下のメソッドをサポートします。
TSTree:copy() TSTree:copy()
TSTreeのコピーを返します。
戻り値
(TSTree)
TSTree:root() TSTree:root()
このツリーのルートノードを返します。
戻り値
(TSNode)

TREESITTER NODES treesitter-node TSNode

「treesitter node」は、バッファの解析された内容の特定の要素を表し、例えばハイライトのためにQueryによってキャプチャできます。これは、treesitterライブラリによって保持されているオブジェクトへのuserdata参照です。
treesitter nodeのインスタンスTSNodeは、以下のメソッドをサポートします。
TSNode:byte_length() TSNode:byte_length()
このノードが跨るバイト数を返します。
戻り値
(integer)
TSNode:child({index}) TSNode:child()
指定された{index}にあるノードの子を取得します。ゼロは最初の子を表します。
パラメーター
{index} (integer)
戻り値
(TSNode?)
TSNode:child_count() TSNode:child_count()
ノードの子の数を取得します。
戻り値
(integer)
TSNode:child_with_descendant()
TSNode:child_with_descendant({descendant}) {descendant}を含むノードの子を取得します({descendant}を含む)。
例えば、次のノード階層の場合
a -> b -> c
a:child_with_descendant(c) == b
a:child_with_descendant(b) == b
a:child_with_descendant(a) == nil
パラメーター
{descendant} (TSNode)
戻り値
(TSNode?)
TSNode:descendant_for_range()
TSNode:descendant_for_range({start_row}, {start_col}, {end_row}, {end_col}) このノード内で、指定された(行、列)位置の範囲にまたがる最小のノードを取得します。
パラメーター
{start_row} (integer)
{start_col} (integer)
{end_row} (integer)
{end_col} (integer)
戻り値
(TSNode?)
TSNode:end_() TSNode:end_()
ノードの終了位置を取得します。行、列、合計バイト数(すべてゼロベース)の3つの値を返します。
戻り値(複数)
(integer) (integer) (integer)
TSNode:equal({node}) TSNode:equal()
{node}が同じツリー内の同じノードを参照しているかどうかを確認します。
パラメーター
{node} (TSNode)
戻り値
(boolean)
TSNode:extra() TSNode:extra()
ノードがextraかどうかを確認します。extraノードはコメントのようなもので、文法上必須ではありませんが、どこにでも現れる可能性があります。
戻り値
(boolean)
TSNode:field({name}) TSNode:field()
{name}フィールドに対応するノードのテーブルを返します。
パラメーター
{name} (string)
戻り値
(TSNode[])
TSNode:has_changes() TSNode:has_changes()
構文ノードが編集されたかどうかを確認します。
戻り値
(boolean)
TSNode:has_error() TSNode:has_error()
ノードが構文エラーであるか、構文エラーを含んでいるかを確認します。
戻り値
(boolean)
TSNode:id() TSNode:id()
ノードの独自のツリー内での一意の識別子を取得します。
この識別子の内部表現については、値の等価性を持つプリミティブなLua型であること(テーブルではない)を除き、保証はありません。現在、それは(印刷不可能な)文字列です。
注: idは、異なるツリーからのノードに対して一意であることは保証されません。
戻り値
(string)
TSNode:iter_children() TSNode:iter_children()
名前付きかどうかに関係なく、{TSNode}のすべての子を反復処理します。子ノードと、この子ノードに対応する最終的なフィールド名を返します。
戻り値
(fun(): TSNode, string)
TSNode:missing() TSNode:missing()
ノードがmissingかどうかを確認します。missingノードは、特定の種類の構文エラーから回復するためにパーサーによって挿入されます。
戻り値
(boolean)
TSNode:named() TSNode:named()
ノードが名前付きかどうかを確認します。名前付きノードは文法内の名前付きルールに対応し、匿名ノードは文法内の文字列リテラルに対応します。
戻り値
(boolean)
TSNode:named_child({index}) TSNode:named_child()
指定された{index}にあるノードの名前付きの子を取得します。ゼロは最初の子を表します。
パラメーター
{index} (integer)
戻り値
(TSNode?)
TSNode:named_child_count() TSNode:named_child_count()
ノードの名前付きの子の数を取得します。
戻り値
(integer)
TSNode:named_descendant_for_range()
TSNode:named_descendant_for_range({start_row}, {start_col}, {end_row}, {end_col}) このノード内で、指定された(行、列)位置の範囲にまたがる最小の名前付きノードを取得します。
パラメーター
{start_row} (integer)
{start_col} (integer)
{end_row} (integer)
{end_col} (integer)
戻り値
(TSNode?)
TSNode:next_named_sibling() TSNode:next_named_sibling()
ノードの次の名前付き兄弟を取得します。
戻り値
(TSNode?)
TSNode:next_sibling() TSNode:next_sibling()
ノードの次の兄弟を取得します。
戻り値
(TSNode?)
TSNode:parent() TSNode:parent()
ノードの直近の親を取得します。ノードの祖先を反復処理するには、TSNode:child_with_descendant()を優先します。
戻り値
(TSNode?)
TSNode:prev_named_sibling() TSNode:prev_named_sibling()
ノードの前の名前付き兄弟を取得します。
戻り値
(TSNode?)
TSNode:prev_sibling() TSNode:prev_sibling()
ノードの前の兄弟を取得します。
戻り値
(TSNode?)
TSNode:range({include_bytes}) TSNode:range()
ノードの範囲を取得します。
4つまたは6つの値を返します。
開始行
開始列
開始バイト({include_bytes}trueの場合)
終了行
終了列
終了バイト({include_bytes}trueの場合)
パラメーター
{include_bytes} (boolean?)
TSNode:sexpr() TSNode:sexpr()
ノードを表すS式を文字列として取得します。
戻り値
(string)
TSNode:start() TSNode:start()
ノードの開始位置を取得します。行、列、合計バイト数(すべてゼロベース)の3つの値を返します。
戻り値(複数)
(integer) (integer) (integer)
TSNode:symbol() TSNode:symbol()
ノードの型を数値IDとして取得します。
戻り値
(integer)
TSNode:tree() TSNode:tree()
ノードのTSTreeを取得します。
戻り値
(TSTree)
TSNode:type() TSNode:type()
ノードの型を文字列として取得します。
戻り値
(string)

Luaモジュール:vim.treesitter lua-treesitter-core

foldexpr({lnum}) vim.treesitter.foldexpr()
現在のバッファ内の{lnum}の折りたたみレベルを返します。'foldexpr'に直接設定できます。
vim.wo.foldexpr = 'v:lua.vim.treesitter.foldexpr()'
属性
Since: 0.9.0
パラメーター
{lnum} (integer?) 折りたたみレベルを計算する行番号
戻り値
(string)
vim.treesitter.get_captures_at_cursor()
get_captures_at_cursor({winnr}) カーソル下のハイライトキャプチャ名のリストを返します。
パラメーター
{winnr} (integer?) ウィンドウハンドルまたは現在のウィンドウの場合は0(デフォルト)
戻り値
(string[]) キャプチャ名のリスト
vim.treesitter.get_captures_at_pos()
get_captures_at_pos({bufnr}, {row}, {col}) 指定された位置のハイライトキャプチャのリストを返します。
各キャプチャは、キャプチャ名を文字列として含むテーブルと、メタデータ(priorityconcealなど。定義されていない場合は空)のテーブルで表されます。
パラメーター
{bufnr} (integer) バッファ番号(現在のバッファの場合は0)
{row} (integer) 位置行
{col} (integer) 位置列
戻り値
({capture: string, lang: string, metadata: vim.treesitter.query.TSMetadata}[])
get_node({opts}) vim.treesitter.get_node()
指定された位置にある最小の名前付きノードを返します。
注:解析されていないツリーでこれを呼び出すと、無効なノードが生成される可能性があります。ツリーがアクティブなハイライターなどによって解析されることがわかっていない場合は、まずツリーを解析します。
vim.treesitter.get_parser(bufnr):parse(range)
パラメーター
{opts} (table?) オプションのキーワード引数
{bufnr} (integer?) バッファ番号(現在のバッファの場合はnilまたは0)
{pos} ([integer, integer]?) 0ベースの(行、列)タプル。デフォルトは現在のウィンドウのカーソル位置。{bufnr}が現在のバッファでない場合は必須
{lang} (string?) パーサー言語。(デフォルト:バッファのファイルタイプから)
{ignore_injections} (boolean?) 挿入された言語を無視する(デフォルトはtrue)
{include_anonymous} (boolean?) 匿名ノードを含める(デフォルトはfalse)
戻り値
(TSNode?) 指定された位置のノード
get_node_range({node_or_range}) vim.treesitter.get_node_range()
ノードの範囲またはアンパックされた範囲テーブルを返します
パラメーター
{node_or_range} (TSNode|table) ノードまたは位置のテーブル
戻り値(複数)
(integer) start_row (integer) start_col (integer) end_row (integer) end_col
vim.treesitter.get_node_text()
get_node_text({node}, {source}, {opts}) 指定されたノードに対応するテキストを取得します
パラメーター
{node} (TSNode)
{source} (integer|string) {node}が抽出されるバッファまたは文字列
{opts} (table?) オプションのパラメーター。
metadata (table) 特定のキャプチャのメタデータ。これは、vim.treesitter.query.add_directive()を使用する場合、metadata[capture_id]に設定されます。
戻り値
(string)
get_parser({bufnr}, {lang}, {opts}) vim.treesitter.get_parser()
特定のバッファのパーサーを返し、それをバッファにアタッチします
必要に応じて、パーサーが作成されます。
パーサーを作成できない場合は、エラーがスローされます。これを抑制し、代わりにnil(およびエラーメッセージ)を返すには、opts.error = falseを設定します。 警告:この動作はNvim 0.12でデフォルトになり、オプションは削除されます。
パラメーター
{bufnr} (integer?) パーサーが関連付けられるバッファ(デフォルト:現在のバッファ)
{lang} (string?) このパーサーの言語(デフォルト:バッファのファイルタイプから)
{opts} (table?) 作成された言語ツリーに渡すオプション
戻り値(複数)
(vim.treesitter.LanguageTree?) 解析に使用するオブジェクト (string?) エラーメッセージ(該当する場合)
get_range({node}, {source}, {metadata}) vim.treesitter.get_range()
TSNode の範囲を取得します。ディレクティブを適用した範囲を取得するために、{source} および {metadata} を指定することもできます。
パラメーター
{node} (TSNode)
{source} (integer|string?) {node} が抽出されたバッファまたは文字列
{metadata} (vim.treesitter.query.TSMetadata?)
戻り値
(table) 次のフィールドを持つテーブル
{[1]} (integer) 開始行
{[2]} (integer) 開始列
{[3]} (integer) 開始バイト数
{[4]} (integer) 終了行
{[5]} (integer) 終了列
{[6]} (integer) 終了バイト数
vim.treesitter.get_string_parser()
get_string_parser({str}, {lang}, {opts}) 文字列パーサーを返します
パラメーター
{str} (string) パースするテキスト
{lang} (string) この文字列の言語
{opts} (table?) 作成された言語ツリーに渡すオプション
戻り値
(vim.treesitter.LanguageTree) パースに使用するオブジェクト
inspect_tree({opts}) vim.treesitter.inspect_tree()
言語ツリーのノードをテキストで表現したものを表示するウィンドウを開きます。
ウィンドウ内で "a" を押すと匿名ノードの表示を切り替え、"I" を押すと各ノードのソース言語の表示を切り替え、"o" を押すとクエリエディタを切り替え、<Enter> を押すとソースバッファ内のカーソル下のノードにジャンプします。折りたたみも機能します (zo, zc などをお試しください)。
:InspectTree でも表示できます。 :InspectTree
属性
Since: 0.9.0
パラメーター
{opts} (table?) 次のキーを持つオプションのテーブル
lang (string|nil): ソースバッファの言語。省略した場合、ソースバッファのファイルタイプから検出されます。
bufnr (integer|nil): ツリーを描画するバッファ。省略した場合、新しいバッファが作成されます。
winid (integer|nil): ツリーバッファを表示するウィンドウ ID。省略した場合、{command} で新しいウィンドウが作成されます。
command (string|nil): ウィンドウを作成する Vimscript コマンド。デフォルト値は "60vnew"。{winid} が nil の場合にのみ使用されます。
title (string|fun(bufnr:integer):string|nil): ウィンドウのタイトル。関数である場合、ソースバッファのバッファ番号を唯一の引数として受け取り、文字列を返す必要があります。
is_ancestor({dest}, {source}) vim.treesitter.is_ancestor()
あるノードが別のノードの祖先であるかどうかを判断します
パラメーター
{dest} (TSNode) 祖先の可能性のあるノード
{source} (TSNode) 子孫の可能性のあるノード
戻り値
(boolean) {dest}{source} の祖先である場合は True
vim.treesitter.is_in_node_range()
is_in_node_range({node}, {line}, {col}) (line, col) の位置がノード範囲内にあるかどうかを判定します
パラメーター
{node} (TSNode) 範囲を定義するノード
{line} (integer) 行 (0 ベース)
{col} (integer) 列 (0 ベース)
戻り値
(boolean) 位置がノード範囲内にある場合は True
node_contains({node}, {range}) vim.treesitter.node_contains()
ノードが範囲を含んでいるかどうかを判定します
パラメーター
{node} (TSNode)
{range} (table)
戻り値
(boolean) {node}{range} を含んでいる場合は True
start({bufnr}, {lang}) vim.treesitter.start()
バッファの treesitter ハイライトを開始します
ftplugin または FileType 自動コマンドで使用できます。
注: デフォルトでは、正規表現構文のハイライトを無効にします。これは一部のプラグインで必要になる場合があります。この場合は、start の呼び出し後に vim.bo.syntax = 'on' を追加してください。
vim.api.nvim_create_autocmd( 'FileType', { pattern = 'tex',
    callback = function(args)
        vim.treesitter.start(args.buf, 'latex')
        vim.bo[args.buf].syntax = 'on'  -- only if additional legacy syntax is needed
    end
})
パラメーター
{bufnr} (integer?) ハイライトするバッファ (デフォルト: 現在のバッファ)
{lang} (string?) パーサーの言語 (デフォルト: バッファのファイルタイプから)
stop({bufnr}) vim.treesitter.stop()
バッファの treesitter ハイライトを停止します
パラメーター
{bufnr} (integer?) ハイライトを停止するバッファ (デフォルト: 現在のバッファ)

Lua モジュール: vim.treesitter.language lua-treesitter-language

add({lang}, {opts}) vim.treesitter.language.add()
名前 {lang} でパーサーをロードします
パーサーは、parser ランタイムディレクトリ、または指定された {path} で検索されます。これは、treesitter 機能を有効にする前に、利用可能なパーサーを確認するために使用できます。例:
if vim.treesitter.language.add('markdown') then
  vim.treesitter.start(bufnr, 'markdown')
end
パラメーター
{lang} (string) パーサーの名前 (英数字と _ のみ)
{opts} (table?) オプション
{path} (string) パーサーが存在するオプションのパス
{symbol_name} (string) ロードする言語の内部シンボル名
戻り値(複数)
(boolean?) パーサーがロードされた場合は True (string?) パーサーをロードできない場合はエラー
get_filetypes({lang}) vim.treesitter.language.get_filetypes()
名前が {lang} のパーサーが使用されるファイルタイプを返します。
リストには、{lang} 自体と、vim.treesitter.language.register() を介して登録されたすべてのファイルタイプが含まれます。
パラメーター
{lang} (string) パーサーの名前
戻り値
(string[]) ファイルタイプ
get_lang({filetype}) vim.treesitter.language.get_lang()
{filetype} のパーサーをロードするときに使用する言語名を返します。
vim.treesitter.language.register() を介して明示的に登録された言語がない場合は、デフォルトで {filetype} になります。html.glimmer のような複合ファイルタイプの場合、メインのファイルタイプのみが返されます。
パラメーター
{filetype} (string)
戻り値
(string?)
inspect({lang}) vim.treesitter.language.inspect()
指定された言語を検査します。
検査では、ノード名とフィールド名、ABI バージョン、言語が WASM モジュールから来たかどうかなど、言語に関する役立つ情報を提供します。
ノード名は、各ノード名を、ノードが名前付きであるかどうか (つまり、匿名ではない) を示す boolean にマッピングするテーブルで返されます。匿名ノードは二重引用符 (") で囲まれています。
パラメーター
{lang} (string) 言語
戻り値
(table)
register({lang}, {filetype}) vim.treesitter.language.register()
{filetype} (s) に使用する名前が {lang} のパーサーを登録します。
注: これは {filetype} のマッピングを追加または上書きします。他のファイルタイプから {lang} への既存のマッピングは保持されます。
パラメーター
{lang} (string) パーサーの名前
{filetype} (string|string[]) lang に関連付けるファイルタイプ

Lua モジュール: vim.treesitter.query lua-treesitter-query

vim.treesitter.query.add_directive()
add_directive({name}, {handler}, {opts}) クエリで使用する新しいディレクティブを追加します
ハンドラーは、メタデータオブジェクト metadata.key = value に直接設定することで、一致レベルのデータを設定できます。さらに、ハンドラーはメタデータテーブルのキャプチャ ID を使用してノードレベルのデータを設定できます metadata[capture_id].key = value
パラメーター
{name} (string) ディレクティブの名前 (先頭の # なし)
{handler} (fun(match: table<integer,TSNode[]>, pattern: integer, source: integer|string, predicate: any[], metadata: vim.treesitter.query.TSMetadata))
match: キャプチャ ID をキャプチャされたノードのリストにマッピングするテーブル
pattern: クエリファイル内の一致するパターンのインデックス
predicate: 呼び出される完全なディレクティブを含む文字列のリスト。たとえば、(node (#set! conceal "-")) は、predicate { "#set!", "conceal", "-" } を取得します。
{opts} (table) 次のフィールドを持つテーブル
{force} (boolean) 同じ名前の既存の述語を上書きします
{all} (boolean) キャプチャ ID が単一ノードではなくノードのリストにマップされる一致テーブルの正しい実装を使用します。デフォルトは true です。このオプションは今後のリリースで削除されます。
vim.treesitter.query.add_predicate()
add_predicate({name}, {handler}, {opts}) クエリで使用する新しい述語を追加します
パラメーター
{name} (string) 述語の名前 (先頭の # なし)
{handler} (fun(match: table<integer,TSNode[]>, pattern: integer, source: integer|string, predicate: any[], metadata: vim.treesitter.query.TSMetadata): boolean?)
引数の意味については、vim.treesitter.query.add_directive() を参照してください
{opts} (table?) 次のフィールドを持つテーブル
{force} (boolean) 同じ名前の既存の述語を上書きします
{all} (boolean) キャプチャ ID が単一ノードではなくノードのリストにマップされる一致テーブルの正しい実装を使用します。デフォルトは true です。このオプションは今後のリリースで削除されます。
edit({lang}) vim.treesitter.query.edit()
開始したバッファをクエリするためのライブエディタを開きます。
:EditQuery でも表示できます。
カーソルをキャプチャ名 ("@foo") に移動すると、キャプチャに一致するテキストがソースバッファで強調表示されます。クエリエディタはスクラッチバッファです。保存するには :write を使用してください。クエリの例は $VIMRUNTIME/queries/ にあります。
パラメーター
{lang} (string?) クエリエディタを開く言語。省略した場合、現在のバッファのファイルタイプから推測されます。
get({lang}, {query_name}) vim.treesitter.query.get()
{lang} のランタイムクエリ {query_name} を返します。
パラメーター
{lang} (string) クエリに使用する言語
{query_name} (string) クエリの名前 (例: "highlights")
戻り値
(vim.treesitter.Query?) パースされたクエリ。クエリファイルが見つからない場合は nil
vim.treesitter.query.get_files()
get_files({lang}, {query_name}, {is_included}) クエリを構成するために使用されるファイルのリストを取得します
パラメーター
{lang} (string) クエリを取得する言語
{query_name} (string) ロードするクエリの名前 (例: "highlights")
{is_included} (boolean?) 内部パラメーター。ほとんどの場合、nil のままにします
戻り値
(string[]) query_files 指定されたクエリと言語でロードするファイルのリスト
lint({buf}, {opts}) vim.treesitter.query.lint()
インストールされているパーサーを使用して treesitter クエリをリントするか、リントエラーをクリアします。
{buf} のクエリファイルのエラーを確認するには、runtimepath の treesitter-parsers を使用します
使用されているノードが文法内の有効な識別子であることを確認します。
述語とディレクティブが有効であることを確認します。
トップレベルの s 式が有効であることを確認します。
見つかった診断は、diagnostic-api を使用して報告されます。デフォルトでは、検証に使用されるパーサーは、クエリファイルの格納フォルダーによって決定されます。たとえば、パスが /lua/highlights.scm で終わる場合、lua 言語のパーサーが使用されます。
パラメーター
{buf} (integer) バッファハンドル
{opts} (table?) オプションのキーワード引数
{langs} (string|string[]) クエリのチェックに使用する言語。複数の言語が指定された場合、クエリはすべての言語で検証されます
{clear} (boolean) 現在のリントエラーをクリアするだけ
list_directives() vim.treesitter.query.list_directives()
現在クエリで使用できるディレクティブを一覧表示します。
戻り値
(string[]) サポートされているディレクティブ。
list_predicates() vim.treesitter.query.list_predicates()
クエリで使用できる現在利用可能な述語を一覧表示します。
戻り値
(string[]) サポートされている述語。
omnifunc({findstart}, {base}) vim.treesitter.query.omnifunc()
treesitterクエリでノード名と述語を補完するためのOmnifunc。
使用法:
vim.bo.omnifunc = 'v:lua.vim.treesitter.query.omnifunc'
パラメーター
{findstart} (0|1)
{base} (string)
parse({lang}, {query}) vim.treesitter.query.parse()
{query}を文字列として解析します。(クエリがファイルにある場合、呼び出し元は呼び出す前にコンテンツを文字列に読み込む必要があります)。
Query ( lua-treesitter-query を参照) オブジェクトを返します。このオブジェクトは、iter_captures メソッドと iter_matches メソッドを使用して、{query} で定義されたパターンについて構文ツリー内のノードを検索するために使用できます。
{query}に関する追加のコンテキストとともに、infocaptures を公開します。
captures には、{query} で定義された一意のキャプチャ名のリストが含まれています。
info.capturescaptures を指します。
info.patterns には、述語に関する情報が含まれています。
パラメーター
{lang} (string) クエリに使用する言語
{query} (string) s-expr構文のクエリ
戻り値
(vim.treesitter.Query) 解析済みのクエリ
Query:iter_captures()
Query:iter_captures({node}, {source}, {start}, {stop}) {node} 内のすべてのマッチからすべてのキャプチャを反復処理します。
クエリに述語が含まれている場合は{source}が必要になります。その場合、呼び出し元は、バッファーの現在のテキスト (関連する場合) と一致する新しく解析されたツリーを使用するようにする必要があります。{start}{stop}を使用して、行範囲内のマッチを制限できます(これは通常、ルートノードを{node}として使用します。つまり、現在のビューポートで構文ハイライトのマッチを取得します)。省略した場合、{start}{stop}の行の値は、指定されたノードから使用されます。
イテレータは、キャプチャを識別する数値ID、キャプチャされたノード、マッチを処理するディレクティブからのメタデータ、およびマッチ自体という4つの値を返します。次の例は、名前でキャプチャを取得する方法を示しています。
for id, node, metadata, match in query:iter_captures(tree:root(), bufnr, first, last) do
  local name = query.captures[id] -- name of the capture in the query
  -- typically useful info about the node:
  local type = node:type() -- type of the captured node
  local row1, col1, row2, col2 = node:range() -- range of the capture
  -- ... use the info here ...
end
キャプチャは、特定のキャプチャのクエリパターンに述語が含まれている場合にのみ返されます。
パラメーター
{node} (TSNode) 検索が行われるノード
{source} (integer|string) テキストを抽出するソースバッファーまたは文字列
{start} (integer?) 検索の開始行。デフォルトはnode:start()です。
{stop} (integer?) 検索の停止行(終端は含まない)。デフォルトはnode:end_()です。
戻り値
(fun(end_line: integer?): integer, TSNode, vim.treesitter.query.TSMetadata, TSQueryMatch) キャプチャID、キャプチャノード、メタデータ、マッチ
Query:iter_matches()
Query:iter_matches({node}, {source}, {start}, {stop}, {opts}) 指定された範囲で自身のマッチを反復処理します。
{node} 内のすべてのマッチを反復処理します。引数は Query:iter_captures() と同じですが、反復処理される値は異なります。クエリ内のパターンの(1から始まる)インデックス、キャプチャインデックスをノードのリストにマッピングするテーブル、およびマッチを処理するディレクティブからのメタデータです。
for pattern, match, metadata in cquery:iter_matches(tree:root(), bufnr, 0, -1) do
  for id, nodes in pairs(match) do
    local name = query.captures[id]
    for _, node in ipairs(nodes) do
      -- `node` was captured by the `name` capture in the match
      local node_data = metadata[id] -- Node level metadata
      ... use the info here ...
    end
  end
end
パラメーター
{node} (TSNode) 検索が行われるノード
{source} (integer|string) 検索するソースバッファーまたは文字列
{start} (integer?) 検索の開始行。デフォルトはnode:start()です。
{stop} (integer?) 検索の停止行(終端は含まない)。デフォルトはnode:end_()です。
{opts} (table?) オプションのキーワード引数
max_start_depth (integer) ゼロでない場合は、各マッチの最大開始深度を設定します。これは、ツリーの深すぎるトラバースを防ぐために使用されます。
match_limit (integer) 進行中のマッチの最大数を設定します(デフォルト:256)。all (boolean) false(デフォルトはtrue)の場合、返されるテーブルは、マッチングノードの完全なリストではなく、キャプチャIDを単一の(最後の)ノードにマップします。このオプションは下位互換性のためのみであり、将来のリリースで削除されます。
戻り値
(fun(): integer, table<integer, TSNode[]>, vim.treesitter.query.TSMetadata) パターンID、マッチ、メタデータ
set({lang}, {query_name}, {text}) vim.treesitter.query.set()
{lang}{query_name} という名前のランタイムクエリを設定します。
これにより、ユーザーはプラグインによって設定されたランタイムファイルや構成を上書きできます。
パラメーター
{lang} (string) クエリに使用する言語
{query_name} (string) クエリの名前(例: "highlights")
{text} (string) クエリテキスト(解析されていない)。

Luaモジュール:vim.treesitter.languagetree lua-treesitter-languagetree

LanguageTreeにはパーサーのツリーが含まれています。{lang}のルートtreesitterパーサーと、再帰的に他の言語を挿入できる「挿入された」言語パーサーです。たとえば、一部のVimscriptコマンドを含むLuaバッファーは、そのコンテンツを完全に理解するために複数のパーサーを必要とします。
特定のバッファーと言語のLanguageTree(パーサーオブジェクト)を作成するには、次を使用します。
local parser = vim.treesitter.get_parser(bufnr, lang)
(ここで、bufnr=0は現在のバッファーを意味します)。langのデフォルトは、'filetype'です。注: 現在、パーサーはバッファーの有効期間中保持されますが、これは変更される可能性があります。プラグインは、インクリメンタルアップデートが必要な場合は、パーサーオブジェクトへの参照を保持する必要があります。
現在の構文ツリーにアクセスする必要がある場合は、バッファーを解析します。
local tree = parser:parse({ start_row, end_row })
これは、バッファーの現在の状態を表す不変のtreesitter-treeオブジェクトのテーブルを返します。プラグインが(可能性のある)編集後に状態にアクセスする場合は、再度parse()を呼び出す必要があります。バッファーが編集されていない場合は、余分な作業なしで同じツリーが再度返されます。バッファーが以前に解析された場合は、変更された部分のインクリメンタル解析が行われます。
注:nvim_buf_attach()Luaコールバック内でパーサーを直接使用するには、コールバックを登録する前にvim.treesitter.get_parser()を呼び出す必要があります。ただし、変更コールバックは非常に頻繁に発生するため、パーサーを直接変更コールバックで解析しないでください。むしろ、ツリーに対するあらゆる種類の分析を行うプラグインは、頻繁すぎる更新を抑制するためにタイマーを使用する必要があります。
LanguageTree:children() LanguageTree:children()
言語から子ツリーへのマップを返します。
LanguageTree:contains({range}) LanguageTree:contains()
{range}LanguageTreeに含まれているかどうかを判断します。
パラメーター
{range} (table) 次のフィールドを持つテーブル
{[1]} (integer) 開始行
{[2]} (integer) 開始列
{[3]} (integer) 終了行
{[4]} (integer) 終了列
戻り値
(boolean)
LanguageTree:destroy() LanguageTree:destroy()
このLanguageTreeとそのすべての子を破棄します。
ここでクリーンアップロジックを実行する必要があります。
注: これにより、このツリーが親から削除されることはありません。代わりに、親でremove_childを呼び出して削除する必要があります。
LanguageTree:for_each_tree({fn}) LanguageTree:for_each_tree()
再帰的に各LanguageTreeに対してコールバックを呼び出します。
注: これには、呼び出し元のツリーの子ツリーも含まれます。
パラメーター
{fn} (fun(tree: TSTree, ltree: vim.treesitter.LanguageTree))
LanguageTree:included_regions() LanguageTree:included_regions()
このLanguageTreeによって管理される包含領域のセットを取得します。これは、部分的なLanguageTree:parse()が要求された範囲外の領域をドロップするため、インジェクションクエリによって設定された領域とは異なる場合があります。各リストは、{ {start_row}{start_col}{start_bytes}{end_row}{end_col}{end_bytes} } の形式の範囲を表します。
戻り値
(table<integer, Range6[]>)
LanguageTree:invalidate({reload}) LanguageTree:invalidate()
このパーサーとその子を無効にします。
LanguageTreeの追跡状態がtreesitterのパースツリーに対して有効でない場合にのみ呼び出す必要があります。ファイルシステムのキャッシュをクリアしません。頻繁に呼び出されるため、高速である必要があります。
パラメーター
{reload} (boolean?)
LanguageTree:is_valid({exclude_children}) LanguageTree:is_valid()
このLanguageTreeが有効かどうかを返します。つまり、LanguageTree:trees()はソースの最新の状態を反映します。無効な場合は、ユーザーはLanguageTree:parse()を呼び出す必要があります。
パラメーター
{exclude_children} (boolean?) 子の有効性を無視するかどうか (デフォルトはfalse)
戻り値
(boolean)
LanguageTree:lang() LanguageTree:lang()
このツリーノードの言語を取得します。
LanguageTree:language_for_range()
LanguageTree:language_for_range({range}) {range} を含む適切な言語を取得します。
パラメーター
{range} (table) 次のフィールドを持つテーブル
{[1]} (integer) 開始行
{[2]} (integer) 開始列
{[3]} (integer) 終了行
{[4]} (integer) 終了列
戻り値
(vim.treesitter.LanguageTree) {range} を管理するツリー
LanguageTree:named_node_for_range()
LanguageTree:named_node_for_range({range}, {opts}) {range} を含む最小の名前付きノードを取得します。
パラメーター
{range} (table) 次のフィールドを持つテーブル
{[1]} (integer) 開始行
{[2]} (integer) 開始列
{[3]} (integer) 終了行
{[4]} (integer) 終了列
{opts} (table?) 次のフィールドを持つテーブル
{ignore_injections} (boolean, デフォルト: true) 挿入された言語を無視します
戻り値
(TSNode?)
LanguageTree:node_for_range()
LanguageTree:node_for_range({range}, {opts}) {range} を含む最小のノードを取得します。
パラメーター
{range} (table) 次のフィールドを持つテーブル
{[1]} (integer) 開始行
{[2]} (integer) 開始列
{[3]} (integer) 終了行
{[4]} (integer) 終了列
{opts} (table?) 次のフィールドを持つテーブル
{ignore_injections} (boolean, デフォルト: true) 挿入された言語を無視します
戻り値
(TSNode?)
LanguageTree:parse({range}) LanguageTree:parse()
treesitter-parsersを使用して、対応する言語の言語ツリー内のすべての領域を再帰的に解析し、解析されたツリーでインジェクションクエリを実行して、子ツリーを作成して解析する必要があるかどうかを判断します。
空の範囲を持つ領域 ({}、通常はルートツリーのみ) は常に解析されます。それ以外の場合 (通常はインジェクション)、{range}と交差する場合 (または、{range}trueの場合) のみです。
パラメーター
{range} (boolean|Range?) パーサーのソースでこの範囲を解析します。ソースの完全な解析を実行するには、trueに設定します(注: 遅くなる可能性があります!)。空の範囲を持つ領域 (通常はインジェクションなしのルートツリーのみ) のみを解析するには、false|nilに設定します。
戻り値
(table<integer, TSTree>)
LanguageTree:register_cbs()
LanguageTree:register_cbs({cbs}, {recursive}) LanguageTreeのコールバックを登録します。
パラメーター
{cbs} (table<TSCallbackNameOn,function>) 次のハンドラーを含むnvim_buf_attach()のようなテーブル引数
on_bytes : nvim_buf_attach()を参照してください。ただし、これはパーサーのコールバックの後に呼び出されます。
on_changedtree : ツリーに構文的な変更があるたびに呼び出されるコールバック。変更された範囲 (ノード範囲として) のテーブルと変更されたツリーという2つの引数が渡されます。
on_child_added : 子がツリーに追加されるときに発生します。
on_child_removed : 子がツリーから削除されるときに発生します。
on_detach : バッファーがデタッチされたときに発生します。nvim_buf_detach_eventを参照してください。引数としてバッファーの番号を1つ取ります。
{recursive} (boolean?) すべての子に対して再帰的にコールバックを適用します。新しい子もコールバックを継承します。
LanguageTree:source() LanguageTree:source()
言語ツリーのソースコンテンツ(バッファ番号または文字列)を返します。
LanguageTree:tree_for_range()
LanguageTree:tree_for_range({range}, {opts}) {range} を含むツリーを取得します。
パラメーター
{range} (table) 次のフィールドを持つテーブル
{[1]} (integer) 開始行
{[2]} (integer) 開始列
{[3]} (integer) 終了行
{[4]} (integer) 終了列
{opts} (table?) 次のフィールドを持つテーブル
{ignore_injections} (boolean, デフォルト: true) 挿入された言語を無視します
戻り値
(TSTree?)
LanguageTree:trees() LanguageTree:trees()
このパーサーによって解析されたリージョンのすべてのツリーを返します。子言語は含まれません。結果はリスト形式になります。
このLanguageTreeがルートの場合、結果は空またはシングルトンリストになります。または
ルートLanguageTreeが完全に解析されている場合。
戻り値
(table<integer, TSTree>)
メイン
コマンド インデックス
クイック リファレンス