jshint / fixmyjs

Automatically fix silly lint errors.
http://fixmyjs.com
Other
972 stars 78 forks source link

Error fixmyjs/lib/cli.js:136 #118

Closed lagden closed 10 years ago

lagden commented 10 years ago

Hi

I've got this error when I try run fixmyjs on code below:

fixmyjs -r codeBelow.js
/usr/local/lib/node_modules/fixmyjs/lib/cli.js:136
      throw ex
            ^
File: /Users/lagden/dev/js/support/codeBelow.js
Error: Unknown statement type: undefined
.
.
.

codeBelow.js

/*global define */
define(function() {

    'use strict';

    function numbers(c) {
        c = c.replace(/[^\d]/g, '').split('');
        for (var i = 0, len = c.length; i < len; i++)
            c[i] = parseInt(c[i], 10);
        return c;
    }

    function isCnpj(c) {

        var b = [6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2],
            i,
            n;

        c = numbers(c);

        if (c.length !== 14)
            return false;

        for (i = 0, n = 0; i < 12; n += c[i] * b[++i]);
        if (c[12] !== (((n %= 11) < 2) ? 0 : 11 - n))
            return false;

        for (i = 0, n = 0; i <= 12; n += c[i] * b[i++]);
        if (c[13] !== (((n %= 11) < 2) ? 0 : 11 - n))
            return false;

        return true;
    }

    function isCpf(c) {

        var s,
            n,
            i;

        c = numbers(c);

        if (c.length !== 11)
            return false;

        if (new RegExp("^" + c[0] + "{11}$").test(c.join('')))
            return false;

        for (s = 10, n = 0, i = 0; s >= 2; n += c[i++] * s--);
        if (c[9] !== (((n %= 11) < 2) ? 0 : 11 - n))
            return false;

        for (s = 11, n = 0, i = 0; s >= 2; n += c[i++] * s--);
        if (c[10] !== (((n %= 11) < 2) ? 0 : 11 - n))
            return false;

        return true;
    }

    function isCpfCnpj(v) {
        return isCnpj(v) || isCpf(v);
    }

    return isCpfCnpj;

});
lagden commented 10 years ago

I think this syntax is the problem

for (s = 10, n = 0, i = 0; s >= 2; n += c[i++] * s--);

lagden commented 10 years ago

I made a small script to confirm:

function xxx() {
    var c = [3,5,6,7,1,1,3,8,0,0,0,1,0,5],
        i, n,
        b = [6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2];

    for (i = 0, n = 0; i < 12; n += c[i] * b[++i]);

    console.log(n);
}

Tested on cli and online

Fail

goatslacker commented 10 years ago

Thanks, I think I see what's going on.