Locate methods defined through macros
Methods defined through macros unhelpfully report their file and line numbers as those inside the macro definition. For example, this
# contents of foo.jl:
module Foo
macro foo()
:(bar() = x) # line 3
end
@foo() # line 6
end
# somewhere else:
bar()gives an UndefVarError with the stack trace pointing to line 3, rather than 6.
This module provides functions finddef(method) and finddefs(f::Function) returning LineNumberNodes for the macro call sites:
julia> using FindDefinition
julia> finddef(first(methods(Foo.bar)))
:(#= [...]/foo.jl:6 =#)
julia> finddefs(Foo.bar)
1-element Array{LineNumberNode,1}:
:(#= [...]/foo.jl:6 =#)Warning: The current implementation uses eval inside loaded modules to match method signatures. This is probably harmless, but does produce new gensymed symbols inside your loaded modules.