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.