static analysis of jQuery usage

npm install jqlint
11 downloads in the last week
23 downloads in the last month


JSLint but for jQuery! This is primarily to support my strict jQuery ideals, and may hurt your feelings. :P

This is a static analysis tool, just like JSLint. It is not yet intended to be used as a runtime analysis tool in the browser, but I wouldn't say no to such a Pull Request.


var jqlint;
jqlint = require('jqlint');

// example code to lint
var code;
code = '$("#id").find(".class").attr("attr", "value");'

var report;
report = jqlint(code);
// report.errors will be an Array of errors found, just like the JSLint report


These will hopefully be reduced over time as jqlint gains sophistication.

  • jQuery is available in any scope as jQuery or $

  • any identifier (e.g. variable or property name) that begins or ends with $ is a cached jQuery selector e.g. $button, input$, etc


The only way to set options currently is to use block comments in your code, like JSLint. For example: /*jslint angular:true*/

angular (default: false)

  • if true: identifiers beginning with $ will not be treated like cached jQuery selectors (e.g. $scope)

Detected Errors

This list will continue to grow.

jqlint currently detects:

  • use of features deprecated in jQuery 1.3: jQuery.browser, jQuery.boxModel

  • use of features deprecated in jQuery 1.7: .die(), .live(), .selector, jQuery.sub()

  • use of features superseded in jQuery 1.7: .bind(), .unbind(), .delegate(), .undelegate()

  • use of features deprecated in jQuery 1.8: .andSelf(), .error(), .load(), .unload(), .size(), .toggle()

  • use of features deprecated in jQuery 1.8: .context

  • use of features designed only for jQuery-internal use: jQuery.support

  • deferred = $.Deferred() in constructor form without new keyword

npm loves you