<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">-1 for code-maintainability.<div class="">i don’t see the benefits justifying the extra complexity and rules it adds to javascript style-guides and linters (and those who follow them).</div><div class=""><div class=""><div class=""><br class=""><div><blockquote type="cite" class=""><div class="">On Sep 26, 2017, at 3:27 AM, Alexander Jones <<a href="mailto:alex@weej.com" class="">alex@weej.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div class=""><div dir="auto" class="">IIFEs start with a (. Putting line breaks before certain expressions can help improve clarity. Your mind is made up but I have to protest. ASI *sucks*. And the extra cognitive overhead it causes is utterly pointless. If you don’t want to type them, why not program your editor to actually insert ; and a linebreak at the same time when you want to terminate a statement?</div><div dir="auto" class=""><br class=""></div><div dir="auto" class="">Many problems arise from parsing ambiguities — when writing code authors know exactly what they intend, why make future readers second guess?</div><br class=""><div class="gmail_quote"><div class="">On Fri, 15 Sep 2017 at 11:12, Reinis Ivanovs <<a href="mailto:dabas@untu.ms" class="">dabas@untu.ms</a>> wrote:<br class=""></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class=""><span style="font-size:12.8px" class="">The "some examples" of ASI problems might as well say "all", since there aren't more than the two listed cases worth mentioning, and even the `return` one is kind of contrived, because putting line breaks after `return` isn't usually a thing. It also doesn't follow that ASI would be a "bad idea"; remembering not to start lines with brackets or parens is easy (especially with a linter, which people should be using anyway), and the benefit is less visually noisy code and a bit less typing. The same can't be said for comma insertion, because commas aren't as noticable or often used as semicolons, and the syntax would have more 'gotchas' than with ASI, so it's just not worth it.</span></div><div class="gmail_extra"><br class=""><div class="gmail_quote">On Wed, Sep 13, 2017 at 6:22 PM, Boris Zbarsky <span class=""><<a href="mailto:bzbarsky@mit.edu" target="_blank" class="">bzbarsky@mit.edu</a>></span> wrote:<br class=""><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">On 9/13/17 9:57 AM, Naveen Chawla wrote:<br class="">
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
By this behaviour (a modification to the initial "complete statement produces comma" version of this proposal), everything would work perfectly, no?<br class="">
</blockquote>
<br class=""></span>
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".<span class=""><br class="">
<br class="">
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Great to hear those counter-examples as I don't know enough about ASI, <br class="">
</blockquote>
<br class=""></span>
Still in the context of ASI, here are some examples of why ASI is a bad idea:<br class="">
<br class="">
1) What does this return?<br class="">
<br class="">
  function f() {<br class="">
    return<br class="">
    5;<br class="">
  }<br class="">
<br class="">
2) What does this alert?<br class="">
<br class="">
  var str = "hello";<br class="">
  var x = str<br class="">
  [x].forEach(() => alert(x))<br class="">
<br class="">
Now back to automatic comma insertion... In your example:<span class=""><br class="">
<br class="">
  function doStuff(<br class="">
      x<br class="">
      y<br class="">
      z<br class="">
  ){<br class="">
  }<br class="">
<br class=""></span>
if someone changes doStuff to take an array as the second arg and you modify the call as:<span class=""><br class="">
<br class="">
  function doStuff(<br class="">
      x<br class="">
      [y]<br class="">
      z<br class="">
  ){<br class="">
  }<br class="">
<br class=""></span>
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:<br class="">
<br class="">
  function doStuff(<br class="">
      x<br class="">
      /* The next argument is an array for good reasons that we<br class="">
         will now expound on in a long comment, etc, etc */<br class="">
      [y]<br class="">
  ){<br class="">
  }<br class="">
<br class="">
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.<br class="">
<br class="">
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.<div class="m_-9170498064847779134HOEnZb"><div class="m_-9170498064847779134h5"><br class="">
<br class="">
-Boris<br class="">
_______________________________________________<br class="">
es-discuss mailing list<br class="">
<a href="mailto:es-discuss@mozilla.org" target="_blank" class="">es-discuss@mozilla.org</a><br class="">
<a href="https://mail.mozilla.org/listinfo/es-discuss" rel="noreferrer" target="_blank" class="">https://mail.mozilla.org/listinfo/es-discuss</a><br class="">
</div></div></blockquote></div><br class=""></div>
_______________________________________________<br class="">
es-discuss mailing list<br class="">
<a href="mailto:es-discuss@mozilla.org" target="_blank" class="">es-discuss@mozilla.org</a><br class="">
<a href="https://mail.mozilla.org/listinfo/es-discuss" rel="noreferrer" target="_blank" class="">https://mail.mozilla.org/listinfo/es-discuss</a><br class="">
</blockquote></div></div>
_______________________________________________<br class="">es-discuss mailing list<br class=""><a href="mailto:es-discuss@mozilla.org" class="">es-discuss@mozilla.org</a><br class="">https://mail.mozilla.org/listinfo/es-discuss<br class=""></div></blockquote></div><br class=""></div></div></div></body></html>