refactor(ts): degrade gracefully on undeducible lang

This commit is contained in:
2026-05-03 10:42:58 +02:00
parent ca2490936c
commit 5382caf345
+21 -5
View File
@@ -133,11 +133,12 @@ local function build(repo, parser)
end end
---@param pack_name string ---@param pack_name string
---@return string ---@return string? lang
---@return string? err
local function lang_from_name(pack_name) local function lang_from_name(pack_name)
local lang = pack_name:match("^tree%-sitter%-(.+)$") local lang = pack_name:match("^tree%-sitter%-(.+)$")
if not lang then if not lang then
error("cannot derive lang from pack name: " .. pack_name) return nil, "cannot derive lang from pack name: " .. pack_name
end end
return lang return lang
end end
@@ -161,7 +162,7 @@ local function pick(child, parent)
end end
---@param entry string | ow.TS.RepoOpts ---@param entry string | ow.TS.RepoOpts
---@return ow.TS.Repo ---@return ow.TS.Repo?
local function normalize(entry) local function normalize(entry)
---@type ow.TS.RepoOpts ---@type ow.TS.RepoOpts
local opts local opts
@@ -187,8 +188,17 @@ local function normalize(entry)
end end
else else
---@cast opts ow.TS.SingleRepoOpts ---@cast opts ow.TS.SingleRepoOpts
local lang = opts.lang
if not lang then
local derived, err = lang_from_name(name)
if not derived then
log.error("Skipping %s: %s", name, err)
return nil
end
lang = derived
end
table.insert(parsers, { table.insert(parsers, {
lang = opts.lang or lang_from_name(name), lang = lang,
location = opts.location, location = opts.location,
generate = opts.generate, generate = opts.generate,
from_json = opts.from_json, from_json = opts.from_json,
@@ -206,7 +216,13 @@ end
---@param opts (string | ow.TS.RepoOpts)[] ---@param opts (string | ow.TS.RepoOpts)[]
function M.setup(opts) function M.setup(opts)
---@type ow.TS.Repo[] ---@type ow.TS.Repo[]
local repos = vim.tbl_map(normalize, opts) local repos = {}
for _, entry in ipairs(opts) do
local repo = normalize(entry)
if repo then
table.insert(repos, repo)
end
end
---@type vim.pack.Spec[] ---@type vim.pack.Spec[]
local pack_specs = vim.tbl_map(function(p) local pack_specs = vim.tbl_map(function(p)