File tree Expand file tree Collapse file tree 2 files changed +21
-4
lines changed Expand file tree Collapse file tree 2 files changed +21
-4
lines changed Original file line number Diff line number Diff line change @@ -823,26 +823,33 @@ function parse_pipe_gt(ps::ParseState)
823
823
parse_LtoR (ps, parse_curry_chain, is_prec_pipe_gt)
824
824
end
825
825
826
- # x /> f(y) /> g(z) ==> (chain x (/> f y) (/> g z))
827
- # x /> A.f(y) ==> (chain x (/> (. A (quote f)) y))
828
826
function parse_curry_chain (ps:: ParseState )
829
827
mark = position (ps)
830
828
nterms = 0
831
829
if (k = peek (ps); k != K " />" && k != K "\> " )
830
+ # x /> f(a) ==> (chain x (/> (call f a)))
832
831
parse_range (ps)
833
832
nterms += 1
833
+ else
834
+ # /> f(a) ==> (/> (call f a))
834
835
end
835
836
while (k = peek (ps); k == K " />" || k == K "\> " )
836
- bump (ps, TRIVIA_FLAG)
837
837
m = position (ps)
838
+ bump (ps, TRIVIA_FLAG)
838
839
parse_range (ps)
839
840
nterms += 1
840
- if peek_behind (ps). kind != K " call"
841
+ if (kb = peek_behind (ps). kind; kb != K " call" && kb != K " $ " )
841
842
emit (ps, m, K " error" , error= " Expected call to the right of />" )
842
843
end
843
844
emit (ps, m, k)
844
845
end
845
846
if nterms > 1
847
+ # x /> f(a) /> g(b) ==> (chain x (/> (call f a)) (/> (call g b)))
848
+ # x /> A.f(a,b) ==> (chain x (/> (call (. A (quote f)) a b)))
849
+ # /> f(a) /> g(b) ==> (chain (/> (call f a)) (/> (call g b)))
850
+ # x /> f() \> g() ==> (chain x (/> (call f)) (\> (call g)))
851
+ # x /> $call ==> (chain x (/> ($ call)))
852
+ # x /> notcall[] ==> (chain x (/> (error (ref notcall))))
846
853
emit (ps, mark, K " chain" )
847
854
end
848
855
end
Original file line number Diff line number Diff line change @@ -131,6 +131,16 @@ tests = [
131
131
" x |> y |> z" => " (call-i (call-i x |> y) |> z)"
132
132
" x .|> y" => " (dotcall-i x |> y)"
133
133
],
134
+ JuliaSyntax. parse_curry_chain => [
135
+ " x /> f(a)" => " (chain x (/> (call f a)))"
136
+ " /> f(a)" => " (/> (call f a))"
137
+ " x /> f(a) /> g(b)" => " (chain x (/> (call f a)) (/> (call g b)))"
138
+ " x /> A.f(a,b)" => " (chain x (/> (call (. A (quote f)) a b)))"
139
+ " /> f(a) /> g(b)" => " (chain (/> (call f a)) (/> (call g b)))"
140
+ " x /> f() \\ > g()" => " (chain x (/> (call f)) (\\ > (call g)))"
141
+ " x /> \$ call" => " (chain x (/> (\$ call)))"
142
+ " x /> notcall[]" => " (chain x (/> (error (ref notcall))))"
143
+ ],
134
144
JuliaSyntax. parse_range => [
135
145
" 1:2" => " (call-i 1 : 2)"
136
146
" 1:2:3" => " (call-i 1 : 2 3)"
You can’t perform that action at this time.
0 commit comments