mirror of
				https://github.com/neovim/neovim.git
				synced 2025-10-26 12:27:24 +00:00 
			
		
		
		
	Merge pull request #14200 from teto/treesitter-checkhealth
feat: treesitter checkhealth
This commit is contained in:
		
							
								
								
									
										5
									
								
								runtime/autoload/health/treesitter.vim
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								runtime/autoload/health/treesitter.vim
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,5 @@ | ||||
| function! health#treesitter#check() abort | ||||
|   call health#report_start('Checking treesitter configuration') | ||||
|   lua require 'vim.treesitter.health'.check_health() | ||||
| endfunction | ||||
|  | ||||
| @@ -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 | ||||
|  }) | ||||
|   | ||||
							
								
								
									
										34
									
								
								runtime/lua/vim/treesitter/health.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								runtime/lua/vim/treesitter/health.lua
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,34 @@ | ||||
| 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 | ||||
|       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 | ||||
|   end | ||||
| end | ||||
|  | ||||
| return M | ||||
|  | ||||
| @@ -230,6 +230,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; | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Marco Hinz
					Marco Hinz