How do you tell if code is being evaluated at top-level, or directly into the REPL?
I have a macro that defines some variables in the current scope. For example:
macro defs(n)
assignments = [:($(esc(Symbol("x$i"))) = $i) for i in 1:n]
quote $(assignments...) end
end
@defs 3
# expands to:
quote
x1 = 1
x2 = 2
x3 = 3
end
If this is entered into the REPL, I want to show an informative message like
julia> @defs 3
[ Info: Defined global variables: x1, x2, x3
but I don’t want this message to be shown when used in a local scope, e.g., in a function definition:
julia> function foo()
x = 42
@defs 5
x + x5
end
foo (generic function with 1 method)
# no info message
Is this possible to do with Julia macros?
Edit: this might be an XY problem, so I’m open to workarounds — I just want to inform the user when something “permanent” happens, like defining variables in global scope.