Skip to content

Commit d18dc3f

Browse files
authored
Minor fixes to test tools (#262)
* Avoid crash in heuristic Expr comparisons * reduce_tree(text) returns text not a tree
1 parent 7445401 commit d18dc3f

File tree

2 files changed

+18
-11
lines changed

2 files changed

+18
-11
lines changed

test/test_utils.jl

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -127,13 +127,14 @@ function exprs_roughly_equal(fl_ex, ex)
127127
args = args[1].args
128128
elseif h == :function && Meta.isexpr(fl_args[1], :block)
129129
blockargs = filter(x->!(x isa LineNumberNode), fl_args[1].args)
130-
ps = blockargs[2:end]
131-
for i = 1:length(ps)
132-
if Meta.isexpr(ps[i], :(=))
133-
ps[i] = Expr(:kw, ps[i].args...)
130+
posargs = blockargs[1:max(0, length(blockargs))]
131+
kwargs = blockargs[2:end]
132+
for i = 1:length(kwargs)
133+
if Meta.isexpr(kwargs[i], :(=))
134+
kwargs[i] = Expr(:kw, kwargs[i].args...)
134135
end
135136
end
136-
fl_args[1] = Expr(:tuple, Expr(:parameters, ps...), blockargs[1])
137+
fl_args[1] = Expr(:tuple, Expr(:parameters, kwargs...), posargs...)
137138
end
138139
if length(fl_args) != length(args)
139140
return false
@@ -212,7 +213,7 @@ function test_parse_all_in_path(path_allowed::Function, basedir)
212213
exprs_equal=exprs_equal_no_linenum)
213214
@test parsers_agree
214215
if !parsers_agree
215-
reduced_failures = reduce_text.(sourcetext.(reduce_tree(text)),
216+
reduced_failures = reduce_text.(reduce_tree(text),
216217
parsers_fuzzy_disagree)
217218
@test reduced_failures == []
218219
end
@@ -263,21 +264,27 @@ function _reduce_tree(failing_subtrees, tree; exprs_equal=exprs_equal_no_linenum
263264
end
264265

265266
"""
266-
reduce_tree(text::AbstractString; exprs_equal=exprs_equal_no_linenum)
267267
reduce_tree(tree::SyntaxNode; exprs_equal=exprs_equal_no_linenum)
268268
269-
Select minimal subtrees of `text` or `tree` which are inconsistent between
270-
flisp and JuliaSyntax parsers.
269+
Select minimal subtrees of `tree` which are inconsistent between flisp and
270+
JuliaSyntax parsers.
271271
"""
272272
function reduce_tree(tree::SyntaxNode; kws...)
273273
subtrees = Vector{typeof(tree)}()
274274
_reduce_tree(subtrees, tree; kws...)
275275
subtrees
276276
end
277277

278+
"""
279+
reduce_tree(text::AbstractString; exprs_equal=exprs_equal_no_linenum)
280+
281+
Find the minimal subtrees of the parsed form of `text` which are inconsistent
282+
between flisp and JuliaSyntax parsers and return the source text of those
283+
subtrees.
284+
"""
278285
function reduce_tree(text::AbstractString; kws...)
279286
tree = parseall(SyntaxNode, text)
280-
reduce_tree(tree; kws...)
287+
sourcetext.(reduce_tree(tree; kws...))
281288
end
282289

283290

tools/check_all_packages.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ Logging.with_logger(TerminalLogger()) do
3838
println(io, "\n")
3939
end
4040
end
41-
reduced_failures = reduce_text.(sourcetext.(reduce_tree(text)),
41+
reduced_failures = reduce_text.(reduce_tree(text),
4242
parsers_fuzzy_disagree)
4343
append!(all_reduced_failures, reduced_failures)
4444
@error("Parsers succeed but disagree",

0 commit comments

Comments
 (0)