Para simplificar as regras de ponto e vírgula
Cada linha que começa com um (
, [
, `, ou qualquer operador (/, +, - são os únicos válidos), deve começar com um ponto e vírgula.
func()
;[0].concat(myarr).forEach(func)
;(myarr).forEach(func)
;`hello`.forEach(func)
;/hello/.exec(str)
;+0
;-0
Isso impede que um
func()[0].concat(myarr).forEach(func)(myarr).forEach(func)`hello`.forEach(func)/hello/.forEach(func)+0-0
monstruosidade.
Nota adicional
Para mencionar o que acontecerá: colchetes serão indexados, parênteses serão tratados como parâmetros de função. O backtick se transformaria em um modelo marcado e regex ou números inteiros assinados explicitamente se transformarão em operadores. Obviamente, você pode adicionar um ponto-e-vírgula ao final de cada linha. No entanto, é bom ter em mente quando você está fazendo prototipagem rápida e diminuindo seu ponto e vírgula.
Além disso, adicionar ponto-e-vírgula ao final de cada linha não ajudará no seguinte, portanto, lembre-se de declarações como
return // Will automatically insert semicolon, and return undefined.
(1+2);
i // Adds a semicolon
++ // But, if you really intended i++ here, your codebase needs help.
O caso acima retornará / continuará / interromperá / ++ / -. Qualquer linter irá capturar isso com código morto ou erro de sintaxe ++ / - (++ / - nunca acontecerá realisticamente).
Por fim, se você deseja que a concatenação de arquivos funcione, verifique se cada arquivo termina com um ponto e vírgula. Se você estiver usando um programa de empacotador (recomendado), ele deve fazer isso automaticamente.