From 09f6e2f8e0147f776f553bff178cdd475e5df0f6 Mon Sep 17 00:00:00 2001 From: Oliver Marriott Date: Sun, 26 Sep 2021 01:49:39 +1000 Subject: [PATCH 1/2] Add require-macros hook, passes ast and scope --- src/fennel/specials.fnl | 1 + 1 file changed, 1 insertion(+) diff --git a/src/fennel/specials.fnl b/src/fennel/specials.fnl index 8e0b3b68..e59a2f12 100644 --- a/src/fennel/specials.fnl +++ b/src/fennel/specials.fnl @@ -1116,6 +1116,7 @@ modules in the compiler environment." (let [(loader filename) (search-macro-module modname 1)] (compiler.assert loader (.. modname " module not found.") ast) (tset macro-loaded modname (loader modname filename)))) + (utils.hook :require-macros ast scope) ;; if we're called from import-macros, return the modname, else add them ;; to scope directly (if (= :import-macros (tostring (. ast 1))) From a8eb154dc710d5833659c18625c775b506eb7861 Mon Sep 17 00:00:00 2001 From: Oliver Marriott Date: Thu, 25 Nov 2021 13:36:15 +1100 Subject: [PATCH 2/2] Add compiler plugin test harness and required-macros test --- test/init.lua | 2 +- test/plugin.fnl | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 test/plugin.fnl diff --git a/test/init.lua b/test/init.lua index 734b68a5..e6e00a2f 100644 --- a/test/init.lua +++ b/test/init.lua @@ -32,7 +32,7 @@ local function testall(suites) end local suites = {"core", "mangling", "quoting", "bit", "fennelview", "parser", - "failures", "repl", "cli", "macro", "linter", "loops", "misc"} + "failures", "repl", "cli", "macro", "linter", "loops", "misc", "plugin"} if(#arg == 0) then local ok, err = pcall(testall, suites) diff --git a/test/plugin.fnl b/test/plugin.fnl new file mode 100644 index 00000000..b36984cb --- /dev/null +++ b/test/plugin.fnl @@ -0,0 +1,19 @@ +(local fennel (require :fennel)) +(local l (require :test.luaunit)) + +(var ran-require-macros false) + +(local plugin + {:name :test-plugin + :version fennel.version + :require-macros (fn [ast scope] + (set ran-require-macros true))}) + +(local options {:plugins [plugin]}) + +(fn test-require-macros [] + "Check require-macros hook is trigered" + (let [src "(import-macros m :test.macros)"] + (l.assertEquals ran-require-macros false))) + +{: test-require-macros}