consider adding more "[no LineTerminator here]" to avoid problemcaused by omit the semicolon

Claus Reinke claus.reinke at
Fri Jun 22 06:40:10 PDT 2012

> var a = this.a  //!!!! here no semicolon will be auto inserted
> [1,2,3].forEach(function(){
>    // do something
> })

Consider{..}) // no semicolon wanted here

> (function(){
>     //do something
> })()  //!!!! here no semicolon will be auto inserted
> (function(){
>     //do something else
> })()


    curried_async_function(..first argument set..) // no semicolon wanted 
        (function(result){..}) // callback argument

Unfortunately, while ASI creates obvious problems, those do
not seem to have obvious solutions. Not to mention that any
actual changes to ASI might break existing code.

My own favourite approach would link ASI to layout/indentation,
and introduce warnings instead of breaking code:

1 if ASI kicks in, but indentation suggests statement continuation,
    issue a warning
2 if ASI does not kick in, but indentation suggests new statement,
    issue a warning

Item 2 would cover your examples, without breaking mine,
while item 1 would cover another popular ASI trap:

    return // no semicolon intended here

while still allowing for

    return    // semicolon intended here


More information about the es-discuss mailing list