1
1
using CSTParser
2
- using CSTParser: EXPR, Call
2
+ using CSTParser: EXPR, Call, Location, exprloc, charrange
3
3
4
4
expridx (x, ii) = (@assert isempty (ii); x)
5
5
expridx (x:: Expr , ii) = isempty (ii) ? x : expridx (x. args[ii[1 ]], ii[2 : end ])
6
6
7
7
function precedence_level (cst:: EXPR , loc:: Location )
8
- parent = cst[MacroTools . parent (loc)]
8
+ parent = cst[CSTParser . parent (loc)]
9
9
if parent isa Union{CSTParser. BinaryOpCall,CSTParser. UnaryOpCall,CSTParser. ChainOpCall}
10
10
Base. operator_precedence (Expr (parent). args[1 ])
11
11
elseif parent isa Union{CSTParser. BinarySyntaxOpCall,CSTParser. UnarySyntaxOpCall}
18
18
# Get the range at loc, including trailing trivia from the previous node.
19
19
function separator_range (cst, loc)
20
20
i = loc. ii[end ]
21
- loc = MacroTools . parent (loc)
22
- start = charrange (cst, child ( loc, i- 1 ) )[1 ][1 ]+ 1
23
- stop = charrange (cst, child ( loc, i) )[1 ][end ]
21
+ loc = CSTParser . parent (loc)
22
+ start = charrange (cst, loc[ i- 1 ] )[1 ][1 ]+ 1
23
+ stop = charrange (cst, loc[i] )[1 ][end ]
24
24
return start: stop
25
25
end
26
26
27
27
function separator (cst, loc, x:: EXPR{Call} , i)
28
28
length (x. args) == 3 && return " "
29
29
length (x. args) == 4 && return " , "
30
- separator_range (cst, child ( loc, max (i- 1 ,4 )) )
30
+ separator_range (cst, loc[ max (i- 1 ,4 )] )
31
31
end
32
32
33
33
function separator (cst, loc, x:: EXPR{CSTParser.Block} , i)
34
- out, in = charrange (cst, child ( loc, max (i- 1 ,1 )) )
34
+ out, in = charrange (cst, loc[ max (i- 1 ,1 )] )
35
35
in[end ]+ 1 : out[end ]
36
36
end
37
37
38
38
function separator (cst, loc, x:: CSTParser.BinaryOpCall , i)
39
- separator_range (cst, child ( loc, 2 ) )
39
+ separator_range (cst, loc[ 2 ] )
40
40
end
41
41
42
42
function separator (cst:: EXPR , loc:: Location )
43
- parent = MacroTools . parent (loc)
43
+ parent = CSTParser . parent (loc)
44
44
separator (cst, parent, cst[parent], loc. ii[end ])
45
45
end
46
46
@@ -57,7 +57,7 @@ function SourceFile(path::String, text = String(read(path)))
57
57
end
58
58
59
59
function replacement (src:: SourceFile , p:: Replace )
60
- loc = expr_location (src. cst, p. idx)
60
+ loc = exprloc (src. cst, p. idx)
61
61
prec = precedence_level (src. cst, loc)
62
62
_, span = charrange (src. cst, loc)
63
63
span => sprint (Base. show_unquoted, p. new, 0 , prec)
66
66
function replacement (src:: SourceFile , p:: Insert )
67
67
append = p. idx[end ] > length (expridx (src. ast, p. idx[1 : end - 1 ]). args)
68
68
append && (p. idx[end ] -= 1 )
69
- loc = expr_location (src. cst, p. idx)
69
+ loc = exprloc (src. cst, p. idx)
70
70
# TODO handle cases like this more generally
71
- src. cst[MacroTools . parent (loc)] isa EXPR{Call} && (loc. ii[end ] = max (loc. ii[end ], 2 ))
71
+ src. cst[CSTParser . parent (loc)] isa EXPR{Call} && (loc. ii[end ] = max (loc. ii[end ], 2 ))
72
72
_, span = charrange (src. cst, loc)
73
73
point = append ? span[end ] : span[1 ]- 1
74
74
sep = separator (src. cst, loc)
@@ -81,7 +81,7 @@ function replacement(src::SourceFile, p::Insert)
81
81
end
82
82
83
83
function replacement (src:: SourceFile , p:: Delete )
84
- loc = expr_location (src. cst, p. idx)
84
+ loc = exprloc (src. cst, p. idx)
85
85
span, _ = charrange (src. cst, loc)
86
86
sep = separator (src. cst, loc)
87
87
sep isa AbstractRange || (sep = span)
0 commit comments