Browse Source

Fix in-replacement in filtered cartesian iterators

pull/19/head
Fredrik Ekre 1 year ago
parent
commit
d326bb1e5a
No known key found for this signature in database
GPG Key ID: DE82E6D5E364C0A2
  1. 6
      src/runestone.jl
  2. 2
      test/runtests.jl

6
src/runestone.jl

@ -1074,12 +1074,16 @@ function replace_with_in_filter(ctx::Context, node::Node)
@assert kind(node) === K"filter" && !is_leaf(node) @assert kind(node) === K"filter" && !is_leaf(node)
pos = position(ctx.fmt_io) pos = position(ctx.fmt_io)
kids = verified_kids(node) kids = verified_kids(node)
idx = findfirst(x -> kind(x) === K"=" && !is_leaf(x), kids)::Int idx = findfirst(x -> kind(x) in KSet"= cartesian_iterator" && !is_leaf(x), kids)::Int
for i in 1:(idx - 1) for i in 1:(idx - 1)
accept_node!(ctx, kids[i]) accept_node!(ctx, kids[i])
end end
kid = kids[idx] kid = kids[idx]
if kind(kid) === K"="
kid′ = replace_with_in(ctx, kid) kid′ = replace_with_in(ctx, kid)
else
kid′ = replace_with_in_cartesian(ctx, kid)
end
if kid′ === nothing if kid′ === nothing
seek(ctx.fmt_io, pos) seek(ctx.fmt_io, pos)
return nothing return nothing

2
test/runtests.jl

@ -434,6 +434,8 @@ end
for (l, r) in (("[", "]"), ("(", ")")) for (l, r) in (("[", "]"), ("(", ")"))
@test format_string("$(l)i for i$(sp)$(op)$(sp)I if i < 2$(r)") == @test format_string("$(l)i for i$(sp)$(op)$(sp)I if i < 2$(r)") ==
"$(l)i for i in I if i < 2$(r)" "$(l)i for i in I if i < 2$(r)"
@test format_string("$(l)i for i$(sp)$(op)$(sp)I, j$(sp)$(op)$(sp)J if i < j$(r)") ==
"$(l)i for i in I, j in J if i < j$(r)"
end end
end end
end end

Loading…
Cancel
Save