@@ -738,22 +738,28 @@ <h1>rewriter.coffee</h1>
738738< pre > < code > f
739739 a: b
740740 c: d
741- </ code > </ pre > < p > Don’t accept implicit calls of this type, when on the same line
741+ </ code > </ pre >
742+ < p > Don’t accept implicit calls of this type, when on the same line
742743as the control structures below as that may misinterpret constructs like:</ p >
743744< pre > < code > < span class ="hljs-keyword "> if</ span > f
744745 a: < span class ="hljs-number "> 1</ span >
745- </ code > </ pre > < p > as</ p >
746+ </ code > </ pre >
747+ < p > as</ p >
746748< pre > < code > < span class ="hljs-keyword "> if</ span > f(a: < span class ="hljs-number "> 1</ span > )
747- </ code > </ pre > < p > which is probably always unintended.
748- Furthermore don’t allow this in literal arrays, as
749- that creates grammatical ambiguities.</ p >
749+ </ code > </ pre >
750+ < p > which is probably always unintended.
751+ Furthermore don’t allow this in the first line of a literal array
752+ or explicit object, as that creates grammatical ambiguities (#5368).</ p >
750753
751754 </ div >
752755
753756 < div class ="content "> < div class ='highlight '> < pre > < span class ="hljs-keyword "> if</ span > tag < span class ="hljs-keyword "> in</ span > IMPLICIT_FUNC < span class ="hljs-keyword "> and</ span >
754757 @indexOfTag(i + < span class ="hljs-number "> 1</ span > , < span class ="hljs-string "> 'INDENT'</ span > ) > < span class ="hljs-number "> -1</ span > < span class ="hljs-keyword "> and</ span > @looksObjectish(i + < span class ="hljs-number "> 2</ span > ) < span class ="hljs-keyword "> and</ span >
755758 < span class ="hljs-keyword "> not</ span > @findTagsBackwards(i, [< span class ="hljs-string "> 'CLASS'</ span > , < span class ="hljs-string "> 'EXTENDS'</ span > , < span class ="hljs-string "> 'IF'</ span > , < span class ="hljs-string "> 'CATCH'</ span > ,
756- < span class ="hljs-string "> 'SWITCH'</ span > , < span class ="hljs-string "> 'LEADING_WHEN'</ span > , < span class ="hljs-string "> 'FOR'</ span > , < span class ="hljs-string "> 'WHILE'</ span > , < span class ="hljs-string "> 'UNTIL'</ span > ])
759+ < span class ="hljs-string "> 'SWITCH'</ span > , < span class ="hljs-string "> 'LEADING_WHEN'</ span > , < span class ="hljs-string "> 'FOR'</ span > , < span class ="hljs-string "> 'WHILE'</ span > , < span class ="hljs-string "> 'UNTIL'</ span > ]) < span class ="hljs-keyword "> and</ span >
760+ < span class ="hljs-keyword "> not</ span > ((s = stackTop()?[< span class ="hljs-number "> 0</ span > ]) < span class ="hljs-keyword "> in</ span > [< span class ="hljs-string "> '{'</ span > , < span class ="hljs-string "> '['</ span > ] < span class ="hljs-keyword "> and</ span >
761+ < span class ="hljs-keyword "> not</ span > isImplicit(stackTop()) < span class ="hljs-keyword "> and</ span >
762+ @findTagsBackwards(i, s))
757763 startImplicitCall i + < span class ="hljs-number "> 1</ span >
758764 stack.push [< span class ="hljs-string "> 'INDENT'</ span > , i + < span class ="hljs-number "> 2</ span > ]
759765 < span class ="hljs-keyword "> return</ span > forward(< span class ="hljs-number "> 3</ span > )</ pre > </ div > </ div >
@@ -807,13 +813,18 @@ <h1>rewriter.coffee</h1>
807813 < div class ="sswrap ">
808814 < a class ="ss " href ="#section-30 "> §</ a >
809815 </ div >
810- < p > Are we just continuing an already declared object?</ p >
816+ < p > Are we just continuing an already declared object?
817+ Including the case where we indent on the line after an explicit ‘{‘.</ p >
811818
812819 </ div >
813820
814821 < div class ="content "> < div class ='highlight '> < pre > < span class ="hljs-keyword "> if</ span > stackTop()
815822 [stackTag, stackIdx] = stackTop()
816- < span class ="hljs-keyword "> if</ span > (stackTag < span class ="hljs-keyword "> is</ span > < span class ="hljs-string "> '{'</ span > < span class ="hljs-keyword "> or</ span > stackTag < span class ="hljs-keyword "> is</ span > < span class ="hljs-string "> 'INDENT'</ span > < span class ="hljs-keyword "> and</ span > @tag(stackIdx - < span class ="hljs-number "> 1</ span > ) < span class ="hljs-keyword "> is</ span > < span class ="hljs-string "> '{'</ span > ) < span class ="hljs-keyword "> and</ span >
823+ stackNext = stack[stack.length - < span class ="hljs-number "> 2</ span > ]
824+ < span class ="hljs-keyword "> if</ span > (stackTag < span class ="hljs-keyword "> is</ span > < span class ="hljs-string "> '{'</ span > < span class ="hljs-keyword "> or</ span >
825+ stackTag < span class ="hljs-keyword "> is</ span > < span class ="hljs-string "> 'INDENT'</ span > < span class ="hljs-keyword "> and</ span > stackNext?[< span class ="hljs-number "> 0</ span > ] < span class ="hljs-keyword "> is</ span > < span class ="hljs-string "> '{'</ span > < span class ="hljs-keyword "> and</ span >
826+ < span class ="hljs-keyword "> not</ span > isImplicit(stackNext) < span class ="hljs-keyword "> and</ span >
827+ @findTagsBackwards(stackIdx< span class ="hljs-number "> -1</ span > , [< span class ="hljs-string "> '{'</ span > ])) < span class ="hljs-keyword "> and</ span >
817828 (startsLine < span class ="hljs-keyword "> or</ span > @tag(s - < span class ="hljs-number "> 1</ span > ) < span class ="hljs-keyword "> is</ span > < span class ="hljs-string "> ','</ span > < span class ="hljs-keyword "> or</ span > @tag(s - < span class ="hljs-number "> 1</ span > ) < span class ="hljs-keyword "> is</ span > < span class ="hljs-string "> '{'</ span > ) < span class ="hljs-keyword "> and</ span >
818829 @tag(s - < span class ="hljs-number "> 1</ span > ) < span class ="hljs-keyword "> not</ span > < span class ="hljs-keyword "> in</ span > UNFINISHED
819830 < span class ="hljs-keyword "> return</ span > forward(< span class ="hljs-number "> 1</ span > )
@@ -838,11 +849,13 @@ <h1>rewriter.coffee</h1>
838849.g b, < span class ="hljs-function "> -></ span >
839850 c
840851.h a
841- </ code > </ pre > < p > and also</ p >
852+ </ code > </ pre >
853+ < p > and also</ p >
842854< pre > < code > f a
843855.g b
844856.h a
845857</ code > </ pre >
858+
846859 </ div >
847860
848861 </ li >
@@ -963,9 +976,11 @@ <h1>rewriter.coffee</h1>
963976 a: b,
964977 c: d,
965978e = < span class ="hljs-number "> 2</ span >
966- </ code > </ pre > < p > and</ p >
979+ </ code > </ pre >
980+ < p > and</ p >
967981< pre > < code > f a, b: c, d: e, f, g: h: i, j
968982</ code > </ pre >
983+
969984 </ div >
970985
971986 < div class ="content "> < div class ='highlight '> < pre > < span class ="hljs-keyword "> if</ span > tag < span class ="hljs-keyword "> is</ span > < span class ="hljs-string "> ','</ span > < span class ="hljs-keyword "> and</ span > < span class ="hljs-keyword "> not</ span > @looksObjectish(i + < span class ="hljs-number "> 1</ span > ) < span class ="hljs-keyword "> and</ span > inImplicitObject() < span class ="hljs-keyword "> and</ span > < span class ="hljs-keyword "> not</ span > (@tag(i + < span class ="hljs-number "> 2</ span > ) < span class ="hljs-keyword "> in</ span > [< span class ="hljs-string "> 'FOROF'</ span > , < span class ="hljs-string "> 'FORIN'</ span > ]) < span class ="hljs-keyword "> and</ span >
0 commit comments