diff --git a/docsrc/cli.rst b/docsrc/cli.rst index be222004..93e1d3b2 100644 --- a/docsrc/cli.rst +++ b/docsrc/cli.rst @@ -87,6 +87,10 @@ Option Meaning * ``rockspec`` - globals allowed in rockspecs, by default added for files ending with ``.rockspec``; * ``luacheckrc`` - globals allowed in Luacheck configs, by default added for files ending with ``.luacheckrc``; * ``ldoc`` - globals allowed in LDoc config, by default added for files named ``config.ld``; + * ``pandoc`` - globals allowed in Pandoc Lua in any context; + * ``pandoc_filter`` - globals allowed in Pandoc Lua, subset specific to filters; + * ``pandoc_custom`` - globals allowed in Pandoc Lua, subset specific to custom reader/writers; + * ``pandoc_script`` - globals allowed in Pandoc Lua, subset specific to scripts; * ``sile`` - globals allowed in The SILE Typesetter and its package ecosystem; * ``none`` - no standard globals. 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 097fee2d..4aa202f5 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,6 +345,11 @@ builtin_standards.sile = { } } +builtin_standards.pandoc = pandoc.pandoc +builtin_standards.pandoc_filter = pandoc.filter +builtin_standards.pandoc_custom = pandoc.custom +builtin_standards.pandoc_script = pandoc.script + builtin_standards.none = {} return builtin_standards diff --git a/src/luacheck/builtin_standards/pandoc.lua b/src/luacheck/builtin_standards/pandoc.lua new file mode 100644 index 00000000..f640ea3e --- /dev/null +++ b/src/luacheck/builtin_standards/pandoc.lua @@ -0,0 +1,61 @@ +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_VERSION", "PANDOC_API_VERSION", "PANDOC_STATE", + "pandoc", "lpeg", "re", + }, + 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/lua-filters.html +local filter = { + read_globals = { + "FORMAT", + "PANDOC_READER_OPTIONS", "PANDOC_WRITER_OPTIONS", "PANDOC_SCRIPT_FILE", + }, +} + +-- https://pandoc.org/custom-readers.html +-- https://pandoc.org/custom-writers.html +local custom = { + globals = { + -- custom scope + "PANDOC_DOCUMENT", + "PANDOC_READER_OPTIONS", "PANDOC_WRITER_OPTIONS", "PANDOC_SCRIPT_FILE", + "ByteStringReader", "ByteStringWriter", "Doc", "Extensions", "Reader", "Template", "Writer", + -- extra types applicable to readers/writers + "Blocksep", "CaptionedImage", "DisplayMath", "DoubleQuoted", "InlineMath", "SingleQuoted", + }, +} + +local script = { + globals = { + } +} + +local variants = { + pandoc = { globals = combine(common, filter, custom, script) }, + filter = { globals = combine(common, filter) }, + custom = { globals = combine(common, custom) }, + script = { globals = combine(common, script) }, +} + +return variants