mirror of
				https://github.com/neovim/neovim.git
				synced 2025-11-04 01:34:25 +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
 | 
					      if k == "highlighter" then
 | 
				
			||||||
        t[k] = require'vim.treesitter.highlighter'
 | 
					        t[k] = require'vim.treesitter.highlighter'
 | 
				
			||||||
        return t[k]
 | 
					        return t[k]
 | 
				
			||||||
 | 
					      elseif k == "language" then
 | 
				
			||||||
 | 
					        t[k] = require"vim.treesitter.language"
 | 
				
			||||||
 | 
					        return t[k]
 | 
				
			||||||
      end
 | 
					      end
 | 
				
			||||||
   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]
 | 
					  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;
 | 
					  return 1;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -45,7 +45,7 @@ describe('treesitter API', function()
 | 
				
			|||||||
      return {keys, lang.fields, symbols}
 | 
					      return {keys, lang.fields, symbols}
 | 
				
			||||||
    ]]))
 | 
					    ]]))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    eq({fields=true, symbols=true}, keys)
 | 
					    eq({fields=true, symbols=true, _abi_version=true}, keys)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    local fset = {}
 | 
					    local fset = {}
 | 
				
			||||||
    for _,f in pairs(fields) do
 | 
					    for _,f in pairs(fields) do
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user