refactor(ts): split RepoOpts into single- and multi-parser variants

This commit is contained in:
2026-05-03 10:39:48 +02:00
parent ca37e5af4b
commit ca2490936c
+17 -9
View File
@@ -17,12 +17,18 @@ local M = {}
---@field parsers ow.TS.Parser[] ---@field parsers ow.TS.Parser[]
---@field path? string ---@field path? string
---@class ow.TS.ParserOpts : ow.TS.Parser ---@class ow.TS.SingleRepoOpts : ow.TS.RepoBase
---@field lang? string ---@field lang? string
---@field location? string
---@field generate? boolean
---@field from_json? boolean
---@class ow.TS.RepoOpts : ow.TS.RepoBase, ow.TS.ParserOpts ---@class ow.TS.MultiRepoOpts : ow.TS.RepoBase
---@field name? string ---@field parsers ow.TS.Parser[]
---@field parsers? ow.TS.Parser[] ---@field generate? boolean
---@field from_json? boolean
---@alias ow.TS.RepoOpts ow.TS.SingleRepoOpts | ow.TS.MultiRepoOpts
---@param path string ---@param path string
---@param lang string ---@param lang string
@@ -160,17 +166,18 @@ local function normalize(entry)
---@type ow.TS.RepoOpts ---@type ow.TS.RepoOpts
local opts local opts
if type(entry) == "string" then if type(entry) == "string" then
opts = { entry } --[[@as ow.TS.RepoOpts]] opts = { entry } --[[@as ow.TS.SingleRepoOpts]]
else else
opts = entry opts = entry
end end
local name = opts.name or name_from_url(opts[1]) local name = name_from_url(opts[1])
---@type ow.TS.Parser[] ---@type ow.TS.Parser[]
local parsers = {} local parsers = {}
local input_parsers = opts.parsers local input_parsers = (opts --[[@as ow.TS.MultiRepoOpts]]).parsers
if input_parsers and vim.islist(input_parsers) then if input_parsers then
for _, s in ipairs(input_parsers) do ---@cast opts ow.TS.MultiRepoOpts
for _, s in ipairs(opts.parsers) do
table.insert(parsers, { table.insert(parsers, {
lang = s.lang, lang = s.lang,
location = s.location, location = s.location,
@@ -179,6 +186,7 @@ local function normalize(entry)
}) })
end end
else else
---@cast opts ow.TS.SingleRepoOpts
table.insert(parsers, { table.insert(parsers, {
lang = opts.lang or lang_from_name(name), lang = opts.lang or lang_from_name(name),
location = opts.location, location = opts.location,