Skip to content
On this page

Development Tools

Expronicon provides some tools for macro development. We will go through them in this section.

Inspecting expressions

You can use @expr to inspect an expression taken by a macro:

julia
julia> @expr 1 + 2
:(1 + 2)

unlike the quote ... end or :(...) syntax, @expr returns whatever is received by the macro without any modifications. This is useful when you want to check the input of an macro definition. For instance, quote ... end will return a Expr(:block, ...) expression, but @expr will return the expression as is.

julia
julia> @expr begin
           a = 1
           b = 2
           a + b
       end
quote
    #= REPL[5]:2 =#
    a = 1
    #= REPL[5]:3 =#
    b = 2
    #= REPL[5]:4 =#
    a + b
end

julia> @expr a + 1
:(a + 1)

Testing generated expressions

Expronicon provides a @test_expr macro for testing generated expressions. It is similar to @test in Test package, but it takes <lhs> = <rhs> where <lhs> and <rhs> are two expression to compare with each other.

This macro only compares the semantic of the expressions, e.g it will ignore line number nodes, recursive code blocks, etc.

julia
julia> lhs = quote
    a = 1
    b = 2
    a + b
end

julia> rhs = Expr(:block, :(a = 1), :(b = 2), :(a + b))
quote
    a = 1
    b = 2
    a + b
end

julia> lhs == rhs
false

julia> using Test

julia> @test_expr lhs == rhs
Test Passed

TIP

@test_expr requires Test package to be loaded.

Released under the MIT License.