From 3b140b6953553978989397c1027653ec3e8ae016 Mon Sep 17 00:00:00 2001 From: perro Date: Wed, 19 Apr 2023 11:33:35 -0700 Subject: [PATCH] checkcmd implemented --- dist/lin.lua | 31 ++++++++++++++++++-- opt/lua-extensions/extensions.lua | 3 ++ src/literate.lua | 18 +++++++++++- src/locale.yaml | 10 +++++-- tests/fail.lit.errors.md | 47 ++++++++++++++++--------------- tests/pass.lit.warns.md | 33 ++++++++-------------- 6 files changed, 93 insertions(+), 49 deletions(-) diff --git a/dist/lin.lua b/dist/lin.lua index cf9176a..0631934 100644 --- a/dist/lin.lua +++ b/dist/lin.lua @@ -6526,6 +6526,9 @@ if pandoc ~= nil then RawInline = function(rawinline) return pandoc.Str(rawinline.text:gsub("\\n", "\n"):gsub("\\t", "\t")) end, + SoftBreak = function(softbreak) + return pandoc.Str("\n") + end, Inline = function(inline) return pandoc.utils.stringify(inline) end, }) end @@ -6641,8 +6644,11 @@ function lit.puts(key, ...) local msg = pandoc.metatotable(pandoc.read([[--- INFO: checking: - en: Checking:\n#1 - es: Comprobando:\n#1 + en: "Checking:\n#1" + es: "Comprobando:\n#1" + skip_check: + en: "Skipping '#1': this check is not supported" + es: "Skipping '#1': esta comprobación no está soportada" WARNING: foo: en: bar @@ -6660,6 +6666,9 @@ ERROR: invalid_value: en: Invalid value '#1' in key '#2' es: Valor '#1' inválido en clave '#2' + invalid_cmd: + en: Invalid cmd '#1' + es: Comando '#1' inválido no_key: en: Key '#1' not found es: Clave '#1' no encontrada @@ -6719,6 +6728,19 @@ function lit.exam(doc) -- Checks code block local function check(parsed) + + -- Checks for valid command + local function checkcmd(meta) + if meta["cmd"] then + cmd = meta["cmd"]:split()[1] + if os.isunix() then + status = io.try("type", cmd) + if not(status) then lit.puts("invalid_cmd", cmd) end + else + lit.puts("skip_check", "checkcmd") + end + end + end -- Checks for extra and unwanted metadata local function checkextra(meta) @@ -6784,7 +6806,10 @@ function lit.exam(doc) checkmeta(meta, "mandatory") checkmeta(meta, "optional") checkextra(meta) - -- TODO: checks for duplicates + checkcmd(meta) + -- TODO: checks for + -- with lang and cmd (warn) + -- overrides (warn) elseif isok and pandoc.utils.stringify(res.meta):isempty() then lit.puts("meta_empty") else diff --git a/opt/lua-extensions/extensions.lua b/opt/lua-extensions/extensions.lua index 519d27f..4f9d68d 100644 --- a/opt/lua-extensions/extensions.lua +++ b/opt/lua-extensions/extensions.lua @@ -265,6 +265,9 @@ if pandoc ~= nil then RawInline = function(rawinline) return pandoc.Str(rawinline.text:gsub("\\n", "\n"):gsub("\\t", "\t")) end, + SoftBreak = function(softbreak) + return pandoc.Str("\n") + end, Inline = function(inline) return pandoc.utils.stringify(inline) end, }) end diff --git a/src/literate.lua b/src/literate.lua index 3f26e0a..a0d7e7f 100644 --- a/src/literate.lua +++ b/src/literate.lua @@ -120,6 +120,19 @@ function lit.exam(doc) -- Checks code block local function check(parsed) + + -- Checks for valid command + local function checkcmd(meta) + if meta["cmd"] then + cmd = meta["cmd"]:split()[1] + if os.isunix() then + status = io.try("type", cmd) + if not(status) then lit.puts("invalid_cmd", cmd) end + else + lit.puts("skip_check", "checkcmd") + end + end + end -- Checks for extra and unwanted metadata local function checkextra(meta) @@ -185,7 +198,10 @@ function lit.exam(doc) checkmeta(meta, "mandatory") checkmeta(meta, "optional") checkextra(meta) - -- TODO: checks for duplicates + checkcmd(meta) + -- TODO: checks for + -- with lang and cmd (warn) + -- overrides (warn) elseif isok and pandoc.utils.stringify(res.meta):isempty() then lit.puts("meta_empty") else diff --git a/src/locale.yaml b/src/locale.yaml index 6c56f8d..3610fdf 100644 --- a/src/locale.yaml +++ b/src/locale.yaml @@ -1,8 +1,11 @@ --- INFO: checking: - en: Checking:\n#1 - es: Comprobando:\n#1 + en: "Checking:\n#1" + es: "Comprobando:\n#1" + skip_check: + en: "Skipping '#1': this check is not supported" + es: "Skipping '#1': esta comprobación no está soportada" WARNING: foo: en: bar @@ -20,6 +23,9 @@ ERROR: invalid_value: en: Invalid value '#1' in key '#2' es: Valor '#1' inválido en clave '#2' + invalid_cmd: + en: Invalid cmd '#1' + es: Comando '#1' inválido no_key: en: Key '#1' not found es: Clave '#1' no encontrada diff --git a/tests/fail.lit.errors.md b/tests/fail.lit.errors.md index e254e6e..f0512ed 100644 --- a/tests/fail.lit.errors.md +++ b/tests/fail.lit.errors.md @@ -8,13 +8,13 @@ Malformed YAML: id: fn1 fail ... - 1 + 2 + 3 + 1 + 1 Empty YAML: --- ... - 1 + 2 + 3 + 1 + 1 Empty YAML and code: @@ -26,28 +26,28 @@ Misses id: --- identifier: fn1 ... - 1 + 2 + 3 + 1 + 1 Wrong id (doesn't starts with `%a`): --- id: 1 ... - 1 + 2 + 3 + 1 + 1 Wrong id (doesn't follows with `[_%w]`): --- id: f-1 ... - 1 + 2 + 3 + 1 + 1 Wrong id (more than 1 word): --- id: f n1 ... - 1 + 2 + 3 + 1 + 1 Invalid value: @@ -55,7 +55,7 @@ Invalid value: id: fn1 shift: "true" ... - Invalid shift value + 1 + 1 Invalid path: @@ -63,18 +63,31 @@ Invalid path: id: fn1 dump: invalid/path.txt ... - Invalid dump value + 1 + 1 Extra key: --- id: fn1 language: fennel - args: - a: 1 - b: 2 ... - (* #a #b) + 1 + 1 + +Uknown lang: + + --- + id: fn1 + lang: fail + ... + 1 + 1 + +Uknown cmd: + + --- + id: fn1 + cmd: piton -E -X utf8 + ... + 1 + 1 Empty code: @@ -96,16 +109,6 @@ Invalid code: ... false + false -Uknown cmd: - - --- - id: fn1 - cmd: piton -E -X utf8 - args: - n: 2 - ... - #n + #n - Infinite loop: --- diff --git a/tests/pass.lit.warns.md b/tests/pass.lit.warns.md index 0d9af9c..1a12330 100644 --- a/tests/pass.lit.warns.md +++ b/tests/pass.lit.warns.md @@ -3,14 +3,23 @@ --- id: fn1 ... - 1 + 2 + 3 + 1 + 1 Override: --- id: fn1 ... - 4 + 5 + 6 + 1 + 2 + +# Block with Language and Command + + --- + id: fn4 + lang: python + cmd: python -E -X utf8 + ... + 1 + 1 # Block with Unused Argument @@ -19,22 +28,4 @@ Override: args: a: 1 ... - 7 + 8 + 9 - -# Block with Language and Command - - --- - id: fn4 - lang: python - cmd: python -E -X utf8 - args: - n: 2 - ... - #n * #n - -# Block with Unknown Language - - --- - id: fn5 - ... - "Lang becomes cmd." + 1 + 1