AutoHashEquals.jl
AutoHashEquals.jl copied to clipboard
@auto_hash_equals ignores fields declared in begin...end
I don't know why anyone would do this, but it is legal in Julia (at least, the compiler accepts it) and it breaks @auto_hash_equals
module In0
using AutoHashEquals
@auto_hash_equals struct Q
x::Int
begin
y::Int
end
end
println(hash(Q(1, 2)))
println(hash(Q(1, 3)))
println(Q(1, 2) == Q(1, 3))
end
These two differently-valued instances of Q are treated as equal to each other.
I think the solution for this would be something like https://github.com/FluxML/MacroTools.jl/blob/d1937f95a7e5c82f9cc3b5a4f8a2b33fdb32f884/src/utils.jl#L454-L470 as a preprocessor. I think something like that would normally belong in ExprTools.jl but I think people are also happy that this package currently has no dependencies and it's probably fine to replicate that code in this package for this purpose specifically, if someone ends up needing it.