Prev: FAQ Entry Proposal: What is (function(){ /*...*/ })() ?
Next: FAQ Topic - What is Ajax? (2010-03-01)
From: lorlarz on 28 Feb 2010 11:52 Results of jQuery new production version and last production version on JSLint ( http://www.jslint.com/ ) 1.4.2 ,new jQuery production version (compared to the last 'production version', 1.3.2). The new one seems to have about 20% more errors _and_, more importantly, seems (to me) to have more serious errors. **I need more opinions.** I have a zip on my web site containing: jQuery 1.4.2 all on one line, comments left out jQuery 1.3.2 all on one line, comments left out The JSLint report on each (clearly labeled). This zip is at: http://mynichecomputing.org/JSLintCompare.zip . Download it an unzip and take a look. Frankly, I used to be unconcerned about the JSLint errors in 1.3.2 _but_ really do most certainly _not_ know whether it would be reasonable to be not concerned about some of the errors shown by 1.4.2 . Is it as bad as it looks? Is the credibility of the newest jQuery core production release on the line? Or, at least in part, should the credibility of JSLint be wondered about? John Resigs position: (quoting directly): "Doesn't worry me at all - we don't follow JSLint and it's obsessively strict style guidelines"
From: David Mark on 28 Feb 2010 17:03 lorlarz wrote: > Results of jQuery new production version and last production version > on JSLint > ( http://www.jslint.com/ ) > > 1.4.2 ,new jQuery production version (compared to the last 'production > version', 1.3.2). How can you release a production version of a script for Websites once a month? I can't understand how people can see that as sane. > The new one seems to have about > 20% more errors _and_, more importantly, seems (to me) to have more > serious errors. They've never been close on that. They really need to worry about their bogus _logic_ before the style. In contrast, the full build of My Library has 6 or 7 flagged lines in roughly 10,000 (and two of them are Function constructor is eval). :) > > **I need more opinions.** > > > I have a zip on my web site containing: > > jQuery 1.4.2 all on one line, comments left out > jQuery 1.3.2 all on one line, comments left out Don't bother running the minified versions through. That won't be productive. Use the full versions. > The JSLint report on each (clearly labeled). > > This zip is at: http://mynichecomputing.org/JSLintCompare.zip . > Download it an unzip and > take a look. > > Frankly, I used to be unconcerned about the JSLint errors in 1.3.2 > _but_ really do most certainly > _not_ know whether it would be reasonable to be not concerned about > some of the errors shown > by 1.4.2 . It indicates sloppiness and makes it impossible for them to use such a tool to catch obvious mistakes like typos (which is a definite concern). When I was rewriting Dojo, I ran every file through JSLint and found (and fixed) lots of typos, undeclared variables, etc. It's funny, because a few months later, there was a movement to un-declare _all_ of their globals as somebody had posted some meaningless numbers that seemed to indicate to them that Dojo would run _faster_ that way. They have a lint that runs on check-ins, but they all bypass it every time with a !strict directive. :( > > Is it as bad as it looks? Is the credibility of the newest jQuery core > production release > on the line? They never _had_ any credibility. And, as documented to death, their logic is largely bunk, so it would hardly matter if it were packaged as stylish code. > Or, at least in part, should the credibility of JSLint be > wondered about? No, JSLint may be overbearing (but is configurable of course), but it is quite credible. > > John Resigs position: (quoting directly): > "Doesn't worry me at all - we don't follow JSLint and it's obsessively > strict style guidelines" They don't follow anything but delusions. And I've noticed a correlation between bad coders and the misuse of its/it's. There seems to be a pattern there, but the data is not conclusive (kind of like the implied global/fast code theory). Try their raw version and see how that does. I predict it will be better, but still won't come close to finishing the verification process.
From: lorlarz on 28 Feb 2010 21:29 On Feb 28, 4:03 pm, David Mark <dmark.cins...(a)gmail.com> wrote: > lorlarz wrote: > > Results of jQuery new production version and last production version [snip] > Don't bother running the minified versions through. That won't be > productive. Use the full versions. > > > The JSLint report on each (clearly labeled). > > > This zip is at:http://mynichecomputing.org/JSLintCompare.zip. > > Download it an unzip and > > take a look. > > > Frankly, I used to be unconcerned about the JSLint errors in 1.3.2 > > _but_ really do most certainly > > _not_ know whether it would be reasonable to be not concerned about > > some of the errors shown > > by 1.4.2 . > > It indicates sloppiness and makes it impossible for them to use such a > tool to catch obvious mistakes like typos (which is a definite concern). > When I was rewriting Dojo, I ran every file through JSLint and found > (and fixed) lots of typos, undeclared variables, etc. It's funny, > because a few months later, there was a movement to un-declare _all_ of > their globals as somebody had posted some meaningless numbers that > seemed to indicate to them that Dojo would run _faster_ that way. They > have a lint that runs on check-ins, but they all bypass it every time > with a !strict directive. :( > > > > > Is it as bad as it looks? Is the credibility of the newest jQuery core > > production release > > on the line? > > They never _had_ any credibility. And, as documented to death, their > logic is largely bunk, so it would hardly matter if it were packaged as > stylish code. > > > Or, at least in part, should the credibility of JSLint be > > wondered about? > > No, JSLint may be overbearing (but is configurable of course), but it is > quite credible. > > > > > John Resigs position: (quoting directly): > > "Doesn't worry me at all - we don't follow JSLint and it's obsessively > > strict style guidelines" > > They don't follow anything but delusions. And I've noticed a > correlation between bad coders and the misuse of its/it's. There seems > to be a pattern there, but the data is not conclusive (kind of like the > implied global/fast code theory). > > Try their raw version and see how that does. I predict it will be > better, but still won't come close to finishing the verification process. When I send the non-minimized version through, only 41% gers scanned, though the 'errors' do look a lot more benign. I wish I could get the whole thing through. I have noticed a trend to. It's not certain but many JS programmers seem to be meaner than junk yard dog, whether they/it know their/its butt from a hole in the ground or not.
From: rf on 28 Feb 2010 21:49 "lorlarz" <lorlarz(a)gmail.com> wrote in message news:20592e13-21c3-4e14-86e4-fb9b3a2c51df(a)z11g2000yqz.googlegroups.com... On Feb 28, 4:03 pm, David Mark <dmark.cins...(a)gmail.com> wrote: > lorlarz wrote: > I have noticed a trend to. It's not certain but many JS programmers > seem to > be meaner than junk yard dog, whether they/it know their/its butt from > a hole > in the ground or not. Good luck getting your next question answered.
From: lorlarz on 28 Feb 2010 22:09
On Feb 28, 4:03 pm, David Mark <dmark.cins...(a)gmail.com> wrote: > lorlarz wrote: > > Results of jQuery new production version and last production version > > on JSLint > > (http://www.jslint.com/) [snip] > > Don't bother running the minified versions through. That won't be > productive. Use the full versions. > I commented out a couple of regular expression things JSLint could not stand and made what I saw as about a half dozen corrections AND was able to run all the non-minimized _WITH_ COMMENTS REMOVED jQuery 1.4.2 through JSLint and get a full report. Looks quite benigh (though there were the half dozen errors and a couple or regular expressions commented out). Here is the report AFTER those changes: Most, _though NOT all_ of the report, look benign AFTER all that: Error: Problem at line 1 character 20: Expected an identifier and instead saw 'undefined' (a reserved word). (function( window, undefined ) { Problem at line 13 character 48: Unescaped '-'. quickExpr = /^[^<]*(<[\w\W]+>)[^>]*$|^#([\w-]+)$/, Problem at line 33 character 20: 'hasOwnProperty' is a really bad name. hasOwnProperty = Object.prototype.hasOwnProperty, Problem at line 145 character 20: Use '===' to compare with 'null'. return num == null ? Problem at line 261 character 41: Use '!==' to compare with 'null'. if ( (options = arguments[ i ]) != null ) { Problem at line 356 character 48: Use '===' to compare with 'null'. toplevel = window.frameElement == null; Problem at line 488 character 20: Use '!==' to compare with 'null'. if ( array != null ) { Problem at line 489 character 31: Use '===' to compare with 'null'. if ( array.length == null || typeof array === "string" || jQuery.isFunctio... Problem at line 536 character 18: Confusing use of '!'. if ( !inv !== !callback( elems[ i ], i ) ) { Problem at line 536 character 18: Confusing use of '!'. if ( !inv !== !callback( elems[ i ], i ) ) { Problem at line 550 character 24: Use '!==' to compare with 'null'. if ( value != null ) { Problem at line 593 character 4: Mixed spaces and tabs. []; Problem at line 689 character 21: Missing '()' invoking a constructor. return (new Date).getTime(); Problem at line 753 character 13: 'e' is already defined. } catch(e) { Problem at line 1270 character 28: Expected an assignment or function call and instead saw an expression. parent.selectedIndex; Problem at line 1273 character 43: Expected an assignment or function call and instead saw an expression. parent.parentNode.selectedIndex; Problem at line 1362 character 55: 'eventHandle' is already defined. eventHandle = elemData.handle, eventHandle; Problem at line 1471 character 106: Missing semicolon. jQuery.map( namespaces.slice(0).sort(), fcleanup ).join("\\.(?:.*\ \.)?")... Problem at line 1495 character 25: 'j' is already defined. for ( var j = pos || 0; j < eventType.length; j++ ) { Problem at line 1500 character 34: Use '===' to compare with 'null'. if ( pos == null ) { Problem at line 1509 character 30: Use '!==' to compare with 'null'. if ( pos != null ) { Problem at line 1515 character 48: Use '!==' to compare with 'null'. if ( eventType.length === 0 || pos != null && eventType.length === 1 ) { Problem at line 1619 character 26: 'e' is already defined. } catch (e) {} Problem at line 1633 character 30: Bad assignment. event = arguments[0] = jQuery.event.fix( event || window.event ); Problem at line 1644 character 20: 'events' is already defined. var events = jQuery.data(this, "events"), handlers = events[ event.type ]; Problem at line 1644 character 60: 'handlers' is already defined. var events = jQuery.data(this, "events"), handlers = events[ event.type ]; Problem at line 1704 character 26: Use '===' to compare with 'null'. if ( event.pageX == null && event.clientX != null ) { Problem at line 1704 character 51: Use '!==' to compare with 'null'. if ( event.pageX == null && event.clientX != null ) { Problem at line 1955 character 19: Use '!==' to compare with 'null'. if ( data != null || val ) { Problem at line 2154 character 39: Use '!==' to compare with 'null'. while ( (type = types[ i++ ]) != null ) { Problem at line 2182 character 18: Don't make functions within a loop. }); Problem at line 2190 character 6: Missing semicolon. } Problem at line 2283 character 56: Unescaped '['. var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"] [^'"]*['"]... Problem at line 2283 character 81: Unescaped '['. var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"] [^'"]*['"]... Problem at line 2347 character 21: 'ret' is already defined. var ret = seed ? Problem at line 2367 character 26: Use '===' to compare with 'null'. if ( pop == null ) { Problem at line 2383 character 23: 'cur' used out of scope. Sizzle.error( cur || selector ); Problem at line 2390 character 42: Use '!==' to compare with 'null'. for ( var i = 0; checkSet[i] != null; i++ ) { Problem at line 2396 character 25: 'i' is already defined. for ( var i = 0; checkSet[i] != null; i++ ) { Problem at line 2396 character 42: Use '!==' to compare with 'null'. for ( var i = 0; checkSet[i] != null; i++ ) { Problem at line 2443 character 40: 'match' is already defined. var type = Expr.order[i], match; Problem at line 2452 character 26: Use '!==' to compare with 'null'. if ( set != null ) { Problem at line 2473 character 64: Use '!==' to compare with 'null'. if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) { Problem at line 2498 character 58: Use '!==' to compare with 'null'. for ( var i = 0; (item = curLoop[i]) != null; i++ ) { Problem at line 2503 character 51: Use '!==' to compare with 'null'. if ( inplace && found != null ) { Problem at line 2534 character 27: Use '===' to compare with 'null'. if ( anyFound == null ) { Problem at line 2554 character 35: Unescaped '-'. ID: /#((?:[\w\u00c0-\uFFFF-]|\\.)+)/, Problem at line 2555 character 39: Unescaped '-'. CLASS: /\.((?:[\w\u00c0-\uFFFF-]|\\.)+)/, Problem at line 2556 character 48: Unescaped '-'. NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF-]|\\.)+)['"]*\]/, Problem at line 2557 character 41: Unescaped '-'. ATTR: /\[\s*((?:[\w\u00c0-\uFFFF-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?) \3|)\s*... Problem at line 2558 character 38: Unescaped '-'. TAG: /^((?:[\w\u00c0-\uFFFF\*-]|\\.)+)/, Problem at line 2559 character 65: Unescaped '-'. CHILD: /:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/, Problem at line 2560 character 69: Unescaped '-'. POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/, Problem at line 2561 character 39: Unescaped '-'. PSEUDO: /:((?:[\w\u00c0-\uFFFF-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\ (\)]*)... Problem at line 2611 character 29: 'i' is already defined. for ( var i = 0, l = checkSet.length; i < l; i++ ) { Problem at line 2611 character 36: 'l' is already defined. for ( var i = 0, l = checkSet.length; i < l; i++ ) { Problem at line 2612 character 30: 'elem' is already defined. var elem = checkSet[i]; Problem at line 2633 character 61: 'nodeCheck' used out of scope. checkFn("parentNode", part, doneName, checkSet, nodeCheck, isXML); Problem at line 2643 character 66: 'nodeCheck' used out of scope. checkFn("previousSibling", part, doneName, checkSet, nodeCheck, isXML); Problem at line 2678 character 56: Use '!==' to compare with 'null'. for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) { Problem at line 2758 character 29: Expected an assignment or function call and instead saw an expression. elem.parentNode.selectedIndex; Problem at line 2771 character 20: Wrap the /regexp/ literal in parens to disambiguate the slash operator. return /h\d/i.test( elem.nodeName ); Problem at line 2801 character 20: Wrap the /regexp/ literal in parens to disambiguate the slash operator. return /input|select|textarea|button/i.test(elem.nodeName); Problem at line 2841 character 29: 'i' is already defined. for ( var i = 0, l = not.length; i < l; i++ ) { Problem at line 2865 character 32: Expected a 'break' statement before 'case'. node = elem; Problem at line 2915 character 34: Use '!==' to compare with 'null'. elem[ name ] != null ? Problem at line 2922 character 27: Use '===' to compare with 'null'. return result == null ? Problem at line 2958 character 6: Don't make functions within a loop. })); Problem at line 2973 character 77: Expected an assignment or function call and instead saw an expression. Array.prototype.slice.call( document.documentElement.childNodes, 0 ) [0].node... Problem at line 2987 character 29: 'i' is already defined. for ( var i = 0; array[i]; i++ ) { Problem at line 3070 character 34: Missing '()' invoking a constructor. id = "script" + (new Date).getTime(); Problem at line 3298 character 11: 'slice' is already defined. slice = Array.prototype.slice; Problem at line 3303 character 20: Confusing use of '!'. return !!qualifier.call( elem, i, elem ) === keep; Problem at line 3706 character 49: Use '!==' to compare with 'null'. for ( var i = 0, elem; (elem = this[i]) != null; i++ ) { Problem at line 3723 character 49: Use '!==' to compare with 'null'. for ( var i = 0, elem; (elem = this[i]) != null; i++ ) { Problem at line 3891 character 22: 'root' was used before it was defined. function root( elem, cur ) { Problem at line 3990 character 50: Use '!==' to compare with 'null'. for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) { Problem at line 4049 character 25: 'i' is already defined. for ( var i = 0; ret[i]; i++ ) { Problem at line 4070 character 50: Use '!==' to compare with 'null'. for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) { Problem at line 4175 character 13: Function statements cannot be placed in blocks. Use a function expression or move the statement to the top of the outer function. function getWH() { Problem at line 4281 character 24: 'name' is already defined. for ( var name in options ) { Problem at line 4385 character 24: Use '===' to compare with 'null'. return val == null ? Problem at line 4542 character 41: Bad operand. if ( s.global && ! jQuery.active++ ) { Problem at line 4694 character 17: 'e' is already defined. } catch(e) { } Problem at line 4706 character 17: 'e' is already defined. } catch(e) { Problem at line 4725 character 26: 'complete' was used before it was defined. function complete() { Problem at line 4739 character 25: 'trigger' is already defined. function trigger(type, args) { Problem at line 4828 character 29: 'buildParams' was used before it was defined. function buildParams( prefix, obj ) { Problem at line 4838 character 45: Use '!==' to compare with 'null'. } else if ( !traditional && obj != null && typeof obj === "object" ) { Problem at line 4856 character 19: Unescaped '-'. rfxnum = /^([+-]=)?([\d+-.]+)(.*)$/, Problem at line 4935 character 24: Use '===' to compare with 'null'. } else if ( fn == null || bool ) { Problem at line 4990 character 31: Use '!==' to compare with 'null'. if ( opt.overflow != null ) { Problem at line 5134 character 35: Use '!==' to compare with 'null'. if ( this.elem[this.prop] != null && (!this.elem.style || this.elem.style[t... Problem at line 5134 character 94: Use '===' to compare with 'null'. if ( this.elem[this.prop] != null && (!this.elem.style || this.elem.style[t... Problem at line 5195 character 43: Use '!==' to compare with 'null'. if ( this.options.display != null ) { Problem at line 5259 character 1: Mixed spaces and tabs. fast: 200, Problem at line 5260 character 1: Mixed spaces and tabs. _default: 400 Problem at line 5269 character 60: Use '!==' to compare with 'null'. if ( fx.elem.style && fx.elem.style[ fx.prop ] != null ) { Problem at line 5286 character 15: 'genFx' was used before it was defined. function genFx( type, num ) { Problem at line 5558 character 25: Use '===' to compare with 'null'. return size == null ? null : this; |