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 path? string
---@class ow.TS.ParserOpts : ow.TS.Parser
---@class ow.TS.SingleRepoOpts : ow.TS.RepoBase
---@field lang? string
---@field location? string
---@field generate? boolean
---@field from_json? boolean
---@class ow.TS.RepoOpts : ow.TS.RepoBase, ow.TS.ParserOpts
---@field name? string
---@field parsers? ow.TS.Parser[]
---@class ow.TS.MultiRepoOpts : ow.TS.RepoBase
---@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 lang string
@@ -160,17 +166,18 @@ local function normalize(entry)
---@type ow.TS.RepoOpts
local opts
if type(entry) == "string" then
opts = { entry } --[[@as ow.TS.RepoOpts]]
opts = { entry } --[[@as ow.TS.SingleRepoOpts]]
else
opts = entry
end
local name = opts.name or name_from_url(opts[1])
local name = name_from_url(opts[1])
---@type ow.TS.Parser[]
local parsers = {}
local input_parsers = opts.parsers
if input_parsers and vim.islist(input_parsers) then
for _, s in ipairs(input_parsers) do
local input_parsers = (opts --[[@as ow.TS.MultiRepoOpts]]).parsers
if input_parsers then
---@cast opts ow.TS.MultiRepoOpts
for _, s in ipairs(opts.parsers) do
table.insert(parsers, {
lang = s.lang,
location = s.location,
@@ -179,6 +186,7 @@ local function normalize(entry)
})
end
else
---@cast opts ow.TS.SingleRepoOpts
table.insert(parsers, {
lang = opts.lang or lang_from_name(name),
location = opts.location,