@@ -127,13 +127,14 @@ function exprs_roughly_equal(fl_ex, ex)
127
127
args = args[1 ]. args
128
128
elseif h == :function && Meta. isexpr (fl_args[1 ], :block )
129
129
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... )
134
135
end
135
136
end
136
- fl_args[1 ] = Expr (:tuple , Expr (:parameters , ps ... ), blockargs[ 1 ] )
137
+ fl_args[1 ] = Expr (:tuple , Expr (:parameters , kwargs ... ), posargs ... )
137
138
end
138
139
if length (fl_args) != length (args)
139
140
return false
@@ -212,7 +213,7 @@ function test_parse_all_in_path(path_allowed::Function, basedir)
212
213
exprs_equal= exprs_equal_no_linenum)
213
214
@test parsers_agree
214
215
if ! parsers_agree
215
- reduced_failures = reduce_text .(sourcetext .( reduce_tree (text) ),
216
+ reduced_failures = reduce_text .(reduce_tree (text),
216
217
parsers_fuzzy_disagree)
217
218
@test reduced_failures == []
218
219
end
@@ -263,21 +264,27 @@ function _reduce_tree(failing_subtrees, tree; exprs_equal=exprs_equal_no_linenum
263
264
end
264
265
265
266
"""
266
- reduce_tree(text::AbstractString; exprs_equal=exprs_equal_no_linenum)
267
267
reduce_tree(tree::SyntaxNode; exprs_equal=exprs_equal_no_linenum)
268
268
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.
271
271
"""
272
272
function reduce_tree (tree:: SyntaxNode ; kws... )
273
273
subtrees = Vector {typeof(tree)} ()
274
274
_reduce_tree (subtrees, tree; kws... )
275
275
subtrees
276
276
end
277
277
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
+ """
278
285
function reduce_tree (text:: AbstractString ; kws... )
279
286
tree = parseall (SyntaxNode, text)
280
- reduce_tree (tree; kws... )
287
+ sourcetext .( reduce_tree (tree; kws... ) )
281
288
end
282
289
283
290
0 commit comments