From 2b539572a038ccc05399bb2b70d42e145e7104d3 Mon Sep 17 00:00:00 2001 From: Jeremy Ashkenas Date: Mon, 18 Oct 2010 21:05:48 -0400 Subject: [PATCH] Passing JavaScriptLint. Added 'rake lint' task. --- Rakefile | 7 ++++++- backbone.js | 5 ++++- docs/jsl.conf | 44 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 54 insertions(+), 2 deletions(-) create mode 100644 docs/jsl.conf diff --git a/Rakefile b/Rakefile index d5c2b96b8..2b2223791 100644 --- a/Rakefile +++ b/Rakefile @@ -9,5 +9,10 @@ end desc "build the docco documentation" task :doc do - system "docco backbone.js" + system "docco backbone.js" +end + +desc "run JavaScriptLint on the source" +task :lint do + system "jsl -nofilelisting -nologo -conf docs/jsl.conf -process backbone.js" end \ No newline at end of file diff --git a/backbone.js b/backbone.js index 6017888ee..c0217e3e8 100644 --- a/backbone.js +++ b/backbone.js @@ -256,7 +256,9 @@ // view need to be updated and/or what attributes need to be persisted to // the server. changedAttributes : function(now) { - var old = this._previousAttributes, now = now || this.attributes, changed = false; + now || (now = this.attributes); + var old = this._previousAttributes; + var changed = false; for (var attr in now) { if (!_.isEqual(old[attr], now[attr])) { changed = changed || {}; @@ -458,6 +460,7 @@ break; case 'error': this.trigger('error', model, error); + break; } } diff --git a/docs/jsl.conf b/docs/jsl.conf new file mode 100644 index 000000000..fb41a617a --- /dev/null +++ b/docs/jsl.conf @@ -0,0 +1,44 @@ +# JavaScriptLint configuration file for CoffeeScript. + ++no_return_value # function {0} does not always return a value ++duplicate_formal # duplicate formal argument {0} +-equal_as_assign # test for equality (==) mistyped as assignment (=)?{0} ++var_hides_arg # variable {0} hides argument ++redeclared_var # redeclaration of {0} {1} +-anon_no_return_value # anonymous function does not always return a value ++missing_semicolon # missing semicolon ++meaningless_block # meaningless block; curly braces have no impact +-comma_separated_stmts # multiple statements separated by commas (use semicolons?) ++unreachable_code # unreachable code ++missing_break # missing break statement ++missing_break_for_last_case # missing break statement for last case in switch +-comparison_type_conv # comparisons against null, 0, true, false, or an empty string allowing implicit type conversion (use === or !==) +-inc_dec_within_stmt # increment (++) and decrement (--) operators used as part of greater statement ++useless_void # use of the void type may be unnecessary (void is always undefined) ++multiple_plus_minus # unknown order of operations for successive plus (e.g. x+++y) or minus (e.g. x---y) signs ++use_of_label # use of label +-block_without_braces # block statement without curly braces ++leading_decimal_point # leading decimal point may indicate a number or an object member ++trailing_decimal_point # trailing decimal point may indicate a number or an object member ++octal_number # leading zeros make an octal number ++nested_comment # nested comment ++misplaced_regex # regular expressions should be preceded by a left parenthesis, assignment, colon, or comma ++ambiguous_newline # unexpected end of line; it is ambiguous whether these lines are part of the same statement ++empty_statement # empty statement or extra semicolon +-missing_option_explicit # the "option explicit" control comment is missing ++partial_option_explicit # the "option explicit" control comment, if used, must be in the first script tag ++dup_option_explicit # duplicate "option explicit" control comment ++useless_assign # useless assignment ++ambiguous_nested_stmt # block statements containing block statements should use curly braces to resolve ambiguity ++ambiguous_else_stmt # the else statement could be matched with one of multiple if statements (use curly braces to indicate intent) +-missing_default_case # missing default case in switch statement ++duplicate_case_in_switch # duplicate case in switch statements ++default_not_at_end # the default case is not at the end of the switch statement ++legacy_cc_not_understood # couldn't understand control comment using /*@keyword@*/ syntax ++jsl_cc_not_understood # couldn't understand control comment using /*jsl:keyword*/ syntax ++useless_comparison # useless comparison; comparing identical expressions ++with_statement # with statement hides undeclared variables; use temporary variable instead ++trailing_comma_in_array # extra comma is not recommended in array initializers ++assign_to_function_call # assignment to a function call ++parseint_missing_radix # parseInt missing radix parameter ++lambda_assign_requires_semicolon