2013-03-28 5 views
6

Ho un grande set di diversi javascript-snippet (diverse migliaia), e alcuni di loro hanno degli errori stupidi nella sintassi (come parentesi graffe/virgolette non corrispondenti, HTML all'interno di javascript, errori di battitura nella variabile nomi).Modo semplice per verificare/convalidare la sintassi javascript

Ho bisogno di un modo semplice per verificare la sintassi JS. Ho provato JSLint ma invia troppi avvisi su stile, modalità di definizione delle variabili, ecc. (Anche se spengo tutti i flag). Non ho bisogno di scoprire problemi di stile, o di migliorare la qualità javascript, ho solo bisogno di trovare ovvi errori di sintassi. Ovviamente posso semplicemente controllarlo nella console browser/browser, ma ho bisogno di farlo automaticamente poiché il numero di tali frammenti è grande.

Add:
JSLint/JSHint riporta un sacco di problemi nelle linee che non sono 'bellezza', ma di lavoro (cioè hanno alcune potenziali problemi), e non può vedere i reali problemi, dove il compilatore normale segnalerà semplicemente l'errore di sintassi e interromperà l'esecuzione. Ad esempio, provare a JSLint tale codice, che presenta errori di sintassi sulla riga 4 (virgolette non corrispondenti), riga 6 (virgola obbligatoria) e riga 9 (script) inaspettato <.

document.write('something'); 
a = 0; 
if (window.location == 'http://google.com') a = 1; 
document.write("aaa='andh"+a+"eded"'); 
a = { 
    something: ['a'] 
    something2: ['a'] 
}; 
<script> 
a = 1; 
+2

prova questo http: //www.javascriptlint.com/ –

+0

hmmm ... Grazie, ci proverò. Ho pensato che fosse un clone di JSLint, ma funziona in modo diverso. – mvf

risposta

1

Ho trovato che SpiderMonkey ha la capacità di compilare script senza eseguirlo, e se la compilazione fallisce - stampa un errore.

Così ho appena creato piccolo wrapper per SpiderMonkey

sub checkjs { 
    my $js = shift; 
    my ($js_fh, $js_tmpfile) = File::Temp::tempfile('XXXXXXXXXXXX', EXLOCK => 0, UNLINK => 1, TMPDIR => 1); 
    $| = 1; 
    print $js_fh $js; 
    close $js_fh; 
    return qx(js -C -f $js_tmpfile 2>&1); 
} 

E javascriptlint.com si occupa anche molto buono nel mio caso. (Grazie a @rajeshkakawat).

+0

Penso che il problema sia che non è interessato a compilarlo, necessariamente (fa SpiderMonkey [inserire i semi-colon] (http://inimino.org/~inimino/blog/javascript_semicolons), ad esempio? 't richiedono di dichiarare vars, giusto?), ma è interessato a trovare alcuni errori logici-sebbene-non-compilazione (come errori di battitura var), che JSLint è particolarmente bravo a catturare. – ruffin

+0

JSLint non è adatto per il controllo della sintassi, segnala alcuni piccoli problemi, ma non vede cose veramente brutte e pericolose. Prova questo: document.write ('qualcosa'); a = 0; if (window.location == 'http://google.com') a = 1; document.write ("aaa = 'andh" + a + "eded"'); a = { qualcosa: ['a'] something2: ['a'] };

2

Si potrebbe provare JSHint, che è meno prolissa.

+1

Sembra abbastanza simile a JSLint. – mvf

-1

Il formatter JavaScript di Semantic Designs (la mia azienda) legge i file JS e li formatta. Non vuoi la parte di formattazione.

Per leggere i file verrà formattato, utilizza un parser JavaScript completo, che esegue un controllo completo della sintassi (anche all'interno di espressioni regolari). Se lo si esegue e si ignora semplicemente il risultato formattato, si ottiene un controllo della sintassi.

Puoi dargli una grande lista di file e li formatterà tutti. Potresti usarlo per controllare in batch il tuo set più grande. (Se ci sono errori di sintassi, restituisce uno stato di errore diverso da zero in una shell).

+0

1) Ho dimenticato di dire. La piattaforma è Linux, gli strumenti freeware preferiti. 2) Il tuo sito pensa che esista solo una piattaforma, ed è difficile trovare le tue piste morbide su Windows – mvf

+0

1. Difficile fornire risposta ai requisiti che inizialmente non hai fornito. 2) Non così difficile, vedi Link alla pagina Acquista. 3) Discute del software in esecuzione con Wine su Linux, che funziona abbastanza bene. –

0

Un sacco di opzioni se si dispone di un elenco completo degli errori JSLint si do desidera acquisire.

Il codice di JSLint è in realtà abbastanza buono e abbastanza facile da comprendere (presumo che tu conosca già JavaScript abbastanza bene dalla tua domanda). Puoi hackerarlo per controllare solo ciò che vuoi e continuare, non importa quanti errori trova.

Si potrebbe anche scrivere rapidamente qualcosa in Node.js per utilizzare JSLint così com'è per controllare rapidamente ogni file/snippet e produrre solo quegli errori che ti interessano.

+0

vedere la mia aggiunta nel post iniziale. – mvf

1

Solo nel caso qualcuno sta ancora cercando si potrebbe provare Esprima,

Esso controlla solo la sintassi, nient'altro.