From cfd14e880023752bffe9a01d1781b54ceefa32ec Mon Sep 17 00:00:00 2001 From: delta Date: Tue, 26 Aug 2025 00:57:02 +0200 Subject: initial commit --- generate_parsers.lua | 59 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 generate_parsers.lua (limited to 'generate_parsers.lua') diff --git a/generate_parsers.lua b/generate_parsers.lua new file mode 100644 index 0000000..816358c --- /dev/null +++ b/generate_parsers.lua @@ -0,0 +1,59 @@ +---@type string +local parsers_content = io.read("*a") +---@type string +local aliases = parsers_content:match("for ft, lang in pairs {(.-)} do") + +print([[ +pub static ALIASES: LazyLock> = LazyLock::new(|| { + HashMap::from([]]) +for k,v in aliases:gmatch("%[?\"?([^%s]-)\"?%]? = \"(.-)\",") do + print([[ ("]] .. k .. [[", "]] .. v .. [["),]]) +end +print(" ])") +print([[}); +]]) + +local function crush(t1, t2) + for k,v in pairs(t2) do t1[k] = v end +end + +local function quote(v) + return type(v) == "string" and [["]] .. v .. [["]] or v +end + +local function opt(v) + return type(v) == "nil" and "None" or "Some(" .. quote(v) .. ")" +end + +print([[pub static PARSERS: LazyLock> = LazyLock::new(|| { + HashMap::from([]]) +for lang, _data in parsers_content:gmatch("list%.(%w+)%s-=%s-{.-install_info%s-=%s(%b{})") do + local data = load("return " .. _data)() + local info = { + url = "", + files = {}, + generate_requires_npm = false, + requires_generate_from_grammar = false, + use_makefile = false, + } + + crush(info, data) + local files_str = "" + for _,v in ipairs(info.files) do + files_str = files_str .. "\"" .. v .. "\"" .. (next(info.files, _) ~= nil and "," or "") + end + + print(" (" .. quote(lang) .. ", Parser {") + print(" url: " .. quote(info.url) .. ",") + print(" branch: " .. opt(info.branch) .. ",") + print(" revision: " .. opt(info.revision) .. ",") + print(" files: &[".. files_str .. "],") + print(" generate_requires_npm: " .. tostring(info.generate_requires_npm) .. ",") + print(" requires_generate_from_grammar: " .. tostring(info.requires_generate_from_grammar) .. ",") + print(" location: " .. opt(info.location) .. ",") + print(" use_makefile: " .. tostring(info.use_makefile) .. ",") + print(" cxx_standard: " .. opt(info.cxx_standard)) + print(" }),") +end +print(" ])") +print("});") -- cgit v1.2.3