Domanda

Sono abituato ad avere il mio compilatore si lamenta quando faccio qualcosa di stupido come un errore di battitura su un nome di variabile, ma JavaScript ha l'abitudine di lasciare che questo passaggio.

Ci sono strumenti di analisi statica per JavaScript?

È stato utile?

Soluzione

Sono d'accordo che JSLint è il posto migliore per iniziare. Si noti che JavaScript Lint è distinta da JSLint . Vorrei anche suggerire di verificare JSure , che nel mio limitato di test ha fatto meglio di una di esse, anche se con alcune asperità nell'attuazione-la versione Intel Mac si è schiantato all'avvio per me, anche se la versione PowerPC ha funzionato bene anche su Intel, e la versione per Linux funzionato bene pure. (Lo sviluppatore, Berke Durak, ha detto che sarebbe tornare a me quando questo è stato risolto, ma non ho sentito da lui.)

Non aspettatevi tanto da un'analisi statica JavaScript come si ottiene da una buona pedina C. Come mi ha detto Durak, “qualsiasi analisi non banale è molto difficile a causa della natura dinamica di Javascript”.

(Un altro, ancora più oscuro solo per Mac bug, questa volta con il widget di Konfabulator di JSLint: trascina l'icona di un documento di BBEdit sul widget di sposta il documento nel cestino Lo sviluppatore, Douglas Crockford, non aveva provato il widget su una. Mac.)

10 Agosto 2009: Oggi al Static Analysis Symposium , Simon Holm Jensen ha presentato un documento su < a href = "http://www.brics.dk/TAJS/" rel = "noreferrer"> TAJS: Tipo Analyzer for JavaScript , scritto con Anders Møller e Peter Thiemann. Il documento non menziona gli strumenti di cui sopra, ma Jensen mi ha detto che aveva guardato alcuni di loro e non è stato colpito. Il codice per TAJS dovrebbe essere disponibile questa estate.

Altri suggerimenti

RISPOSTA AGGIORNATO, 2017: Sì. Utilizzare ESLint. http://eslint.org


Oltre a JSLint (già menzionato in risposta di Flash Sheridan) e il Chiusura compilatore (in precedenza accennato nella risposta di awhyte ) ho ho anche ottenuto un sacco di beneficiare di esecuzione JSHint e PHP CodeSniffer . A partire dal 2012, tutti e quattro gli strumenti sono libero e open-source e hanno una grande e attiva comunità di sviluppatori dietro di loro. Sono ciascuna un po 'diverso (e penso, complementare) nei tipi di controlli che svolgono:

JSLint è stato progettato per essere, ed è ancora strumento di rilascio di fibre personale di Douglas Crockford. Viene fornito con un grande di default insieme di regole - Crockford propria, costantemente aggiornati mentre continua ad imparare su JavaScript e le sue insidie. JSLint è altamente supponente e questo è generalmente visto come una buona cosa così c'è (volutamente) un quantità limitata si può fare per configurare o disattivare singole regole. Ma questo può rendere difficile l'applicazione JSLint al codice legacy.

JSHint è molto simile a JSLint (infatti ha cominciato la vita come JSLint fork), ma è più facile / possibile configurare o disattivare tutti i controlli di JSLint tramite le opzioni della riga di comando o tramite un file di href="https://npmjs.org/package/jshint" rel="nofollow noreferrer"> .jshintrc .

mi piace particolarmente che posso dire JSHint per segnalare tutti degli errori in un file, anche se ci sono centinaia di errori. Al contrario, anche se JSLint ha un'opzione di configurazione maxerr, sarà generalmente tirare fuori dai guai relativamente presto durante il tentativo di elaborare i file che contengono un gran numero di errori.

Il compilatore Chiusura è estremamente utile in quanto, se il codice non sarà compilare con chiusura, si può sentire molto certa detto codice è profondamente hosed in qualche modo fondamentale. compilazione di chiusura è forse la cosa più vicina che c'è nel mondo JS per un "interprete" controllo della sintassi, come php -l o ruby -c

avvisa della presenza di potenziali problemi quali parametri mancanti e non dichiarato o variabili ridefinito. Se non si è visto gli avvertimenti che ci si aspetta, provare ad aumentare il livello di allarme invocando Chiusura con un'opzione di --warning_level VERBOSE

PHP CodeSniffer può analizzare JavaScript così come PHP e CSS. navi CodeSniffer wesimo diversi standard di codifica diversi, (diciamo phpcs -i per vederli), che include molte annusa utili per il codice JavaScript compresi i controlli nei confronti di noreferrer strutture di controllo in linea e superfluo spazi .

Ecco un elenco di JavaScript annusa disponibili in PHP CodeSniffer a partire dalla versione 1.3 0,6 ed ecco un set di regole personalizzate che permetterebbe di eseguire tutti in una volta. Utilizzo di set di regole personalizzate, è facile raccogliere e scegliere le regole si desidera applicare. E si può anche scrivere i propri annusate se si desidera imporre un particolare "stile della casa" che non è supportata dalla scatola. Afaik CodeSniffer è l'unico strumento dei quattro menzionati qui che supporta la personalizzazione e la creazione di nuove regole di analisi statica. Un avvertimento però:. CodeSniffer è anche il più lento-funzionamento di uno qualsiasi degli strumenti menzionati

compilatore "chiusura" JS di Google produce avvisi configurabili ed errori a tempo di compilazione. Essa trova sicuramente variabili e metodi errori di ortografia, più errori arity. Se siete disposti a scrivere JsDoc il modo di chiusura, si può fare molto con informazioni sul tipo, anche.

Lo strumento YUI "Compressor" in grado di produrre gli avvertimenti troppo, ma non ho ancora provato.

Non ho avuto molta fortuna con l'Aptana IDE, costruito su Eclipse, ma altre persone come esso. Vedere Stack Overflow discussione di JS IDE.

L'IntelliJ IDE, che non è libero ultimo ho controllato, ha frickin' il supporto JS eccellente. E 'in grado di rilevare ed evidenziare Vars errate e metodi durante la digitazione, e altro ancora. E 'ottenuto di completamento automatico, anche.

In sintesi, JSLint, JSHint, Platone, ESLint, Google Chiusura-Linter sono gli strumenti a disposizione. Ho affrontato i problemi di installazione, mentre provando Google Chiusura-Linter per Windows. Ma, si fa menzione sulla pagina web che il suo supporto per Windows è sperimentale. Ho trovato e provato un altro strumento che funziona bene. Ecco il link per esso: http://esprima.org/

Inoltre, questo è il link GitHub per lo strumento Esprima: https://github.com/ariya/esprima

È possibile vedere alcuni strumenti per l'analisi statica del codice JavaScript in questo Wiki .

Uno strumento nel Wiki, ma non menzionato in questo post, è DeepScan . Il suo obiettivo è quello di trovare gli errori di runtime e problemi di qualità, piuttosto che codifica convenzioni di linters. Esso copre anche dattiloscritto, reagiscono e Vue.js.

Si può provare per il vostro progetto GitHub.

Ho provato ESlint e l'ho trovato good..you può anche aggiungere regole personalizzate there..Here è il repository GitHub: https://github.com/nzakas/eslint e qui è l'introduzione ad esso: http://www.nczonline.net/blog/2013/07/16/introducing-eslint/

Più sicurezza concentrata di lista di uso generale può essere trovato sulla Mozilla Wiki a Sicurezza / B2G / JavaScript codice analisi

  

Lo scopo di questo documento è quello di raccogliere l'analisi del codice JavaScript   strumenti idonei per l'inclusione nei prossimi progetti di Mozilla o per   uso interno.

Inoltre v'è almeno un prodotto commerciale che fa analisi di sicurezza: Burp ottiene nuove funzionalità di analisi JavaScript

  

L'ultima versione di Burp include un nuovo motore per l'analisi statica del codice JavaScript. Ciò consente Burp scanner di segnalare una serie di nuove vulnerabilità, tra cui:

     
      
  • DOM-based XSS
  •   
  • iniezione JavaScript
  •   
  • iniezione sul lato client SQL
  •   
  • WebSocket dirottamento
  •   
  • locale manipolazione percorso del file
  •   
  • reindirizzamento aperto DOM-based
  •   
  • manipolazione cookie
  •   
  • Ajax manipolazione richiesta di intestazione
  •   
  • denial DOM-based del servizio
  •   
  • manipolazione messaggio Web
  •   
  • manipolazione stoccaggio HTML5
  •   

Nel regno commerciale, Coverity Static Analysis supporta l'analisi di codice JavaScript a partire dalla versione 7.7 (metà del 2015). Per quanto riguarda la vostra richiesta specifica su errori di battitura, il mio progetto di pet che appare nella versione più recente (8.0, inizio 2016) fa trovare errori di battitura in nomi degli elementi del programma.

Come sviluppatore chiave del progetto, vi prego di accettare il mio spudorato: Anche se non ancora maturo come il venerata C / C ++ analisi , azioni di analisi JavaScript di Coverity gran parte lo stesso motore, con la stessa attenzione sulla ricerca di alta difetti valore con un basso tasso di falsi positivi rapporti difetto. Stiamo aumentando la nostra attenzione sulla ricerca di difetti di sicurezza in JavaScript (e altre lingue), oltre a trovare errori di programmazione generale.

Ora, qui ci sono alcuni errori di battitura che trova (esatto Typo lasciato come esercizio per il lettore, per sottolineare quanto facilmente questi possono essere trascurati):

merge.js: (ultima revisione)

comandi-pacchetti-query.js: (link stabile) (ultima revisione )

Serie-Pie-tests.js: (link stabile) (ultima revisione)

outline_case.js: (link stabile) (ultima revisione)

Mi piace JSLint per questo genere di cose ...

flusso fa l'analisi statica con e senza annotazioni.

Se avete bisogno di annotazioni, la sintassi è compatibile con dattiloscritto .

Installare il pacchetto rel="nofollow"> con:

npm install --global flow-bin

Ci sono anche alcuni utensili. Dai un'occhiata alla gulp-flowtype e, forse, SublimeLinter-flow

JSAnalyse è stato appena pubblicato su CodePlex. E 'uno strumento che analizza le dipendenze tra file javascript. È anche possibile definire le dipendenze consentiti e JSAnalysis verifica se le regole definite sono soddisfatte o meno. Ciò consente di tenere traccia sulle dipendenze javascript, anche in grandi progetti e hanno un'architettura pulita.

JSAnalyse può essere eseguito come uno strumento a riga di comando o configurato tramite Visual Studio strato Diagramm. E 'anche facile da integrare nella build. Con gated check-in è possibile mantenere le dipendenze sotto controllo.

http://jsanalyse.codeplex.com/

La nostra SD ECMAScript CloneDR è uno strumento per trovare esatta e vicino- perdere copie del codice duplicato attraverso grandi basi di codice sorgente JavaScript.

Si utilizza la sintassi del linguaggio per guidare la rilevazione, in modo da trovare i cloni nonostante cambi formato, inserite commenti / cancellati, rinominato variabili e anche qualche inserito / cancellato dichiarazioni.

Il sito ha una corsa del campione CloneDR sulla libreria di chiusura di Google.

L'informativa completa, sono alla base di questo: http://www.toptensoftware.com/minime che fa minification, offuscamento e una serie ragionevole di controlli stile pelucchi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top