Make comma at the end of line optional

Boris Zbarsky bzbarsky at mit.edu
Wed Sep 13 15:22:40 UTC 2017


On 9/13/17 9:57 AM, Naveen Chawla wrote:
> By this behaviour (a modification to the initial "complete statement 
> produces comma" version of this proposal), everything would work 
> perfectly, no?

If by "perfectly" you mean "have hard-to-predict somewhat nonlocal 
behavior that makes any code relying on this a hard-to-read footgun", 
then the answer might be "yes".  For pretty much any other definition of 
"perfectly", I'm fairly sure the answer is "no".

> Great to hear those counter-examples as I don't know enough about ASI, 

Still in the context of ASI, here are some examples of why ASI is a bad 
idea:

1) What does this return?

   function f() {
     return
     5;
   }

2) What does this alert?

   var str = "hello";
   var x = str
   [x].forEach(() => alert(x))

Now back to automatic comma insertion... In your example:

   function doStuff(
       x
       y
       z
   ){
   }

if someone changes doStuff to take an array as the second arg and you 
modify the call as:

   function doStuff(
       x
       [y]
       z
   ){
   }

suddenly you need to insert a comma after the "x" to preserve the right 
semantics, no?  This is not terribly intuitive or obvious.  It gets even 
worse in a situation like this:

   function doStuff(
       x
       /* The next argument is an array for good reasons that we
          will now expound on in a long comment, etc, etc */
       [y]
   ){
   }

Quick, tell me without testing this or looking at the spec for a while 
whether this is a valid call to doStuff, with one argument, or a syntax 
error that would trigger comma insertion.

But more generally, if you just use your favorite search engine on the 
phrase "automatic semicolon insertion", you will get a slew of articles 
explaining the pitfalls.

-Boris


More information about the es-discuss mailing list