Merge branch 'main' into dev

This commit is contained in:
chuyanlong 2025-10-17 11:30:25 +08:00
commit 2003d7360c
4 changed files with 92 additions and 20 deletions

View file

@ -1,4 +1,4 @@
*LazyVim.txt* For Neovim Last change: 2025 October 14 *LazyVim.txt* For Neovim Last change: 2025 October 15
============================================================================== ==============================================================================
Table of Contents *LazyVim-table-of-contents* Table of Contents *LazyVim-table-of-contents*

View file

@ -4,6 +4,7 @@ local start = vim.health.start or vim.health.report_start
local ok = vim.health.ok or vim.health.report_ok local ok = vim.health.ok or vim.health.report_ok
local warn = vim.health.warn or vim.health.report_warn local warn = vim.health.warn or vim.health.report_warn
local error = vim.health.error or vim.health.report_error local error = vim.health.error or vim.health.report_error
local info = vim.health.info or vim.health.report_info
function M.check() function M.check()
start("LazyVim") start("LazyVim")
@ -33,6 +34,23 @@ function M.check()
warn(("`%s` is not installed"):format(name)) warn(("`%s` is not installed"):format(name))
end end
end end
start("LazyVim nvim-treesitter")
local tsok, health = LazyVim.treesitter.check()
local keys = vim.tbl_keys(health) ---@type string[]
table.sort(keys)
for _, k in pairs(keys) do
(health[k] and ok or error)(("`%s` is %s"):format(k, health[k] and "installed" or "not installed"))
end
if not tsok then
info(
"See the requirements at [nvim-treesitter](https://github.com/nvim-treesitter/nvim-treesitter/tree/main?tab=readme-ov-file#requirements)"
)
info("Run `:checkhealth nvim-treesitter` for more information.")
if vim.fn.has("win32") == 1 and not health["C compiler"] then
info("Install a C compiler with `winget install --id=BrechtSanders.WinLibs.POSIX.UCRT -e`")
end
end
end end
return M return M

View file

@ -13,7 +13,7 @@ return {
LazyVim.error("Please restart Neovim and run `:TSUpdate` to use the `nvim-treesitter` **main** branch.") LazyVim.error("Please restart Neovim and run `:TSUpdate` to use the `nvim-treesitter` **main** branch.")
return return
end end
LazyVim.treesitter.ensure_treesitter_cli(function() LazyVim.treesitter.build(function()
TS.update(nil, { summary = true }) TS.update(nil, { summary = true })
end) end)
end, end,
@ -90,7 +90,7 @@ return {
return not LazyVim.treesitter.have(lang) return not LazyVim.treesitter.have(lang)
end, opts.ensure_installed or {}) end, opts.ensure_installed or {})
if #install > 0 then if #install > 0 then
LazyVim.treesitter.ensure_treesitter_cli(function() LazyVim.treesitter.build(function()
TS.install(install, { summary = true }):await(function() TS.install(install, { summary = true }):await(function()
LazyVim.treesitter.get_installed(true) -- refresh the installed langs LazyVim.treesitter.get_installed(true) -- refresh the installed langs
end) end)

View file

@ -51,31 +51,85 @@ function M.indentexpr()
return M.have(nil, "indents") and require("nvim-treesitter").indentexpr() or -1 return M.have(nil, "indents") and require("nvim-treesitter").indentexpr() or -1
end end
---@param cb fun() ---@return string?
function M.ensure_treesitter_cli(cb) local function win_find_cl()
if vim.fn.executable("tree-sitter") == 1 then local path = "C:/Program Files (x86)/Microsoft Visual Studio"
return cb() local pattern = "*/*/VC/Tools/MSVC/*/bin/Hostx64/x64/cl.exe"
return vim.fn.globpath(path, pattern, true, true)[1]
end
---@return boolean ok, lazyvim.util.treesitter.Health health
function M.check()
local is_win = vim.fn.has("win32") == 1
---@param tool string
---@param win boolean?
local function have(tool, win)
return (win == nil or is_win == win) and vim.fn.executable(tool) == 1
end end
---@param msg? string local have_cc = vim.env.CC ~= nil or have("cc", false) or have("cl", true) or (is_win and win_find_cl() ~= nil)
local function fail(msg)
return LazyVim.error({ if not have_cc and is_win and vim.fn.executable("gcc") == 1 then
"**treesitter-nvim** `main` requires the `tree-sitter` CLI executable to be installed.", vim.env.CC = "gcc"
"Please install it manually from https://github.com/tree-sitter/tree-sitter/tree/master/crates/cli or", have_cc = true
"use your system package manager.", end
"Run `:checkhealth nvim-treesitter` for more information.",
msg, ---@class lazyvim.util.treesitter.Health: table<string,boolean>
}) local ret = {
["tree-sitter (CLI)"] = have("tree-sitter"),
["C compiler"] = have_cc,
tar = have("tar"),
curl = have("curl"),
node = have("node"),
}
local ok = true
for _, v in pairs(ret) do
ok = ok and v
end
return ok, ret
end
---@param cb fun()
function M.build(cb)
M.ensure_treesitter_cli(function(_, err)
local ok, health = M.check()
if ok then
return cb()
else
local lines = { "Unmet requirements for **nvim-treesitter** `main`:" }
local keys = vim.tbl_keys(health) ---@type string[]
table.sort(keys)
for _, k in pairs(keys) do
lines[#lines + 1] = ("- %s `%s`"):format(health[k] and "" or "", k)
end
vim.list_extend(lines, {
"",
"See the requirements at [nvim-treesitter](https://github.com/nvim-treesitter/nvim-treesitter/tree/main?tab=readme-ov-file#requirements)",
"Run `:checkhealth nvim-treesitter` for more information.",
})
if vim.fn.has("win32") == 1 and not health["C compiler"] then
lines[#lines + 1] = "Install a C compiler with `winget install --id=BrechtSanders.WinLibs.POSIX.UCRT -e`"
end
vim.list_extend(lines, err and { "", err } or {})
LazyVim.error(lines, { title = "LazyVim Treesitter" })
end
end)
end
---@param cb fun(ok:boolean, err?:string)
function M.ensure_treesitter_cli(cb)
if vim.fn.executable("tree-sitter") == 1 then
return cb(true)
end end
-- try installing with mason -- try installing with mason
if not pcall(require, "mason") then if not pcall(require, "mason") then
return fail("`mason.nvim` is disabled in your config, so we cannot install it automatically.") return cb(false, "`mason.nvim` is disabled in your config, so we cannot install it automatically.")
end end
-- check again since we might have installed it already -- check again since we might have installed it already
if vim.fn.executable("tree-sitter") == 1 then if vim.fn.executable("tree-sitter") == 1 then
return cb() return cb(true)
end end
local mr = require("mason-registry") local mr = require("mason-registry")
@ -88,9 +142,9 @@ function M.ensure_treesitter_cli(cb)
vim.schedule_wrap(function(success) vim.schedule_wrap(function(success)
if success then if success then
LazyVim.info("Installed `tree-sitter-cli` with `mason.nvim`.") LazyVim.info("Installed `tree-sitter-cli` with `mason.nvim`.")
cb() cb(true)
else else
fail("Failed to install `tree-sitter-cli` with `mason.nvim`.") cb(false, "Failed to install `tree-sitter-cli` with `mason.nvim`.")
end end
end) end)
) )