@@ -738,22 +738,28 @@ <h1>rewriter.coffee</h1>
738
738
< pre > < code > f
739
739
a: b
740
740
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
742
743
as the control structures below as that may misinterpret constructs like:</ p >
743
744
< pre > < code > < span class ="hljs-keyword "> if</ span > f
744
745
a: < span class ="hljs-number "> 1</ span >
745
- </ code > </ pre > < p > as</ p >
746
+ </ code > </ pre >
747
+ < p > as</ p >
746
748
< 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 >
750
753
751
754
</ div >
752
755
753
756
< 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 >
754
757
@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 >
755
758
< 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))
757
763
startImplicitCall i + < span class ="hljs-number "> 1</ span >
758
764
stack.push [< span class ="hljs-string "> 'INDENT'</ span > , i + < span class ="hljs-number "> 2</ span > ]
759
765
< span class ="hljs-keyword "> return</ span > forward(< span class ="hljs-number "> 3</ span > )</ pre > </ div > </ div >
@@ -807,13 +813,18 @@ <h1>rewriter.coffee</h1>
807
813
< div class ="sswrap ">
808
814
< a class ="ss " href ="#section-30 "> §</ a >
809
815
</ 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 >
811
818
812
819
</ div >
813
820
814
821
< div class ="content "> < div class ='highlight '> < pre > < span class ="hljs-keyword "> if</ span > stackTop()
815
822
[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 >
817
828
(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 >
818
829
@tag(s - < span class ="hljs-number "> 1</ span > ) < span class ="hljs-keyword "> not</ span > < span class ="hljs-keyword "> in</ span > UNFINISHED
819
830
< span class ="hljs-keyword "> return</ span > forward(< span class ="hljs-number "> 1</ span > )
@@ -838,11 +849,13 @@ <h1>rewriter.coffee</h1>
838
849
.g b, < span class ="hljs-function "> -></ span >
839
850
c
840
851
.h a
841
- </ code > </ pre > < p > and also</ p >
852
+ </ code > </ pre >
853
+ < p > and also</ p >
842
854
< pre > < code > f a
843
855
.g b
844
856
.h a
845
857
</ code > </ pre >
858
+
846
859
</ div >
847
860
848
861
</ li >
@@ -963,9 +976,11 @@ <h1>rewriter.coffee</h1>
963
976
a: b,
964
977
c: d,
965
978
e = < span class ="hljs-number "> 2</ span >
966
- </ code > </ pre > < p > and</ p >
979
+ </ code > </ pre >
980
+ < p > and</ p >
967
981
< pre > < code > f a, b: c, d: e, f, g: h: i, j
968
982
</ code > </ pre >
983
+
969
984
</ div >
970
985
971
986
< 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