filimonov
filimonov

Reputation: 1734

Simple way to check/validate javascript syntax

I have some big set of different javascript-snippets (several thousands), and some of them have some stupid errors in syntax (like unmatching braces/quotes, HTML inside javascript, typos in variable names).

I need a simple way to check JS syntax. I've tried JSLint but it send too many warnings about style, way of variable definitions, etc. (even if i turn off all flags). I don't need to find out style problems, or improve javascript quality, i just need to find obvious syntax errors. Of course i can simply check it in browser/browser console, but i need to do it automatically as the number of that snippets is big.

Add:
JSLint/JSHint reports a lot of problems in the lines that are not 'beauty' but working (i.e. have some potential problems), and can't see the real problems, where the normal compiler will simply report syntax error and stop execution. For example, try to JSLint that code, which has syntax errors on line 4 (unmatched quotes), line 6 (comma required), and line 9 (unexpected <script>).

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;

Upvotes: 8

Views: 17568

Answers (6)

jjmerelo
jjmerelo

Reputation: 23507

Just use node --check filename

Upvotes: 0

Kevin Whitefoot
Kevin Whitefoot

Reputation: 442

Just in case anyone is still looking you could try Esprima,

It only checks syntax, nothing else.

Upvotes: 2

filimonov
filimonov

Reputation: 1734

I've found that SpiderMonkey has ability to compile script without executing it, and if compilation failed - it prints error.

So i just created small wrapper for 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);
}

And javascriptlint.com also deals very good in my case. (Thanks to @rajeshkakawat).

Upvotes: 1

ruffin
ruffin

Reputation: 17453

Lots of options if you have an exhaustive list of the JSLint errors you do want to capture.

JSLint's code is actually quite good and fairly easy to understand (I'm assuming you already know JavaScript fairly well from your question). You could hack it to only check what you want and to continue no matter how many errors it finds.

You could also write something quickly in Node.js to use JSLint as-is to check every file/snippet quickly and output only those errors you care about.

Upvotes: 0

Ira Baxter
Ira Baxter

Reputation: 95334

Semantic Designs' (my company) JavaScript formatter read JS files and formats them. You don't want the formatting part.

To read the files it will format, it uses a full JavaScript parser, which does a complete syntax check (even inside regular expressions). If you run it and simply ignore the formatted result, you get a syntax checker.

You can give it big list of files and it will format all of them. You could use this to batch-check your large set. (If there are any syntax errors, it returns a nonzero error status to a shell).

Upvotes: -1

Piet van Dongen
Piet van Dongen

Reputation: 1639

You could try JSHint, which is less verbose.

Upvotes: 2

Related Questions