jqlint

static analysis of jQuery usage

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

jqlint

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.

Usage

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

Assumptions

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

Options

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