Há alguma ferramenta de análise estática JavaScript? [fechado]

Estou habituado a ter o meu compilador a queixar-se quando faço algo estúpido como uma gralha num nome variável, mas o JavaScript tem o hábito de deixar passar isto.

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

Author: mido, 2009-02-11

13 answers

Concordo que o JSLint é o melhor sítio para começar. Note que o Lint JavaScript é distinto de JSLint . Eu também sugiro conferir JSure, que no meu teste limitado fez melhor do que qualquer um deles, embora com algumas arestas na implementação-a Intel Mac versão falhou na inicialização para mim, embora a versão PowerPC correu bem, mesmo em Intel, e a versão do Linux executava bem assim. (O desenvolvedor, Berke Durak, disse que voltaria para mim quando isto foi arranjado, mas não tive notícias dele.)

Não esperes tanto da análise estática do JavaScript como de um bom verificador de C. Como Durak me disse, " Qualquer análise não trivial é muito difícil devido à natureza dinâmica de Javascript."

(Outro erro ainda mais obscuro apenas para o Mac, desta vez com o elemento Konfabulator do JSLint: se arrastar um ícone de Documento do BBEdit para o elemento, move o documento para o lixo. O Construtor, Douglas Crockford, não tinha experimentado o widget num Mac.)

10 August 2009: Today at the Static Analysis Symposium , Simon Holm Jensen presented a paper on TAJS: Type Analyzer for JavaScript, written with Anders Møller and Peter Thiemann. O jornal não menciona as ferramentas acima, mas o Jensen disse-me que tinha olhado para algumas delas e não ficou impressionado. O código para TAJS deve estar disponível em algum momento deste verão.
 45
Author: Flash Sheridan, 2011-12-14 04:54:47
Resposta actualizada, 2017: Sim. Usa O ESLint. http://eslint.org

Além de JSLint (já mencionado no Flash Sheridan a resposta) e Encerramento do compilador (anteriormente mencionado em awhyte a resposta) eu também conseguiram um lote de se beneficiar da execução JSHint e PHP CodeSniffer. A partir de 2012, todas as quatro ferramentas são de código aberto gratuito e têm uma grande e ativa comunidade de desenvolvedores por trás deles. Cada um deles é um pouco diferente (e eu acho, complementar) nos tipos de verificações que realizam:

JSLint foi projetado para ser, e ainda é a ferramenta de revestimento pessoal de Douglas Crockford. Ele é fornecido com um grande conjunto de regras padrão -- Crockford próprio, constantemente atualizado como ele continua a aprender sobre JavaScript e suas armadilhas. JSLint é muito opinativo e isto é geralmente visto como uma coisa boa.Então há (intencionalmente) a quantidade limitada que pode fazer para configurar ou desactivar as regras individuais. Mas isso pode tornar difícil aplicar o JSLint ao código legado.

JSHint é muito semelhante ao JSLint (na verdade ele começou a vida como JSLint garfo), mas é mais simples possível para configurar ou desativar todos JSLint verifica através de opções de linha de comando ou através de um .jshintrc arquivo.

Eu particularmente gosto de dizer ao JSHint para relatar todos os erros de um arquivo, até mesmo se houver centenas de erros. Por outro lado, embora o JSLint tenha uma opção de configuração maxerr, ele geralmente sai relativamente cedo ao tentar processar arquivos que contêm um grande número de erros.

O compilador de fechamento é extremamente útil na medida em que, se o código não for compilar com fechamento, você pode sentir que o código é profundamente fechado de alguma forma fundamental. Compilação de encerramento é possivelmente a coisa mais próxima que há em o mundo JS para uma verificação de sintaxe "intérprete" como php -l ou ruby -c

O encerramento também avisa sobre questões potenciais tais como parâmetros em falta e variáveis não declaradas ou redefinidas. Se você não está vendo os avisos que você espera, tente aumentar o nível de aviso, invocando o encerramento com uma opção de --warning_level VERBOSE

PHP CodeSniffer pode processar JavaScript assim como PHP e CSS. Navios CodeSniffer com vários padrões de codificação diferentes, (say phpcs -i para ver eles) que incluem muitos farejamentos úteis para o código JavaScript, incluindo verificações contra estruturas de controlo inline e espaços em branco supérfluos .

