Skip to content

Commit

Permalink
Minor fixes to test tools (#262)
Browse files Browse the repository at this point in the history
* Avoid crash in heuristic Expr comparisons
* reduce_tree(text) returns text not a tree
  • Loading branch information
c42f committed May 2, 2023
1 parent 7445401 commit d18dc3f
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 11 deletions.
27 changes: 17 additions & 10 deletions test/test_utils.jl
Original file line number Diff line number Diff line change
Expand Up @@ -127,13 +127,14 @@ function exprs_roughly_equal(fl_ex, ex)
args = args[1].args
elseif h == :function && Meta.isexpr(fl_args[1], :block)
blockargs = filter(x->!(x isa LineNumberNode), fl_args[1].args)
ps = blockargs[2:end]
for i = 1:length(ps)
if Meta.isexpr(ps[i], :(=))
ps[i] = Expr(:kw, ps[i].args...)
posargs = blockargs[1:max(0, length(blockargs))]
kwargs = blockargs[2:end]
for i = 1:length(kwargs)
if Meta.isexpr(kwargs[i], :(=))
kwargs[i] = Expr(:kw, kwargs[i].args...)
end
end
fl_args[1] = Expr(:tuple, Expr(:parameters, ps...), blockargs[1])
fl_args[1] = Expr(:tuple, Expr(:parameters, kwargs...), posargs...)
end
if length(fl_args) != length(args)
return false
Expand Down Expand Up @@ -212,7 +213,7 @@ function test_parse_all_in_path(path_allowed::Function, basedir)
exprs_equal=exprs_equal_no_linenum)
@test parsers_agree
if !parsers_agree
reduced_failures = reduce_text.(sourcetext.(reduce_tree(text)),
reduced_failures = reduce_text.(reduce_tree(text),
parsers_fuzzy_disagree)
@test reduced_failures == []
end
Expand Down Expand Up @@ -263,21 +264,27 @@ function _reduce_tree(failing_subtrees, tree; exprs_equal=exprs_equal_no_linenum
end

"""
reduce_tree(text::AbstractString; exprs_equal=exprs_equal_no_linenum)
reduce_tree(tree::SyntaxNode; exprs_equal=exprs_equal_no_linenum)
Select minimal subtrees of `text` or `tree` which are inconsistent between
flisp and JuliaSyntax parsers.
Select minimal subtrees of `tree` which are inconsistent between flisp and
JuliaSyntax parsers.
"""
function reduce_tree(tree::SyntaxNode; kws...)
subtrees = Vector{typeof(tree)}()
_reduce_tree(subtrees, tree; kws...)
subtrees
end

"""
reduce_tree(text::AbstractString; exprs_equal=exprs_equal_no_linenum)
Find the minimal subtrees of the parsed form of `text` which are inconsistent
between flisp and JuliaSyntax parsers and return the source text of those
subtrees.
"""
function reduce_tree(text::AbstractString; kws...)
tree = parseall(SyntaxNode, text)
reduce_tree(tree; kws...)
sourcetext.(reduce_tree(tree; kws...))
end


Expand Down
2 changes: 1 addition & 1 deletion tools/check_all_packages.jl
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ Logging.with_logger(TerminalLogger()) do
println(io, "\n")
end
end
reduced_failures = reduce_text.(sourcetext.(reduce_tree(text)),
reduced_failures = reduce_text.(reduce_tree(text),
parsers_fuzzy_disagree)
append!(all_reduced_failures, reduced_failures)
@error("Parsers succeed but disagree",
Expand Down

0 comments on commit d18dc3f

Please sign in to comment.