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)
823823 parse_LtoR (ps, parse_curry_chain, is_prec_pipe_gt)
824824end
825825
826- # x /> f(y) /> g(z) ==> (chain x (/> f y) (/> g z))
827- # x /> A.f(y) ==> (chain x (/> (. A (quote f)) y))
828826function parse_curry_chain (ps:: ParseState )
829827 mark = position (ps)
830828 nterms = 0
831829 if (k = peek (ps); k != K " />" && k != K "\> " )
830+ # x /> f(a) ==> (chain x (/> (call f a)))
832831 parse_range (ps)
833832 nterms += 1
833+ else
834+ # /> f(a) ==> (/> (call f a))
834835 end
835836 while (k = peek (ps); k == K " />" || k == K "\> " )
836- bump (ps, TRIVIA_FLAG)
837837 m = position (ps)
838+ bump (ps, TRIVIA_FLAG)
838839 parse_range (ps)
839840 nterms += 1
840- if peek_behind (ps). kind != K " call"
841+ if (kb = peek_behind (ps). kind; kb != K " call" && kb != K " $ " )
841842 emit (ps, m, K " error" , error= " Expected call to the right of />" )
842843 end
843844 emit (ps, m, k)
844845 end
845846 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))))
846853 emit (ps, mark, K " chain" )
847854 end
848855end
Original file line number Diff line number Diff line change @@ -131,6 +131,16 @@ tests = [
131131 " x |> y |> z" => " (call-i (call-i x |> y) |> z)"
132132 " x .|> y" => " (dotcall-i x |> y)"
133133 ],
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+ ],
134144 JuliaSyntax. parse_range => [
135145 " 1:2" => " (call-i 1 : 2)"
136146 " 1:2:3" => " (call-i 1 : 2 3)"
You can’t perform that action at this time.
0 commit comments