Validador de sintaxe JavaScript
Descubra se o código compila e, quando não compila, entenda o erro em português e veja a linha provável do problema. O código é só compilado, nunca executado.
Código
Resultado
O que a ferramenta faz
Ela entrega o código ao analisador do próprio navegador, o mesmo que roda suas páginas, e pergunta só uma coisa: isso é JavaScript com sintaxe válida? A função criada nessa checagem é descartada sem ser chamada, e a ferramenta não usa eval. Portanto o código colado não é executado: um alert, um laço infinito ou uma chamada de rede dentro dele não acontecem.
Como usar
- Cole o código no campo.
- Clique em Validar. Se a sintaxe estiver correta, a ferramenta avisa.
- Se houver erro, leia a explicação em português, a mensagem original do navegador e a linha provável.
- Corrija e valide de novo. Se o código usa import, export ou await no topo do arquivo, marque o modo módulo.
Como a linha do erro é estimada
O navegador costuma dizer o que deu errado, mas não onde. Para estimar a linha, a ferramenta testa prefixos do código: compila as primeiras linhas, depois mais linhas, e por bisseção encontra a primeira linha em que o código passa a ter um erro que nenhum fechamento simples resolveria. Por isso o resultado é aproximado. Ele mostra onde o analisador tropeça, e a causa verdadeira pode estar numa linha anterior, como um parêntese não fechado. A ferramenta também mostra a linha anterior e, quando acha, uma pista sobre chave, parêntese ou aspas sem par.
Exemplo com resultado
No exemplo carregado pelo botão, a linha 6 é console.log(soma(lista[0], lista[1]);, com um parêntese a menos. O navegador responde missing ) after argument list. A ferramenta explica que falta fechar a lista de argumentos de uma chamada, aponta a linha 6 como provável e sugere olhar o fim da chamada. Ao acrescentar o parêntese que falta, o resultado passa a ser sintaxe válida.
Mensagens traduzidas
Cobrem os casos mais comuns do Chrome e de navegadores com o mesmo motor: token inesperado, fim inesperado do código, caractere inválido ou string não fechada, falta de parêntese, const sem valor, nome declarado duas vezes, await fora de função async, regex inválida, atribuição inválida e outras. Em Firefox e Safari as mensagens têm outro texto, e a tradução cobre só parte delas. Mensagens sem tradução aparecem como vieram, com um aviso.
Limites e o que a ferramenta não faz
- Não faz lint nem checa tipos: nome de variável inexistente, código que nunca roda e erro de lógica passam como válidos. Erros em tempo de execução só aparecem rodando o código, e isso a ferramenta nunca faz.
- Módulos ES não são aceitos como script. O modo módulo troca as linhas import e export por espaços e checa o resto como corpo de função assíncrona; isso é uma aproximação e pode errar em casos incomuns, como a palavra import no começo de uma linha dentro de uma string de várias linhas.
- O código é checado como corpo de função. Por isso um return fora de função é aceito, o que um script completo não permitiria.
- A checagem depende do navegador. Se uma política de segurança do navegador bloquear a compilação de texto, a ferramenta avisa em vez de dar um resultado.
- Limite de 300 mil caracteres por validação. TypeScript e JSX não são JavaScript e aparecem como erro.
Perguntas frequentes
Meu código é enviado a algum servidor ou executado?
Não. Ele fica no navegador e só é compilado. A função resultante é descartada sem ser chamada.
A linha indicada está errada, o que fazer?
Olhe a linha anterior e confira o balanceamento de parênteses, chaves, colchetes e aspas acima dela. A estimativa aponta onde o erro se torna evidente, que nem sempre é onde foi cometido.
Por que um código válido no meu projeto aparece como inválido aqui?
Provavelmente usa import, export, await no topo do arquivo, TypeScript ou JSX. Ative o modo módulo para os dois primeiros casos. Para os outros, compile com a ferramenta do próprio projeto.