The logic was there but didn't work in practice because, just
like this code does itself, code doesn't usually end in ';'.
Instead it ends in ";\n" (trailing line break at end of file),
or even two line breaks (in case of concatenated scripts where
ResourceLoaderFileModule adds another line break).
This saves off a few bytes that were uselessly added in the
load.php output, like:
...
}( jQuery ) );
;
/**
...
After this:
}( jQuery ) );
/**
The logic to add ;\n is still there, but the logic to not add it
when there already wasn't working (added in I3e8227ddb).
Change-Id: Ie055b37b3419ac6dca6349daf745bc48850fff3e
$scripts = $module->getScriptURLsForDebug( $context );
} else {
$scripts = $module->getScript( $context );
- if ( is_string( $scripts ) && strlen( $scripts ) && substr( $scripts, -1 ) !== ';' ) {
- // bug 27054: Append semicolon to prevent weird bugs
- // caused by files not terminating their statements right
+ // rtrim() because there are usually a few line breaks after the last ';'.
+ // A new line at EOF, a new line added by ResourceLoaderFileModule::readScriptFiles, etc.
+ if ( is_string( $scripts ) && strlen( $scripts ) && substr( rtrim( $scripts ), -1 ) !== ';' ) {
+ // Append semicolon to prevent weird bugs caused by files not
+ // terminating their statements right (bug 27054)
$scripts .= ";\n";
}
}