Pergunta

Eu estou acostumado a ter meu compilador reclamar quando eu faço algo estúpido como um erro de digitação no nome de uma variável, mas JavaScript tem o hábito de deixar isso passar.

Existem algumas ferramentas de análise estática para JavaScript?

Foi útil?

Solução

Eu concordo que JSLint é o melhor lugar para começar. Note-se que JavaScript Lint é distinto do JSLint . Eu também sugiro que procure no JSure , que em meus testes limitados fez melhor do que qualquer um deles, embora com algumas arestas na implementação-a versão Intel Mac caiu no arranque para mim, embora o PowerPC fina versão correu mesmo em Intel, ea versão funcionou muito bem Linux também. (O desenvolvedor, Berke Durak, disse que ia voltar para mim quando este foi fixas, mas eu não tenho notícias dele.)

Não espere tanto de análise estática JavaScript como você começar a partir de um verificador bom C. Como Durak me disse, “qualquer análise não-trivial é muito difícil devido à natureza dinâmica do Javascript.”

(Outra, Mac-only bug ainda mais obscura, desta vez com Konfabulator de JSLint widget: Arrastando um ícone de documento BBEdit para o widget move o documento para o lixo O desenvolvedor, Douglas Crockford, não tinha tentado o widget em um. Mac).

10 Agosto 2009: Hoje, no estática Análise Simpósio , Simon Holm Jensen apresentou um documento sobre < a href = "http://www.brics.dk/TAJS/" rel = "noreferrer"> TAJS: Tipo Analyzer para JavaScript , escrito com Anders Møller e Peter Thiemann. O documento não menciona as ferramentas acima, mas Jensen me disse que tinha olhou para alguns deles e não ficou impressionado. O código para TAJS deve estar disponível em algum momento deste verão.

Outras dicas

RESPOSTA atualizado, de 2017: Sim. Use ESLint. http://eslint.org


Além JSLint (já mencionado no o flash Sheridan resposta ) eo Encerramento do compilador (anteriormente mencionado na de awhyte resposta ) tenho também ter começado uma série de benefícios de correr JSHint e PHP CodeSniffer . A partir de 2012, todas as quatro ferramentas são livre e de código aberto e ter uma grande e ativa comunidade de desenvolvedores por trás deles. Eles são cada um pouco diferente (e eu acho que, complementar) nos tipos de cheques que eles executam:

JSLint foi projetado para ser, e ainda é ferramenta linting pessoal de Douglas Crockford. Ele vem com um grande padrão conjunto de regras - de Crockford própria, constantemente atualizado como ele continua a aprender sobre JavaScript e suas armadilhas. JSLint é altamente opinativo e este é geralmente visto como uma coisa boa Assim, não é (intencionalmente) a quantidade limitada você pode fazer para configurar ou regras individuais com deficiência. Mas isso pode torná-lo difícil de aplicar JSLint ao código legado.

JSHint é muito semelhante ao JSLint (na verdade, começou vida como JSLint garfo) mas é mais fácil / possível configure ou desativar todos os cheques de JSLint através das opções de linha de comando ou através de uma .jshintrc arquivo .

Eu particularmente gosto que eu posso dizer JSHint o relatório todas dos erros em um arquivo, mesmo que haja centenas de erros. Por outro lado, embora JSLint tem uma opção de configuração maxerr, ele geralmente socorrer relativamente cedo ao tentar processar arquivos que contêm um grande número de erros.

O Encerramento do compilador é extremamente útil em que, se o código não compilação com fecho, você pode se sentir muito certo referido código é profundamente metralhado, de alguma forma fundamental. compilação Closure é possivelmente a coisa mais próxima que existe no mundo JS a um "intérprete" verificação de sintaxe como php -l ou ruby -c

O encerramento também avisa sobre possíveis problemas como parâmetros ausentes e não declaradas ou redefiniu variáveis. Se você não está vendo os avisos que você espera, tente aumentar o nível de aviso invocando Encerramento com uma opção de --warning_level VERBOSE

PHP CodeSniffer pode analisar JavaScript , bem como PHP e CSS. navios CodeSniffer wom padrões de codificação vários diferente, (digamos phpcs -i para vê-los), que incluem muitos cheira úteis para código JavaScript incluindo verificações contra estruturas de controle em linha e supérfluo espaços em branco .

Aqui é um de JavaScript fareja disponível no PHP CodeSniffer a partir da versão 1.3 .6 e aqui é um costume conjunto de regras que permitem que você executá-los todos de uma vez. Usando conjuntos de regras personalizadas, é fácil escolher e escolher as regras que deseja aplicar. E você ainda pode escrever seus próprios sniffs se você deseja impor um "estilo de casa" especial, que não é suportado fora da caixa. Afaik CodeSniffer é a única ferramenta das quatro mencionado aqui que suportes personalização e criação de novas regras de análise estática. Uma ressalva, porém: CodeSniffer é também o mais lento em execução de qualquer das ferramentas mencionadas

.

do Google "Encerramento" JS compilador produz avisos configuráveis ??e erros em tempo de compilação. Ele definitivamente encontra variáveis ??e métodos com erros ortográficos, além de erros arity. Se você está disposto a escrever JSDoc o caminho Encerramento, ele pode fazer muita coisa com informações de tipo, também.

O YUI "Compressor" ferramenta pode produzir avisos também, mas não tentei ainda.

