A small package to avoid the problem of leaking variables between macros. Consider the following macro @b that calls another macro @a. Since they both set a value to x and they share the same expansion context, the variable ##x#000 will be shared in both macros even though the name is gensymed. This can lead to confusing bugs when working with stacked macros.
macro a()
quote
x = :a
end
end
macro b()
quote
x = :b
@a()
x # <- x is :a here
end
endHygienic exports a single macro @hygienize to do the hygiene at the macro definition step instead of at macro call time. This makes sure that no variable will leak to another macro.
macro a()
@hygienize quote
x = :a
end
end