From a9accd6604709c21b7556cf6b99943410a16ff1c Mon Sep 17 00:00:00 2001 From: Caleb Maclennan Date: Wed, 28 Aug 2024 00:49:59 +0300 Subject: [PATCH] feat: Move pandoc builtins to their own module and split filters, readers, and writers --- luacheck-dev-1.rockspec | 1 + src/luacheck/builtin_standards/init.lua | 24 ++-------- src/luacheck/builtin_standards/pandoc.lua | 57 +++++++++++++++++++++++ 3 files changed, 63 insertions(+), 19 deletions(-) create mode 100644 src/luacheck/builtin_standards/pandoc.lua diff --git a/luacheck-dev-1.rockspec b/luacheck-dev-1.rockspec index 0389dd14..6506e1a1 100644 --- a/luacheck-dev-1.rockspec +++ b/luacheck-dev-1.rockspec @@ -46,6 +46,7 @@ build = { ["luacheck.builtin_standards"] = "src/luacheck/builtin_standards/init.lua", ["luacheck.builtin_standards.love"] = "src/luacheck/builtin_standards/love.lua", ["luacheck.builtin_standards.minetest"] = "src/luacheck/builtin_standards/minetest.lua", + ["luacheck.builtin_standards.pandoc"] = "src/luacheck/builtin_standards/pandoc.lua", ["luacheck.builtin_standards.playdate"] = "src/luacheck/builtin_standards/playdate.lua", ["luacheck.builtin_standards.ngx"] = "src/luacheck/builtin_standards/ngx.lua", ["luacheck.cache"] = "src/luacheck/cache.lua", diff --git a/src/luacheck/builtin_standards/init.lua b/src/luacheck/builtin_standards/init.lua index d0068f9e..159f766f 100644 --- a/src/luacheck/builtin_standards/init.lua +++ b/src/luacheck/builtin_standards/init.lua @@ -1,5 +1,6 @@ local love = require "luacheck.builtin_standards.love" local minetest = require "luacheck.builtin_standards.minetest" +local pandoc = require "luacheck.builtin_standards.pandoc" local playdate = require "luacheck.builtin_standards.playdate" local ngx = require "luacheck.builtin_standards.ngx" local standards = require "luacheck.standards" @@ -344,25 +345,10 @@ builtin_standards.sile = { } } --- https://pandoc.org/lua-filters.html#global-variables -builtin_standards.pandoc = { - globals = { - -- Global modules - "pandoc", "lpeg", "re", - -- Global variables passed to filters - "FORMAT", "PANDOC_READER_OPTIONS", "PANDOC_WRITER_OPTIONS", "PANDOC_VERSION", "PANDOC_API_VERSION", - "PANDOC_SCRIPT_FILE", "PANDOC_STATE", - -- Globals that can be used to create filter elements - -- - top level - "Inlines", "Inline", "Blocks", "Block", "Meta", "Pandoc", - -- - inline - "Cite", "Code", "Emph", "Image", "LineBreak", "Link", "Math", "Note", "Quoted", "RawInline", "SmallCaps", - "SoftBreak", "Space", "Span", "Str", "Strikeout", "Strong", "Subscript", "Superscript", "Underline", - -- - block - "BlockQuote", "BulletList", "CodeBlock", "DefinitionList", "Div", "Figure", "Header", "HorizontalRule", - "LineBlock", "OrderedList", "Para", "Plain", "RawBlock", "Table", - } -} +builtin_standards.pandoc = pandoc.pandoc +builtin_standards.pandoc_filter = pandoc.filter +builtin_standards.pandoc_reader = pandoc.reader +builtin_standards.pandoc_writer = pandoc.writer builtin_standards.none = {} diff --git a/src/luacheck/builtin_standards/pandoc.lua b/src/luacheck/builtin_standards/pandoc.lua new file mode 100644 index 00000000..e03cffaa --- /dev/null +++ b/src/luacheck/builtin_standards/pandoc.lua @@ -0,0 +1,57 @@ +local add_std_table = require "luacheck.standards".add_std_table + +local function combine(...) + local res = {} + for _, def in ipairs({...}) do + add_std_table(res, def) + end + return res.fields +end + +local common = { + read_globals = { + "pandoc", "lpeg", "re", + }, +} + +-- https://pandoc.org/lua-filters.html +local filter = { + read_globals = { + "FORMAT", "PANDOC_READER_OPTIONS", "PANDOC_WRITER_OPTIONS", "PANDOC_VERSION", "PANDOC_API_VERSION", + "PANDOC_SCRIPT_FILE", "PANDOC_STATE", + }, + globals = { + -- document types + "Inlines", "Inline", "Blocks", "Block", "Meta", "Pandoc", + -- inline types + "Cite", "Code", "Emph", "Image", "LineBreak", "Link", "Math", "Note", "Quoted", "RawInline", "SmallCaps", + "SoftBreak", "Space", "Span", "Str", "Strikeout", "Strong", "Subscript", "Superscript", "Underline", + -- block types + "BlockQuote", "BulletList", "CodeBlock", "DefinitionList", "Div", "Figure", "Header", "HorizontalRule", + "LineBlock", "OrderedList", "Para", "Plain", "RawBlock", "Table", + }, +} + +-- https://pandoc.org/custom-readers.html +local reader = { + globals = { + "Reader", "Extensions", "ByteStringReader" + }, +} + +-- https://pandoc.org/custom-writers.html +local writer = { + globals = { + "PANDOC_DOCUMENT", "Writer", "Extensions", "Doc", "Template", + "Blocksep", "ByteStringWriter", "CaptionedImage", "DisplayMath", "DoubleQuoted", "InlineMath", "SingleQuoted", + }, +} + +local variants = { + pandoc = { globals = combine(common, filter, reader, writer) }, + filter = { globals = combine(common, filter) }, + reader = { globals = combine(common, reader) }, + writer = { globals = combine(common, writer) }, +} + +return variants