Eu não tive muita sorte com o Aptana IDE, construída em Eclipse, mas outras pessoas como ele. discussão See Stack Overflow de IDEs JS.

O IntelliJ IDE, que não é livre última vez que verifiquei, tem Frickin excelente suporte JS. Ele irá detectar e destacar vars com erros ortográficos e métodos de medida que você digita, e muito mais. Ele tem autocomplete também.

Em resumo, JSLint, JSHint, Platão, ESLint, Google Closure-Linter são as ferramentas disponíveis. Eu enfrentei problemas de instalação ao tentar sair do Google Closure-Linter para Windows. Mas, ele não menciona na página web que o seu apoio para Windows é experimental. Eu encontrei e tentou mais uma ferramenta que funciona bem. Aqui está o link para ele: http://esprima.org/

Além disso, este é o link github para a ferramenta Esprima: https://github.com/ariya/esprima

Você pode ver algumas ferramentas para análise estática de código JavaScript nesta Wiki .

A ferramenta na Wiki, mas não mencionado neste post, é DeepScan . Seu foco é encontrar erros de execução e questões de qualidade em vez de convenções de codificação de linters. Abrange também typescript, reagir e Vue.js.

Você pode experimentá-lo para o seu projeto GitHub.

Eu tentei ESlint e achei good..you também pode adicionar regras personalizadas there..Here é o repo github: https://github.com/nzakas/eslint e aqui é a introdução a ele: http://www.nczonline.net/blog/2013/07/16/introducing-eslint/

Mais segurança focada do que a lista de propósito geral pode ser encontrada no Mozilla Wiki em Segurança / B2G / JavaScript análise de código

O objetivo deste documento é coletar análise de código JavaScript ferramentas adequadas para a inclusão nos próximos projetos Mozilla ou para o uso interno.

Além disso, há pelo menos um produto comercial que faz análise de segurança: Burp recebe novas capacidades de análise de JavaScript

A última versão do Burp inclui um novo motor para a análise estática de código JavaScript. Isso permite que Burp Scanner para relatar uma série de novas vulnerabilidades, incluindo:

  • DOM baseado em XSS
  • injeção de JavaScript
  • injeção de SQL do lado do cliente
  • WebSocket seqüestro
  • manipulação caminho de arquivo local
  • redirecionamento aberto, baseado em DOM
  • manipulação cookies
  • Ajax pedido cabeçalho manipulação
  • denial-base DOM do serviço
  • manipulação mensagem Web
  • manipulação de armazenamento HTML5

No domínio comercial, Coverity Análise estática suporta a análise de JavaScript a partir da versão 7.7 (meados de 2015). Em relação à sua pergunta específica sobre erros de digitação, meu projeto de estimação que aparece na versão mais recente (8.0, a partir de 2016) não encontrar erros em nomes de elementos do programa.

Como um desenvolvedor chave no projeto, por favor, aceite o meu plug descarado: Embora ainda não tão maduro quanto o venerado C / C ++ análise , as ações de análise de JavaScript do Coverity muito do mesmo motor, com o mesmo foco na busca de alta defeitos de valor com uma baixa taxa de relatórios de defeitos falsos positivos. Estamos aumentando nosso foco em encontrar defeitos de segurança em JavaScript (e outros idiomas), além de encontrar erros de programação em geral.

Agora, aqui estão alguns erros que encontrar (exata erro de digitação deixado como um exercício para o leitor, para enfatizar a facilidade com que estes podem ser esquecido):

merge.js: (ligação estável) (última revisão)

comandos de pacotes de query.js: (ligação estável) (última revisão )

série-Pie-tests.js: (ligação estável) (última revisão)

outline_case.js: (ligação estável) (última revisão)

Gosto JSLint para este tipo de coisa ...

Fluxo faz análise estática com e sem anotações.

Se precisar de anotações, a sintaxe é compatível com typescript .

Instale o pacote com:

npm install --global flow-bin

Há também algumas ferramentas. Ter um olhar para gole-flowtype e talvez SublimeLinter-fluir

JSAnalyse acaba de ser publicado no CodePlex. É uma ferramenta que analisa as dependências entre arquivos javascript. Você pode até mesmo definir as dependências autorizados e cheques JSAnalysis se as regras definidas são ou não cumpridos. Que permite manter o controle sobre as dependências javascript mesmo em grandes projetos e tem uma arquitetura limpa.

JSAnalyse pode ser executado como uma ferramenta de linha de comando ou configurado através do Estúdio Camada Visual Diagramm. Também é fácil de integrar na construção. Com check-ins fechados você pode manter as dependências sob controle.

http://jsanalyse.codeplex.com/

Nosso SD ECMAScript CloneDR é uma ferramenta para encontrar exata e quase- perder cópias de código duplicado em grandes bases de código fonte JavaScript.

Ele usa a sintaxe da linguagem para guiar a detecção, por isso vai encontrar clones, apesar das mudanças de formato, inserido / comentários apagados, variáveis ??renomeadas e até mesmo alguns inseridos declarações / excluída.

O site tem uma amostra CloneDR corrida na biblioteca de Encerramento do Google.

A divulgação completa, eu estou por trás disso: http://www.toptensoftware.com/minime que faz minification, ofuscação e um conjunto razoável de cheques estilo fiapos.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top