From ec8922978eb14fe62671628bb25215743712eac0 Mon Sep 17 00:00:00 2001 From: Lewis Russell Date: Sat, 1 Mar 2025 15:51:09 +0000 Subject: feat(treesitter): add more metadata to `language.inspect()` (#32657) Problem: No way to check the version of a treesitter parser. Solution: Add version metadata (ABI 15 parsers only) as well as parser state count and supertype information (ABI 15) in `vim.treesitter.language.inspect()`. Also graduate the `abi_version` field, as this is now the official upstream name. --------- Co-authored-by: Christian Clason --- runtime/lua/vim/treesitter/_meta/misc.lua | 7 ++++++- runtime/lua/vim/treesitter/health.lua | 2 +- runtime/lua/vim/treesitter/language.lua | 8 ++++++-- 3 files changed, 13 insertions(+), 4 deletions(-) (limited to 'runtime/lua/vim') diff --git a/runtime/lua/vim/treesitter/_meta/misc.lua b/runtime/lua/vim/treesitter/_meta/misc.lua index c532257f49..99267bb36e 100644 --- a/runtime/lua/vim/treesitter/_meta/misc.lua +++ b/runtime/lua/vim/treesitter/_meta/misc.lua @@ -22,10 +22,15 @@ error('Cannot require a meta file') ---@field patterns table --- ---@class TSLangInfo +---@field abi_version integer +---@field major_version? integer +---@field minor_version? integer +---@field patch_version? integer +---@field state_count integer ---@field fields string[] ---@field symbols table +---@field supertypes table ---@field _wasm boolean ----@field _abi_version integer --- @param lang string --- @return TSLangInfo diff --git a/runtime/lua/vim/treesitter/health.lua b/runtime/lua/vim/treesitter/health.lua index 53b64d1dec..0c9e210fc1 100644 --- a/runtime/lua/vim/treesitter/health.lua +++ b/runtime/lua/vim/treesitter/health.lua @@ -35,7 +35,7 @@ function M.check() else local lang = ts.language.inspect(parsername) health.ok( - string.format('Parser: %-20s ABI: %d, path: %s', parsername, lang._abi_version, parser) + string.format('Parser: %-20s ABI: %d, path: %s', parsername, lang.abi_version, parser) ) end end diff --git a/runtime/lua/vim/treesitter/language.lua b/runtime/lua/vim/treesitter/language.lua index 38d309a102..f70f99421c 100644 --- a/runtime/lua/vim/treesitter/language.lua +++ b/runtime/lua/vim/treesitter/language.lua @@ -168,13 +168,17 @@ end --- Inspects the provided language. --- ---- Inspecting provides some useful information on the language like node and field names, ABI ---- version, and whether the language came from a WASM module. +--- Inspecting provides some useful information on the language like ABI version, parser state count +--- (a measure of parser complexity), node and field names, and whether the language came from a +--- WASM module. --- --- Node names are returned in a table mapping each node name to a `boolean` indicating whether or --- not the node is named (i.e., not anonymous). Anonymous nodes are surrounded with double quotes --- (`"`). --- +--- For ABI 15 parsers, also show parser metadata (major, minor, patch version) and a table of +--- supertypes with their respective subtypes. +--- ---@param lang string Language ---@return TSLangInfo function M.inspect(lang) -- cgit