From 11bea67a557397a52f881c935f3c85484bdfe121 Mon Sep 17 00:00:00 2001 From: Thomas Vigouroux Date: Thu, 1 Apr 2021 16:50:31 +0200 Subject: [PATCH 1/4] fix: allow accessing vim.treesitter.language without require --- runtime/lua/vim/treesitter.lua | 3 +++ 1 file changed, 3 insertions(+) diff --git a/runtime/lua/vim/treesitter.lua b/runtime/lua/vim/treesitter.lua index cac0ab864b..f223c7b8c8 100644 --- a/runtime/lua/vim/treesitter.lua +++ b/runtime/lua/vim/treesitter.lua @@ -17,6 +17,9 @@ setmetatable(M, { if k == "highlighter" then t[k] = require'vim.treesitter.highlighter' return t[k] + elseif k == "language" then + t[k] = require"vim.treesitter.language" + return t[k] end end }) From 86ced59a6a5f9da137f75b98b5fc03b777255f52 Mon Sep 17 00:00:00 2001 From: Matthieu Coudron Date: Tue, 23 Mar 2021 23:32:45 +0100 Subject: [PATCH 2/4] feat: treesitter checkhealth --- runtime/autoload/health/treesitter.vim | 5 ++++ runtime/lua/nvim/treesitter.lua | 32 ++++++++++++++++++++++++++ 2 files changed, 37 insertions(+) create mode 100644 runtime/autoload/health/treesitter.vim create mode 100644 runtime/lua/nvim/treesitter.lua diff --git a/runtime/autoload/health/treesitter.vim b/runtime/autoload/health/treesitter.vim new file mode 100644 index 0000000000..5d3f62d2f5 --- /dev/null +++ b/runtime/autoload/health/treesitter.vim @@ -0,0 +1,5 @@ +function! health#treesitter#check() abort + call health#report_start('Checking treesitter configuration') + lua require 'nvim/treesitter'.check_health() +endfunction + diff --git a/runtime/lua/nvim/treesitter.lua b/runtime/lua/nvim/treesitter.lua new file mode 100644 index 0000000000..b3369b2e82 --- /dev/null +++ b/runtime/lua/nvim/treesitter.lua @@ -0,0 +1,32 @@ +local M = {} +local ts = vim.treesitter + +function M.list_parsers() + return vim.api.nvim_get_runtime_file('parser/*', true) +end + +function M.check_health() + local report_info = vim.fn['health#report_info'] + local report_ok = vim.fn['health#report_ok'] + local report_error = vim.fn['health#report_error'] + local parsers = M.list_parsers() + + report_info(string.format("Runtime ABI version : %d", ts.language_version)) + + for _, parser in pairs(parsers) do + local parsername = vim.fn.fnamemodify(parser, ":t:r") + + local is_loadable, ret = pcall(ts.language.require_language, parsername) + + if not is_loadable then + report_error(string.format("Impossible to load parser for %s: %s", parsername, ret)) + elseif ret then + report_ok(string.format("Loaded parser for %s", parsername)) + else + report_error(string.format("Unable to load parser for %s", parsername)) + end + end +end + +return M + From e8bc3d717eefedc60e49e5f9c8db42a9a662f68a Mon Sep 17 00:00:00 2001 From: Thomas Vigouroux Date: Thu, 1 Apr 2021 17:07:46 +0200 Subject: [PATCH 3/4] feat(ts): include parser ABI version in checkhealth --- runtime/lua/nvim/treesitter.lua | 4 +++- src/nvim/lua/treesitter.c | 5 +++++ test/functional/treesitter/language_spec.lua | 2 +- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/runtime/lua/nvim/treesitter.lua b/runtime/lua/nvim/treesitter.lua index b3369b2e82..dd0b11a6c7 100644 --- a/runtime/lua/nvim/treesitter.lua +++ b/runtime/lua/nvim/treesitter.lua @@ -21,7 +21,9 @@ function M.check_health() if not is_loadable then report_error(string.format("Impossible to load parser for %s: %s", parsername, ret)) elseif ret then - report_ok(string.format("Loaded parser for %s", parsername)) + local lang = ts.language.inspect_language(parsername) + report_ok(string.format("Loaded parser for %s: ABI version %d", + parsername, lang._abi_version)) else report_error(string.format("Unable to load parser for %s", parsername)) end diff --git a/src/nvim/lua/treesitter.c b/src/nvim/lua/treesitter.c index 188b2c1ef7..4c65f5db4e 100644 --- a/src/nvim/lua/treesitter.c +++ b/src/nvim/lua/treesitter.c @@ -229,6 +229,11 @@ int tslua_inspect_lang(lua_State *L) } lua_setfield(L, -2, "fields"); // [retval] + + uint32_t lang_version = ts_language_version(lang); + lua_pushinteger(L, lang_version); // [retval, version] + lua_setfield(L, -2, "_abi_version"); + return 1; } diff --git a/test/functional/treesitter/language_spec.lua b/test/functional/treesitter/language_spec.lua index a5801271cb..afb17dd2cf 100644 --- a/test/functional/treesitter/language_spec.lua +++ b/test/functional/treesitter/language_spec.lua @@ -45,7 +45,7 @@ describe('treesitter API', function() return {keys, lang.fields, symbols} ]])) - eq({fields=true, symbols=true}, keys) + eq({fields=true, symbols=true, _abi_version=true}, keys) local fset = {} for _,f in pairs(fields) do From 952508d4056b7869720f4a446f2d49963eaf937d Mon Sep 17 00:00:00 2001 From: Thomas Vigouroux Date: Thu, 1 Apr 2021 17:10:39 +0200 Subject: [PATCH 4/4] fix(ts): move checkhealth in runtime/vim --- runtime/autoload/health/treesitter.vim | 2 +- runtime/lua/{nvim/treesitter.lua => vim/treesitter/health.lua} | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename runtime/lua/{nvim/treesitter.lua => vim/treesitter/health.lua} (100%) diff --git a/runtime/autoload/health/treesitter.vim b/runtime/autoload/health/treesitter.vim index 5d3f62d2f5..5f167310ce 100644 --- a/runtime/autoload/health/treesitter.vim +++ b/runtime/autoload/health/treesitter.vim @@ -1,5 +1,5 @@ function! health#treesitter#check() abort call health#report_start('Checking treesitter configuration') - lua require 'nvim/treesitter'.check_health() + lua require 'vim.treesitter.health'.check_health() endfunction diff --git a/runtime/lua/nvim/treesitter.lua b/runtime/lua/vim/treesitter/health.lua similarity index 100% rename from runtime/lua/nvim/treesitter.lua rename to runtime/lua/vim/treesitter/health.lua