diff --git a/lua/ts.lua b/lua/ts.lua index d4ba665..51c95d1 100644 --- a/lua/ts.lua +++ b/lua/ts.lua @@ -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,