Aqui está uma lista de farejadores de JavaScript disponíveis no CodeSniffer PHP a partir da versão 1.3.6 e aqui está um conjunto de regras personalizadas que lhe permitiria executá-las todas de uma vez. usando conjuntos de regras personalizados, é fácil escolher e escolher as regras que deseja aplicar. E até podes escrever a tua própria fareja {[[9]} Se quiser impor um "estilo de casa" particular que não é suportado fora da caixa. Afaik CodeSniffer é a única ferramenta dos quatro mencionados aqui que suporta customização e criação de novas regras de análise estática. Uma ressalva: CodeSniffer também é a execução mais lenta de qualquer uma das ferramentas mencionadas.

 57
Author: Noah Sussman, 2017-07-24 15:45:31

O compilador "Closure" js do Google produz avisos e erros configuráveis no tempo de compilação. Ele definitivamente encontra variáveis e métodos mal escritos, mais erros de aridade. Se você está disposto a escrever JsDoc a maneira de fechar, ele pode fazer muito com informações tipo, também.

A ferramenta "Compressor" de YUI também pode produzir avisos, mas ainda não a experimentei. Não tive muita sorte com a Aptana IDE, construída sobre o Eclipse, mas outras pessoas gostam. Ver O Estouro Da Pilha discussão de JS IDEs.

A IDE Intelij, que não é gratuita da última vez que verifiquei, tem um excelente suporte de JS. Ele irá detectar e destacar vars e métodos mal escritos à medida que você digita, e muito mais. Também tem autocomplete.

 20
Author: awhyte, 2010-02-08 07:51:37
Em resumo, JSLint, JSHint, Plato, ESLint, Google Closure-Lint são as ferramentas disponíveis. Eu enfrentei problemas de instalação ao experimentar o Google Closure-Linter Para Windows. Mas, ele menciona na página web que seu suporte para Windows é experimental. Encontrei e tentei outra ferramenta que funciona bem. Aqui está o link para ele: http://esprima.org/ Além disso, este é o link do github para a ferramenta Esprima: https://github.com/ariya/esprima
 11
Author: user_19, 2013-09-08 16:28:33
Tentei o ESlint e achei-o bom..você também pode adicionar regras personalizadas lá..Aqui está o github repo: https://github.com/nzakas/eslint e aqui está a introdução: http://www.nczonline.net/blog/2013/07/16/introducing-eslint/
 6
Author: learner_19, 2013-09-08 16:01:50

Você pode ver algumas ferramentas para a análise de código estático JavaScript neste Wiki .

Uma ferramenta no Wiki, mas não mencionada neste post, é DeepScan . Seu foco é encontrar erros de tempo de execução e problemas de qualidade, em vez de codificar Convenções de linters. Cobre também dactilografar, reagir e Vue.js.

Podes experimentá-lo para o teu projecto GitHub.
 6
Author: Kangho Kim, 2018-08-27 12:30:42

Mais segurança focada do que a lista de objectivos gerais pode ser encontrada no Mozilla Wiki at Security/B2G/JavaScript code analysis

O objectivo deste documento é recolher a análise de código JavaScript ferramentas adequadas para incluir nos próximos projectos Mozilla ou para uso interno.

Também há pelo menos um produto comercial que faz a análise de segurança: O Burp obtém novas capacidades de análise JavaScript

O mais recente o lançamento do Burp inclui um novo motor para análise estática do código JavaScript. Isto permite ao Burp Scanner relatar uma série de novas vulnerabilidades, incluindo:

  • XSS à base de DOM
  • Injecção de JavaScript
  • injecção SQL do lado do cliente
  • sequestro de WebSocket
  • manipulação Local da localização dos Ficheiros
  • redireccionamento aberto baseado em DOM
  • Manipulação de bolachas
  • Ajax request header manipulation
  • Negação baseada no DOM de Serviço
  • manipulação de mensagens Web
  • Manipulação de armazenamento HTML5
 4
Author: Kevin Hakanson, 2014-11-03 15:58:28
No domínio comercial, análise estática da cobertura suporta a análise de JavaScript a partir da versão 7.7 (meados de 2015). Em relação à sua investigação específica sobre erros de Digitação, o meu projecto de estimação que aparece na última versão (8.0, início de 2016) encontra erros de Digitação em nomes de elementos do programa.

Como programador chave do projecto, aceite por favor o meu 'plugin' sem vergonha: embora ainda não esteja tão maduro como a análise de C/C++ venerada, a análise de JavaScript do Coverity compartilha muito do mesmo motor, com o mesmo foco em encontrar defeitos de alto 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 outras linguagens), além de encontrar erros de programação gerais.

Agora, Aqui estão alguns erros que ele encontra (erro exato deixado como um exercício para o leitor, para enfatizar a facilidade com que estes podem ser negligenciados):

Juntar.js: (ligação estável) (mais recente revisão)

Comandos-pacotes-consulta.js: (ligação estável) (Última Revisão)

Série-testes pie.js: (ligação estável) (Última Revisão)

Outline_case.js: (ligação estável) (Última Revisão)

 4
Author: Peter Dillinger, 2016-01-14 17:35:44
Gosto do Jslint para este tipo de coisas...
 3
Author: Ishmael, 2009-02-10 22:49:41

O Flow {[4] } faz análises estáticas 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. Dê uma olhada em gulp-flowtype e talvez SublimeLinter-flow
 3
Author: Richard Ayotte, 2015-05-01 20:45:55

A JSAnalyse acaba de ser publicada no codeplex. É uma ferramenta que analisa as dependências entre arquivos javascript. Você pode até mesmo definir as dependências Permitidas e jsanalysis verifica se as regras definidas são cumpridas ou não. Isso permite manter o controle sobre as dependências de javascript mesmo em grandes projetos e ter uma arquitetura limpa.

O JSAnalyse pode ser executado como uma ferramenta da linha de comandos ou configurado através do Visual Studio Layer Diagramm. Também é fácil integrar para a construção. Com o check-ins fechado você pode manter as dependências sob controle.

Http://jsanalyse.codeplex.com/

 2
Author: tstune, 2011-11-29 21:12:05

O Nosso SD ECMAScript CloneDR é uma ferramenta para encontrar cópias exactas e quase inexistentes de código duplicado através de grandes bases de código fonte JavaScript.

Ele usa a sintaxe da linguagem para guiar a detecção, então ele vai encontrar clones, apesar de mudanças de formato, comentários inseridos/apagados, variáveis renomeadas e até algumas declarações inseridas/apagadas.

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

 1
Author: Ira Baxter, 2010-08-06 08:19:58

Revelação completa, estou por trás disto: http://www.toptensoftware.com/minime que faz minificação, ofuscação e um conjunto razoável de verificações em estilo de fibra.

 0
Author: Brad Robinson, 2010-08-25 14:24:21