From 44100f53aef960e87f6d06cf74ce66f3c3d42f92 Mon Sep 17 00:00:00 2001 From: Barret Schloerke Date: Tue, 12 Sep 2023 16:58:26 -0400 Subject: [PATCH] Cleaner indenting using early returns --- .../quarto-ext/shinylive/shinylive.lua | 90 ++++++++++--------- 1 file changed, 47 insertions(+), 43 deletions(-) diff --git a/_extensions/quarto-ext/shinylive/shinylive.lua b/_extensions/quarto-ext/shinylive/shinylive.lua index 749000b..d0c416e 100644 --- a/_extensions/quarto-ext/shinylive/shinylive.lua +++ b/_extensions/quarto-ext/shinylive/shinylive.lua @@ -96,50 +96,54 @@ end return { { CodeBlock = function(el) - if el.attr and ( - el.attr.classes:includes("{shinylive-python}") - or el.attr.classes:includes("{shinylive-r}") - ) then - local language = "python" - if el.attr.classes:includes("{shinylive-r}") then - language = "r" - end - ensureShinyliveSetup(language) - - -- Convert code block to JSON string in the same format as app.json. - local parsedCodeblockJson = pandoc.pipe( - "quarto", - { "run", codeblockScript }, - el.text - ) - - -- This contains "files" and "quartoArgs" keys. - local parsedCodeblock = quarto.json.decode(parsedCodeblockJson) - - -- Find Python package dependencies for the current app. - local appDepsJson = callShinylive( - language, - { "package-deps" }, - quarto.json.encode(parsedCodeblock["files"]) - ) - - local appDeps = quarto.json.decode(appDepsJson) - - for idx, dep in ipairs(appDeps) do - quarto.doc.attach_to_dependency("shinylive", dep) - end - - if el.attr.classes:includes("{shinylive-python}") then - el.attributes.engine = "python" - el.attr.classes = pandoc.List() - el.attr.classes:insert("shinylive-python") - elseif el.attr.classes:includes("{shinylive-r}") then - el.attributes.engine = "r" - el.attr.classes = pandoc.List() - el.attr.classes:insert("shinylive-r") - end - return el + if not el.attr then + -- Not a shinylive codeblock, return + return end + + if el.attr.classes:includes("{shinylive-r}") then + language = "r" + elseif el.attr.classes:includes("{shinylive-python}") then + language = "python" + else + -- Not a shinylive codeblock, return + return + end + ensureShinyliveSetup(language) + + -- Convert code block to JSON string in the same format as app.json. + local parsedCodeblockJson = pandoc.pipe( + "quarto", + { "run", codeblockScript }, + el.text + ) + + -- This contains "files" and "quartoArgs" keys. + local parsedCodeblock = quarto.json.decode(parsedCodeblockJson) + + -- Find Python package dependencies for the current app. + local appDepsJson = callShinylive( + language, + { "package-deps" }, + quarto.json.encode(parsedCodeblock["files"]) + ) + + local appDeps = quarto.json.decode(appDepsJson) + + for idx, dep in ipairs(appDeps) do + quarto.doc.attach_to_dependency("shinylive", dep) + end + + if el.attr.classes:includes("{shinylive-python}") then + el.attributes.engine = "python" + el.attr.classes = pandoc.List() + el.attr.classes:insert("shinylive-python") + elseif el.attr.classes:includes("{shinylive-r}") then + el.attributes.engine = "r" + el.attr.classes = pandoc.List() + el.attr.classes:insert("shinylive-r") + end + return el end } }