Skip to main content

Notice: this Wiki will be going read only early in 2024 and edits will no longer be possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.

Jump to: navigation, search

Difference between revisions of "Orion/ESLint"

(Rules)
(Rules)
Line 5: Line 5:
  
 
Rules that are currently available are <del>struck out</del>.
 
Rules that are currently available are <del>struck out</del>.
 +
 +
=== Potential Programming Problems ===
 +
These rules report about problems with your code that might have undesired or incorrect results. Warnings from these
 +
rules should be addressed.
  
 
{| class="wikitable" border="1" cellpadding="5" cellspacing="0" style="width: 100%;"
 
{| class="wikitable" border="1" cellpadding="5" cellspacing="0" style="width: 100%;"
Line 13: Line 17:
 
! style="background:#efefef;" width=40% | Details
 
! style="background:#efefef;" width=40% | Details
 
|-
 
|-
 
!| [https://bugs.eclipse.org/bugs/show_bug.cgi?id=428433 block-scoped-var]
 
| Error
 
| -
 
| '''{variable}' is already defined.''
 
|
 
* Occurs when a function-scoped variable is treated as if it was block scoped.
 
* ESLint calls this error '{variable} used outside of binding context.'
 
|-
 
 
!| brace-style
 
| Ignore
 
| -
 
| &nbsp;
 
| &nbsp;
 
|-
 
 
!| camelcase
 
| Ignore
 
| -
 
| &nbsp;
 
| &nbsp;
 
|-
 
 
!| complexity
 
| Ignore
 
|  -
 
| &nbsp;
 
| &nbsp;
 
|-
 
 
!| consistent-this
 
| Ignore
 
|  -
 
| &nbsp;
 
| &nbsp;
 
|-
 
 
!| <del>[https://bugs.eclipse.org/bugs/show_bug.cgi?id=429722 curly]</del>
 
| Ignore
 
| 6.0
 
| ''Statements should be enclosed in braces.''
 
| &nbsp;
 
|-
 
 
!| dot-notation
 
| Warning
 
| -
 
| ''{a} is better written in dot notation.''
 
| &nbsp;
 
|-
 
 
!| <del>[https://bugs.eclipse.org/bugs/show_bug.cgi?id=414779 eqeqeq]</del>
 
| Warning
 
| 5.0
 
|
 
* ''Expected '===' and saw '=='.''
 
* ''Expected '!==' and saw '!='.''
 
| &nbsp;
 
|-
 
 
!| guard-for-in
 
| Ignore
 
| -
 
| ''The body of a <code>for in</code> should be wrapped in an <code>if</code> statement to filter unwanted properties from the prototype.''
 
| &nbsp;
 
|-
 
 
!| max-depth
 
| Ignore
 
| -
 
| &nbsp;
 
| Enforces max depth of nested blocks within a function.
 
|-
 
 
!| max-len
 
| Ignore
 
| -
 
| ''Line is too long.''
 
| Enforces a maximum line length.
 
|-
 
 
!| max-params
 
| Ignore
 
| -
 
| &nbsp;
 
| &nbsp;
 
|-
 
 
!| max-statements
 
| Ignore
 
| -
 
| &nbsp;
 
| &nbsp;
 
|-
 
 
!| <del>[https://bugs.eclipse.org/bugs/show_bug.cgi?id=424128 missing-doc]</del>
 
| Ignore
 
| 5.0
 
| "Missing documentation for function '{name}.'"
 
| Flags missing documentation nodes on function declarations and function expressions when they appear as object properties
 
|-
 
 
!| [https://bugs.eclipse.org/bugs/show_bug.cgi?id=424204 missing-doc-items]
 
| Ignore
 
| -
 
|&nbsp;
 
| Flags missing documentation for parameters, returns, throws, etc on function declarations and function expressions when they appear as object properties
 
|-
 
 
!| [https://bugs.eclipse.org/bugs/show_bug.cgi?id=428429 missing-nls]
 
| Ignore
 
| -
 
| &nbsp;
 
| Flags String literals that are not properly NLS'd
 
|-
 
 
!| new-cap
 
| Warning
 
| -
 
| ''A constructor name should start with an uppercase letter.''
 
| &nbsp;
 
|-
 
 
!| <del>[https://bugs.eclipse.org/bugs/show_bug.cgi?id=429801 new-parens]</del>
 
| Error
 
| 6.0
 
| ''Missing parentheses invoking constructor.''
 
| Flags <code>new Whatever</code>
 
|-
 
 
!| no-alert
 
| Ignore
 
| -
 
| '''{alert, confirm, prompt}' is not defined.''
 
| &nbsp;
 
|-
 
 
!| no-bitwise
 
| Warning
 
| -
 
| ''Unexpected use of '{operator}'.''
 
| JSLint disallows bitwise ops by default.
 
|-
 
 
!| <del>no-caller</del>
 
| Error
 
| -
 
| ''arguments.{callee, caller} is deprecated.''
 
| Flags references to <code>arguments.callee</code> and <code>arguments.caller</code>.
 
|-
 
 
!| no-catch-shadow
 
| Warning
 
| -
 
| '''{a}' is already defined.''
 
|
 
* Flags a <code>catch</code> clause's variable that shadows a variable declared in an upper scope. (In IE8 this [http://weblog.bocoup.com/the-catch-with-try-catch/ causes the upper variable to be overwritten]).
 
|-
 
 
 
!| <del>[https://bugs.eclipse.org/bugs/show_bug.cgi?id=455253 no-comma-dangle]</del>
 
!| <del>[https://bugs.eclipse.org/bugs/show_bug.cgi?id=455253 no-comma-dangle]</del>
 
| Ignore
 
| Ignore
Line 179: Line 23:
 
| Flags trailing commas in object expressions.
 
| Flags trailing commas in object expressions.
 
|-
 
|-
 
 
!| <del>[https://bugs.eclipse.org/bugs/show_bug.cgi?id=455250 no-cond-assign]</del>
 
!| <del>[https://bugs.eclipse.org/bugs/show_bug.cgi?id=455250 no-cond-assign]</del>
 
| Error
 
| Error
Line 186: Line 29:
 
| Flags assignment in an <code>if/while/do..while/for</code> condition.
 
| Flags assignment in an <code>if/while/do..while/for</code> condition.
 
|-
 
|-
 
 
!| <del>[https://bugs.eclipse.org/bugs/show_bug.cgi?id=455371 no-console]</del>
 
!| <del>[https://bugs.eclipse.org/bugs/show_bug.cgi?id=455371 no-console]</del>
 
| Error
 
| Error
Line 193: Line 35:
 
| Flags the use of console in browser-based code
 
| Flags the use of console in browser-based code
 
|-
 
|-
 
 
!| <del>[https://bugs.eclipse.org/bugs/show_bug.cgi?id=455680 no-constant-condition]</del>
 
!| <del>[https://bugs.eclipse.org/bugs/show_bug.cgi?id=455680 no-constant-condition]</del>
 
| Error
 
| Error
Line 200: Line 41:
 
| Flags the use of a constant as a conditional expression
 
| Flags the use of a constant as a conditional expression
 
|-
 
|-
 
!| no-control-regex
 
| Ignore
 
| -
 
| &nbsp;
 
| Flags control characters (U+0000–U+001F and U+007F) within the source argument to the RegExp constructor.
 
|-
 
 
 
!| <del>[https://bugs.eclipse.org/bugs/show_bug.cgi?id=429690 no-debugger]</del>
 
!| <del>[https://bugs.eclipse.org/bugs/show_bug.cgi?id=429690 no-debugger]</del>
 
| Warning
 
| Warning
Line 214: Line 47:
 
| &nbsp;
 
| &nbsp;
 
|-
 
|-
 
!| no-delete-var
 
| Warning
 
| -
 
| ''Deleting a local variable is discouraged.''
 
| Flags an attempt to <code>delete</code> a local variable.
 
|-
 
 
!| no-div-regex
 
| Warning
 
| -
 
| ''A regular expression literal can be confused with '/='.''
 
| Flags a regex literal starting with <code>/=</code>
 
|-
 
 
 
!| <del>[https://bugs.eclipse.org/bugs/show_bug.cgi?id=428430 no-dupe-keys]</del>
 
!| <del>[https://bugs.eclipse.org/bugs/show_bug.cgi?id=428430 no-dupe-keys]</del>
 
| Error
 
| Error
Line 235: Line 53:
 
| Flags object literals that contain the same key more than once.
 
| Flags object literals that contain the same key more than once.
 
|-
 
|-
 
+
!| <del>[https://bugs.eclipse.org/bugs/show_bug.cgi?id=439366 no-empty-block]</del>
!| no-else-return
+
 
| Warning
 
| Warning
| -
+
| 7.0
 
| &nbsp;
 
| &nbsp;
| Flags an <code>else</code> appearing after an <code>if</code> that contains a <code>return</code>.
+
| Flags an empty block like <code>if (something) { }</code>.
 
|-
 
|-
 
+
!| <del>[https://bugs.eclipse.org/bugs/show_bug.cgi?id=428040 no-extra-semi]</del>
!| no-empty-class
+
 
| Warning
 
| Warning
| -
+
| 5.0
| ''Empty class.''
+
| ''Unnecessary semicolon.''
| Flags an empty character class <code>[]</code> within a regular expression.
+
| &nbsp;
 
|-
 
|-
 
+
!| <del>[https://bugs.eclipse.org/bugs/show_bug.cgi?id=455391 no-regex-spaces]</del>
!| no-empty-label
+
| Error
 +
| 8.0
 +
| Avoid using multiple spaces in regular expressions. Use ' {${0}}' instead.
 +
| Flags regular expressions that have two or more subsequent spaces.
 +
|-
 +
!| <del>[https://bugs.eclipse.org/bugs/show_bug.cgi?id=455354 no-reserved-keys]</del>
 +
| Error
 +
| 8.0
 +
| ''Reserved words should not be used as property keys.''
 +
| Checks to see if a JavaScript reserved word is being used as a property key
 +
|-
 +
!| <del>[https://bugs.eclipse.org/bugs/show_bug.cgi?id=426723 no-sparse-arrays]</del>
 
| Warning
 
| Warning
| -
+
| 8.0
| ''Label '{a}' is not allowed on this statement.''
+
| ''Sparse array declarations should de avoided.''
| Flags a labeled statement that is not a <code>switch</code>, <code>for</code>, or <code>while</code>.
+
| Flags sparse arrays with null elements
 
|-
 
|-
 
+
!| <del>[https://bugs.eclipse.org/bugs/show_bug.cgi?id=436986 no-unreachable]</del>
!| <del>no-empty</del>
+
| Error
| Warning
+
 
| -
 
| -
 +
| ''Unreachable code.''
 +
| Flags statements that occur after a <code>return</code>, <code>throw</code>, etc.
 +
|-
 +
!| <del>[https://bugs.eclipse.org/bugs/show_bug.cgi?id=429711 use-isnan]</del>
 +
| Error
 +
| 6.0
 +
| ''Use the isNaN function to compare with NaN.''
 
| &nbsp;
 
| &nbsp;
| Flags an empty block like <code>if (something) { }</code>.
 
 
|-
 
|-
 +
|}
  
!| no-eq-null
+
=== Best Practices ===
 +
These rules are not necessarily problem with your code, but are warnings that you might be doing something
 +
you probably should not be.
 +
 
 +
{| class="wikitable" border="1" cellpadding="5" cellspacing="0" style="width: 100%;"
 +
! style="background:#efefef;" width=5% | Rule
 +
! style="background:#efefef;" width=5% | Default Severity
 +
! style="background:#efefef;" width=5% | Available Since
 +
! style="background:#efefef;" width=40%| Problem Message
 +
! style="background:#efefef;" width=40% | Details
 +
|-
 +
 
 +
!| [https://bugs.eclipse.org/bugs/show_bug.cgi?id=428433 block-scoped-var]
 
| Error
 
| Error
 
| -
 
| -
| ''Use '===' to compare with 'null'.''
+
| '''{variable}' is already defined.''
| &nbsp;
+
|
 +
* Occurs when a function-scoped variable is treated as if it was block scoped.
 +
* ESLint calls this error '{variable} used outside of binding context.'
 
|-
 
|-
  
!| <del>[https://bugs.eclipse.org/bugs/show_bug.cgi?id=429702 no-eval]</del>
+
!| <del>[https://bugs.eclipse.org/bugs/show_bug.cgi?id=429722 curly]</del>
 
| Ignore
 
| Ignore
 
| 6.0
 
| 6.0
| '''eval' function calls are discouraged.''
+
| ''Statements should be enclosed in braces.''
 
| &nbsp;
 
| &nbsp;
 
|-
 
|-
 
+
!| <del>[https://bugs.eclipse.org/bugs/show_bug.cgi?id=414779 eqeqeq]</del>
!| no-ex-assign
+
 
| Warning
 
| Warning
| -
+
| 5.0
| ''Do not assign to the exception parameter.''
+
|
 +
* ''Expected '===' and saw '=='.''
 +
* ''Expected '!==' and saw '!='.''
 
| &nbsp;
 
| &nbsp;
 
|-
 
|-
 
+
!| <del>[https://bugs.eclipse.org/bugs/show_bug.cgi?id=424128 missing-doc]</del>
!| <del>[https://bugs.eclipse.org/bugs/show_bug.cgi?id=428040 no-extra-semi]</del>
+
| Ignore
| Warning
+
 
| 5.0
 
| 5.0
| ''Unnecessary semicolon.''
+
| "Missing documentation for function '{name}.'"
| &nbsp;
+
| Flags missing documentation nodes on function declarations and function expressions when they appear as object properties
 
|-
 
|-
 
+
!| [https://bugs.eclipse.org/bugs/show_bug.cgi?id=424204 missing-doc-items]
!| no-extra-strict
+
| Ignore
| Warning
+
 
| -
 
| -
 +
|&nbsp;
 +
| Flags missing documentation for parameters, returns, throws, etc on function declarations and function expressions when they appear as object properties
 +
|-
 +
!| <del>[https://bugs.eclipse.org/bugs/show_bug.cgi?id=460976 no-caller]</del>
 +
| Error
 +
| 9.0
 +
| ''arguments.{callee, caller} is deprecated.''
 +
| Flags references to <code>arguments.callee</code> and <code>arguments.caller</code>.
 +
|-
 +
!| <del>[https://bugs.eclipse.org/bugs/show_bug.cgi?id=429702 no-eval]</del>
 +
| Ignore
 +
| 6.0
 +
| '''eval' function calls are discouraged.''
 
| &nbsp;
 
| &nbsp;
| Flags <code>"use strict"</code> on a function when the entire Program is already in strict mode.
 
 
|-
 
|-
 
 
!| <del>[https://bugs.eclipse.org/bugs/show_bug.cgi?id=429815 no-fallthrough]</del>
 
!| <del>[https://bugs.eclipse.org/bugs/show_bug.cgi?id=429815 no-fallthrough]</del>
 
| Error
 
| Error
Line 305: Line 162:
 
| Flags a fallthrough case within a <code>switch</code> statement, unless it is explicitly commented.
 
| Flags a fallthrough case within a <code>switch</code> statement, unless it is explicitly commented.
 
|-
 
|-
 
!| no-floating-decimal
 
| Warning
 
| -
 
| ''A {leading, trailing} decimal point can be confused with a dot: '{n}'.''
 
| Flags numeric literals that have a leading or trailing decimal point.
 
|-
 
 
!| no-func-assign
 
| Warning
 
| -
 
| &nbsp;
 
| Flags assignment to a variable that's already bound to a <code>FunctionExpression</code>.
 
|-
 
 
!| no-global-strict
 
| Warning
 
| -
 
| &nbsp;
 
| Flags <code>"use strict"</code> applied to the entire Program.
 
|-
 
 
 
!| <del>[https://bugs.eclipse.org/bugs/show_bug.cgi?id=429707 no-implied-eval]</del>
 
!| <del>[https://bugs.eclipse.org/bugs/show_bug.cgi?id=429707 no-implied-eval]</del>
 
| Ignore
 
| Ignore
Line 333: Line 168:
 
| Flags calls to the string-argument form of <code>setTimeout</code> and <code>setInterval</code>, which implicitly perform <code>eval</code>. This rule logic was merged to be part of the <b>no-eval</b> rule.
 
| Flags calls to the string-argument form of <code>setTimeout</code> and <code>setInterval</code>, which implicitly perform <code>eval</code>. This rule logic was merged to be part of the <b>no-eval</b> rule.
 
|-
 
|-
 
 
!| <del>[https://bugs.eclipse.org/bugs/show_bug.cgi?id=455643 no-iterator]</del>
 
!| <del>[https://bugs.eclipse.org/bugs/show_bug.cgi?id=455643 no-iterator]</del>
 
| Error
 
| Error
Line 340: Line 174:
 
| Flags use of __iterator__ as an identifier name or property key.
 
| Flags use of __iterator__ as an identifier name or property key.
 
|-
 
|-
 
!| no-label-var
 
| Error
 
| -
 
| '''{label}' is already defined.''
 
| Flags labels that collide with an identifier.
 
|-
 
 
!| no-loop-func
 
| Error
 
| -
 
| ''Don't make functions within a loop.''
 
| &nbsp;
 
|-
 
 
!| no-mixed-requires
 
| Ignore
 
| -
 
| &nbsp;
 
| Flags Node.js <code>require()</code>s that mix different types of requires (core, module, file, computed).
 
|-
 
 
!| [https://bugs.eclipse.org/bugs/show_bug.cgi?id=425200 no-mixed-returns]
 
| Error
 
| -
 
| &nbsp;
 
| Flags functions that return more than one kind of item, for example returning String and Object
 
|-
 
 
!| no-multi-str
 
| Warning
 
| -
 
| &nbsp;
 
| Flags use of ES5 multiline string literals.
 
|-
 
 
!| no-native-reassign
 
| Warning
 
| -
 
|
 
* ''Read only.''
 
* ''Bad assignment.'' (if assigning to <code>undefined</code>)
 
| Flags an attempt to reassign a native object like <code>Math</code>, Array, <code>undefined</code>, etc.
 
|-
 
 
!| no-negated-in-lhs
 
| Warning
 
| -
 
| &nbsp;
 
|
 
* Flags a unary <code>!</code> operator applied to the LHS of an in statement, which negates the LHS, not the <code>in</code>.
 
* Eg. <code>(!"key" in {key: 1})</code> (which always evaluates to false), will be flagged.
 
|-
 
 
 
!| <del>[https://bugs.eclipse.org/bugs/show_bug.cgi?id=429817 no-new-array]</del>
 
!| <del>[https://bugs.eclipse.org/bugs/show_bug.cgi?id=429817 no-new-array]</del>
 
| Warning
 
| Warning
| -
+
| 6.0
 
| ''Use the array literal notation [].''
 
| ''Use the array literal notation [].''
 
| Flags <code>new Array()</code>.
 
| Flags <code>new Array()</code>.
 
|-
 
|-
 
 
!| <del>[https://bugs.eclipse.org/bugs/show_bug.cgi?id=429817 no-new-func]</del>
 
!| <del>[https://bugs.eclipse.org/bugs/show_bug.cgi?id=429817 no-new-func]</del>
 
| Warning
 
| Warning
| -
+
| 6.0
 
| ''The Function constructor is eval.''
 
| ''The Function constructor is eval.''
 
| Flags <code>new Function()</code>.
 
| Flags <code>new Function()</code>.
 
|-
 
|-
 
 
!| <del>[https://bugs.eclipse.org/bugs/show_bug.cgi?id=429817 no-new-object]</del>
 
!| <del>[https://bugs.eclipse.org/bugs/show_bug.cgi?id=429817 no-new-object]</del>
 
| Warning
 
| Warning
| -
+
| 6.0
 
| ''Use the object literal notation {}.''
 
| ''Use the object literal notation {}.''
 
| Flags <code>new Object()</code>.
 
| Flags <code>new Object()</code>.
 
|-
 
|-
 
 
!| <del>[https://bugs.eclipse.org/bugs/show_bug.cgi?id=429817 no-new-wrappers]</del>
 
!| <del>[https://bugs.eclipse.org/bugs/show_bug.cgi?id=429817 no-new-wrappers]</del>
 
| Warning
 
| Warning
| -
+
| 6.0
 
| ''Do not use {String, Number, Boolean, Math, JSON} as a constructor.''
 
| ''Do not use {String, Number, Boolean, Math, JSON} as a constructor.''
 
| Flags <code>new</code> applied to any of those.
 
| Flags <code>new</code> applied to any of those.
 
|-
 
|-
 
+
!| [https://bugs.eclipse.org/bugs/show_bug.cgi?id=461848 no-proto]
!| no-new
+
| Error
+
| -
+
| ''Do not use 'new' for side effects.''
+
| Flags uses of <code>new</code> operator in an expression that is not assigned to anything.
+
|-
+
 
+
!| no-obj-calls
+
| Warning
+
| -
+
| ''Math is not a function..''
+
|
+
* Flags attempts to call object properties of the global object (<code>Math</code>, <code>JSON</code>) as a function, like <code>Math()</code>.
+
|-
+
 
+
!| no-octal-escape
+
| Warning
+
| -
+
| ''Bad escapement.''
+
| Flags octal escapes in strings, for example <code>var x = "Copyright \251";</code>
+
|-
+
 
+
!| no-octal
+
| Warning
+
| -
+
| ''Don't use extra leading zeros '{n}'.''
+
| Flags number literals that begin with leading 0s, which indicate a (probably accidental) octal literal.
+
|-
+
 
+
!| no-plusplus
+
| Warning
+
| -
+
|
+
* ''Unexpected use of '++'''
+
* ''Unexpected use of '--'''
+
| &nbsp;
+
|-
+
 
+
!| no-proto
+
 
| Error
 
| Error
 
| -
 
| -
Line 468: Line 206:
 
| &nbsp;
 
| &nbsp;
 
|-
 
|-
 
 
!| <del>[https://bugs.eclipse.org/bugs/show_bug.cgi?id=414779 no-redeclare]</del>
 
!| <del>[https://bugs.eclipse.org/bugs/show_bug.cgi?id=414779 no-redeclare]</del>
 
| Warning
 
| Warning
Line 475: Line 212:
 
| Usually results from having two <code>for</code> loops in the same function that share a loop variable declaration like <code>var i=...</code>.
 
| Usually results from having two <code>for</code> loops in the same function that share a loop variable declaration like <code>var i=...</code>.
 
|-
 
|-
 
+
!| [https://bugs.eclipse.org/bugs/show_bug.cgi?id=461850 no-self-compare]
!| <del>[https://bugs.eclipse.org/bugs/show_bug.cgi?id=455391 no-regex-spaces]</del>
+
| Error
+
| 8.0
+
| Avoid using multiple spaces in regular expressions. Use ' {${0}}' instead.
+
| Flags regular expressions that have two or more subsequent spaces.
+
|-
+
 
+
!| <del>[https://bugs.eclipse.org/bugs/show_bug.cgi?id=455354 no-reserved-keys]</del>
+
| Error
+
| 8.0
+
| ''Reserved words should not be used as property keys.''
+
| Checks to see if a JavaScript reserved word is being used as a property key
+
|-
+
 
+
!| no-return-assign
+
| Warning
+
| -
+
| &nbsp;
+
|
+
* Prevents assignment in a <code>return</code> statement.
+
* Unsupported by JSLint, although JSLint does require parens around a return-assignment, eg: <code>return (x = 2);</code>
+
|-
+
 
+
!| no-script-url
+
| Warning
+
| -
+
| &nbsp;
+
|
+
* Flags string literals beginning with <code>javascript:</code>. (Script URLs are a form of <code>eval</code>.)
+
|-
+
 
+
!| no-self-compare
+
 
| Error
 
| Error
 
| -
 
| -
Line 513: Line 218:
 
| Flags comparisons where the left- and right-hand sides are the same.
 
| Flags comparisons where the left- and right-hand sides are the same.
 
|-
 
|-
 
+
!| <del>[https://bugs.eclipse.org/bugs/show_bug.cgi?id=438319 no-shadow]</del>
!!| <del>[https://bugs.eclipse.org/bugs/show_bug.cgi?id=438319 no-shadow]</del>
+
 
| Warning
 
| Warning
 
| 8.0
 
| 8.0
Line 520: Line 224:
 
| Flags variables that have the same name as a variable declared in an upper scope.
 
| Flags variables that have the same name as a variable declared in an upper scope.
 
|-
 
|-
 
+
!| <del>[https://bugs.eclipse.org/bugs/show_bug.cgi?id=461321 no-shadow-global]</del>
!| no-spaced-func
+
| Ignore
+
| -
+
| ''Unnecessary space in function call.''
+
| Report on excess space in a function call, for example <code>myFunc ();</code> or <code>new MyObj ();</code>
+
|-
+
 
+
!| <del>[https://bugs.eclipse.org/bugs/show_bug.cgi?id=426723 no-sparse-arrays]</del>
+
 
| Warning
 
| Warning
| 8.0
+
| 9.0
| ''Sparse array declarations should de avoided.''
+
| '''{a}' shadows a global member.''
| Flags sparse arrays with null elements
+
| Flags variables that have the same name as a variable declared in the global scope or specified environments.
 
|-
 
|-
 
!| no-sync
 
| Ignore
 
| -
 
| ''Unexpected sync method: '{a}'.''
 
|
 
* Flags Node.js's synchronous I/O methods.
 
* The '''stupid''' option is supported only in newer versions of JSLint (not Orion's).
 
|-
 
 
!| no-ternary
 
| Ignore
 
| -
 
| &nbsp;
 
| Flags any use of the ternary operator <code>cond ? thenExpr : elseExpr</code>
 
|-
 
 
!| no-undef-init
 
| Warning
 
| -
 
| ''It is not necessary to initialize '{variable}' to 'undefined'.''
 
| &nbsp;
 
|-
 
 
!| <del>[https://bugs.eclipse.org/bugs/show_bug.cgi?id=427310 no-unused-params]</del>
 
| Warning
 
| -
 
| "Parameter '{param}' is not used."
 
| Flags parameters in function declarations / expressions if they are not being used
 
|-
 
 
 
!| <del>[https://bugs.eclipse.org/bugs/show_bug.cgi?id=414779 no-undef]</del>
 
!| <del>[https://bugs.eclipse.org/bugs/show_bug.cgi?id=414779 no-undef]</del>
 
| Error
 
| Error
Line 573: Line 238:
 
* Predefined environments (eg. '''node''', '''browser''') can be set in the /*jslint */ block.
 
* Predefined environments (eg. '''node''', '''browser''') can be set in the /*jslint */ block.
 
|-
 
|-
 
+
!| <del>[https://bugs.eclipse.org/bugs/show_bug.cgi?id=427310 no-unused-params]</del>
!| no-underscore-dangle
+
| Ignore
+
| -
+
| ''Dangling '_'''
+
| &nbsp;
+
|-
+
 
+
!| <del>[https://bugs.eclipse.org/bugs/show_bug.cgi?id=436986 no-unreachable]</del>
+
| Error
+
| -
+
| ''Unreachable code.''
+
| Flags statements that occur after a <code>return</code>, <code>throw</code>, etc.
+
|-
+
 
+
!| no-unused-expressions
+
 
| Warning
 
| Warning
 
| -
 
| -
| ''Expected an assignment or function call and instead saw an expression.''
+
| "Parameter '{param}' is not used."
| Flags expressions that appear in a statement context and don't cause side effects.
+
| Flags parameters in function declarations / expressions if they are not being used
 
|-
 
|-
 
+
!| <del>[https://bugs.eclipse.org/bugs/show_bug.cgi?id=414779 no-unused-vars]</del>
!| <deL>[https://bugs.eclipse.org/bugs/show_bug.cgi?id=414779 no-unused-vars]</del>
+
 
| Warning
 
| Warning
 
| 5.0
 
| 5.0
Line 601: Line 250:
 
| &nbsp;
 
| &nbsp;
 
|-
 
|-
 
 
!| <del>[https://bugs.eclipse.org/bugs/show_bug.cgi?id=414779 no-use-before-define]</del>
 
!| <del>[https://bugs.eclipse.org/bugs/show_bug.cgi?id=414779 no-use-before-define]</del>
 
| Warning
 
| Warning
Line 608: Line 256:
 
| &nbsp;
 
| &nbsp;
 
|-
 
|-
 
+
!| [https://bugs.eclipse.org/bugs/show_bug.cgi?id=461854 no-with]
!| no-with
+
 
| Warning
 
| Warning
 
| -
 
| -
Line 615: Line 262:
 
| Treated as fatal parse error in JSLint.
 
| Treated as fatal parse error in JSLint.
 
|-
 
|-
 
+
!| <del>[http://git.eclipse.org/c/orion/org.eclipse.orion.client.git/commit/?id=f61bdaf06ac2f40eaca4daed39520cd60c41f5f3 radix]</del>
!| no-wrap-func
+
| Warning
| Ignore
+
| 8.0
| -
+
| ''Missing radix parameter.''
| ''Do not wrap function literals in parens unless they are to be immediately invoked.''
+
| Warns when parseInt() called without the 2nd parameter (radix).
| Flags a parenthesized function literal that is not immediately invoked, eg. <code>(function fun(){})</code>
+
 
|-
 
|-
 
+
!| <del>[http://git.eclipse.org/c/orion/org.eclipse.orion.client.git/commit/?id=6e517847ef0742b090130748fb9a0329d33e16bf throw-error]</del>
!| object-prototype-external
+
 
| Warning
 
| Warning
| -
+
| 7.0
 
| &nbsp;
 
| &nbsp;
| Flags calls to methods of <code>Object.prototype</code> that rely on the prototype chain. For example this code should be flagged:
+
| Flags code that throws a non-Error, eg. <code>throw "a problem occurred";</code>
<source lang="javascript" line="line">
+
foo.hasOwnProperty("bar")
+
</source>
+
 
+
Example (1) is [https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty?redirectlocale=en-US&redirectslug=JavaScript%2FReference%2FGlobal_Objects%2FObject%2FhasOwnProperty#hasOwnProperty_as_a_property unsafe], as <code>foo</code> may have a property named <code>hasOwnProperty</code>, or have been constructed via <code>Object.create(null)</code>.
+
 
+
As for this:
+
 
+
<source lang="javascript" line="line" start="2">
+
Object.hasOwnProperty.call(foo, "bar")
+
</source>
+
 
+
Example (2) technically relies on the prototype chain as well: the hasOwnProperty method is defined on Object.prototype, not Object. Object inherits the methods of Object.prototype [http://stackoverflow.com/questions/14817826/difference-between-an-object-and-its-prototype/14817913#14817913 through its prototype chain]. However (2) is unlikely to fail, as sane JavaScript programs will not modify the global objects' prototypes. If we choose to flag (2), it should only be for style.
+
 
|-
 
|-
 +
|}
  
!| one-var
+
=== Code Style ===
| Warning
+
These rules are not problems in any way but will warn based on certain accepted styles for coding.
| -
+
| ''Too many var statements.''
+
| Allows only 1 <code>var</code> statement per function.
+
|-
+
  
!| quote-props
+
{| class="wikitable" border="1" cellpadding="5" cellspacing="0" style="width: 100%;"
| Warning
+
! style="background:#efefef;" width=5% | Rule
| -
+
! style="background:#efefef;" width=5% | Default Severity
| &nbsp;
+
! style="background:#efefef;" width=5% | Available Since
| Requires object literal keys to be quoted with " or '.
+
! style="background:#efefef;" width=40%| Problem Message
 +
! style="background:#efefef;" width=40% | Details
 
|-
 
|-
 
+
!| [https://bugs.eclipse.org/bugs/show_bug.cgi?id=428429 missing-nls]
!| quotes
+
 
| Ignore
 
| Ignore
 
| -
 
| -
 
| &nbsp;
 
| &nbsp;
| Flags any use of single or double quote marks, depending on setting.
+
| Flags String literals that are not properly NLS'd
 
|-
 
|-
 
+
!| <del>[https://bugs.eclipse.org/bugs/show_bug.cgi?id=429801 new-parens]</del>
!| <del>radix</del>
+
| Error
| Warning
+
| 6.0
 +
| ''Missing parentheses invoking constructor.''
 +
| Flags <code>new Whatever</code>
 +
|-
 +
!| [https://bugs.eclipse.org/bugs/show_bug.cgi?id=425200 no-mixed-returns]
 +
| Error
 
| -
 
| -
| ''Missing radix parameter.''
+
| &nbsp;
| Warns when parseInt() called without the 2nd parameter (radix).
+
| Flags functions that return more than one kind of item, for example returning String and Object
 
|-
 
|-
 
+
!| [https://bugs.eclipse.org/bugs/show_bug.cgi?id=461852 no-undef-init]
!| regex-spaces
+
 
| Warning
 
| Warning
 
| -
 
| -
| ''Spaces are hard to count. Use {n}.''
+
| ''It is not necessary to initialize '{variable}' to 'undefined'.''
 
| &nbsp;
 
| &nbsp;
 
|-
 
|-
 
 
!| <del>[https://bugs.eclipse.org/bugs/show_bug.cgi?id=427930 semi]</del>
 
!| <del>[https://bugs.eclipse.org/bugs/show_bug.cgi?id=427930 semi]</del>
 
| Warning
 
| Warning
Line 684: Line 316:
 
| &nbsp;
 
| &nbsp;
 
|-
 
|-
 
!| strict
 
| Ignore
 
| -
 
| &nbsp;
 
| Flags any code that lacks the <code>"use strict"</code> pragma.
 
|-
 
 
!| <del>[http://git.eclipse.org/c/orion/org.eclipse.orion.client.git/commit/?id=6e517847ef0742b090130748fb9a0329d33e16bf throw-error]</del>
 
| Warning
 
| 7.0
 
| &nbsp;
 
| Flags code that throws a non-Error, eg. <code>throw "a problem occurred";</code>
 
|-
 
 
!| <del>[https://bugs.eclipse.org/bugs/show_bug.cgi?id=429711 use-isnan]</del>
 
| Error
 
| 6.0
 
| ''Use the isNaN function to compare with NaN.''
 
| &nbsp;
 
|-
 
 
!| wrap-iife
 
| Ignore
 
| -
 
|
 
* ''Wrap the entire immediate function invocation in parens.''
 
* ''Move the invocation into the parens that contain the function.''
 
| Flags missing parens on immediately-invoked functions, eg. <code>function(){ console.log('hi'); }();</code>
 
|-
 
 
!| wrap-regex
 
| Warning
 
| -
 
| ''Wrap the /regexp/ literal in parens to disambiguate the slash operator.''
 
| &nbsp;
 
|-
 
 
 
 
|}
 
|}
  
=== Implementing a new rule ===
+
== Implementing a new rule ==
 
''This section explains how to implement a new linting rule. For brevity, all paths are given relative to <tt>bundles/org.eclipse.orion.client.javascript/web/</tt> in the client repo.''
 
''This section explains how to implement a new linting rule. For brevity, all paths are given relative to <tt>bundles/org.eclipse.orion.client.javascript/web/</tt> in the client repo.''
  

Revision as of 12:23, 10 March 2015

Orion 5.0 moved to ESLint as the validator that ships with Orion. This page captures ongoing issues.

Rules

The following table describes all of the rules currently available in Orion and ones that we plan to add in the future.

Rules that are currently available are struck out.

Potential Programming Problems

These rules report about problems with your code that might have undesired or incorrect results. Warnings from these rules should be addressed.

Rule Default Severity Available Since Problem Message Details
no-comma-dangle Ignore 8.0 Trailing commas in object expressions are discouraged. Flags trailing commas in object expressions.
no-cond-assign Error 8.0 Expected a conditional expression and instead saw an assignment. Flags assignment in an if/while/do..while/for condition.
no-console Error 8.0 Discouraged use of console in browser-based code. Flags the use of console in browser-based code
no-constant-condition Error 8.0 Discouraged use of constant as a conditional expression. Flags the use of a constant as a conditional expression
no-debugger Warning 6.0 debugger' statement use is discouraged.  
no-dupe-keys Error 6.0 Duplicate object key '{key}'. Flags object literals that contain the same key more than once.
no-empty-block Warning 7.0   Flags an empty block like if (something) { }.
no-extra-semi Warning 5.0 Unnecessary semicolon.  
no-regex-spaces Error 8.0 Avoid using multiple spaces in regular expressions. Use ' {${0}}' instead. Flags regular expressions that have two or more subsequent spaces.
no-reserved-keys Error 8.0 Reserved words should not be used as property keys. Checks to see if a JavaScript reserved word is being used as a property key
no-sparse-arrays Warning 8.0 Sparse array declarations should de avoided. Flags sparse arrays with null elements
no-unreachable Error - Unreachable code. Flags statements that occur after a return, throw, etc.
use-isnan Error 6.0 Use the isNaN function to compare with NaN.  

Best Practices

These rules are not necessarily problem with your code, but are warnings that you might be doing something you probably should not be.

Rule Default Severity Available Since Problem Message Details
block-scoped-var Error - '{variable}' is already defined.
  • Occurs when a function-scoped variable is treated as if it was block scoped.
  • ESLint calls this error '{variable} used outside of binding context.'
curly Ignore 6.0 Statements should be enclosed in braces.  
eqeqeq Warning 5.0
  • Expected '===' and saw '=='.
  • Expected '!==' and saw '!='.
 
missing-doc Ignore 5.0 "Missing documentation for function '{name}.'" Flags missing documentation nodes on function declarations and function expressions when they appear as object properties
missing-doc-items Ignore -   Flags missing documentation for parameters, returns, throws, etc on function declarations and function expressions when they appear as object properties
no-caller Error 9.0 arguments.{callee, caller} is deprecated. Flags references to arguments.callee and arguments.caller.
no-eval Ignore 6.0 'eval' function calls are discouraged.  
no-fallthrough Error - Switch case may be entered by falling through previous case. If intended, add a new comment //$FALL-THROUGH$ on the line above Flags a fallthrough case within a switch statement, unless it is explicitly commented.
no-implied-eval Ignore 6.0 Implicit 'eval' function calls are discouraged. Flags calls to the string-argument form of setTimeout and setInterval, which implicitly perform eval. This rule logic was merged to be part of the no-eval rule.
no-iterator Error 8.0 Discouraged __iterator__ property use. Flags use of __iterator__ as an identifier name or property key.
no-new-array Warning 6.0 Use the array literal notation []. Flags new Array().
no-new-func Warning 6.0 The Function constructor is eval. Flags new Function().
no-new-object Warning 6.0 Use the object literal notation {}. Flags new Object().
no-new-wrappers Warning 6.0 Do not use {String, Number, Boolean, Math, JSON} as a constructor. Flags new applied to any of those.
no-proto Error -
  • Reserved name '__proto__' should not be assigned."
  • 'Reserved name '__proto__' should not be used as a key."
 
no-redeclare Warning 5.0 '{a}' is already defined. Usually results from having two for loops in the same function that share a loop variable declaration like var i=....
no-self-compare Error -   Flags comparisons where the left- and right-hand sides are the same.
no-shadow Warning 8.0 '{a}' is already declared in the upper scope. Flags variables that have the same name as a variable declared in an upper scope.
no-shadow-global Warning 9.0 '{a}' shadows a global member. Flags variables that have the same name as a variable declared in the global scope or specified environments.
no-undef Error 5.0 '{variable}' is not defined.
  • Flags references to a global variable that is not listed in a /*global*/ or /*globals*/ block.
  • Predefined environments (eg. node, browser) can be set in the /*jslint */ block.
no-unused-params Warning - "Parameter '{param}' is not used." Flags parameters in function declarations / expressions if they are not being used
no-unused-vars Warning 5.0 Function declares unused variable '{a}'.  
no-use-before-define Warning 5.0 '{a}' was used before it was defined.  
no-with Warning - Expected an identifier and instead saw 'with'. Treated as fatal parse error in JSLint.
radix Warning 8.0 Missing radix parameter. Warns when parseInt() called without the 2nd parameter (radix).
throw-error Warning 7.0   Flags code that throws a non-Error, eg. throw "a problem occurred";

Code Style

These rules are not problems in any way but will warn based on certain accepted styles for coding.

Rule Default Severity Available Since Problem Message Details
missing-nls Ignore -   Flags String literals that are not properly NLS'd
new-parens Error 6.0 Missing parentheses invoking constructor. Flags new Whatever
no-mixed-returns Error -   Flags functions that return more than one kind of item, for example returning String and Object
no-undef-init Warning - It is not necessary to initialize '{variable}' to 'undefined'.  
semi Warning 5.0 Missing semicolon.  

Implementing a new rule

This section explains how to implement a new linting rule. For brevity, all paths are given relative to bundles/org.eclipse.orion.client.javascript/web/ in the client repo.

First, create the tests and rule:

  1. Create a new test file for the rule at: /eslint/tests/lib/rules/{rule-name}.js.
  2. Link your test to the suite in /eslint/tests/load-tests.js.
  3. Implement the actual logic for your rule in /eslint/lib/load-rules-async.js.

At this point you should run the JS bundle tests and ensure your rule works as intended. To get your rule running in the Orion product's validator, there are additional steps:

  1. Create strings for the validation message(s) generated by your rule in /javascript/nls/root/problems.js.
  2. Create a short string describing what your rule does in /javascript/nls/root/messages.js.
  3. Add an entry to the orion.core.setting declaration in /javascript/plugins/javascriptPlugin.js. This allows your rule to be configured from the JS validator settings page. Make sure it references the same nameKey used in messages.js.
  4. Add a config entry for your rule to the default ESLint config object in /javascript/validator.js.
  5. Add your rule to the #updated() handler in /javascript/validator.js.

Reload the JS plugin, and your rule should now be configurable from the Settings page, and properly set up for translation too.

Tests

  • Every rule needs extensive unit tests.
  • Unit tests should use Mocha.

Running the tests

  • To run the ESLint tests as part of the main JavaScript tests suite load {orion-server-url}/javascript/js-tests/JsMochaSuite.html in your web browser.
  • To run just the ESLint rule tests, load {orion-server-url}/js-tests/javascript/JsMochaSuite.html?grep=ESLint%20Rule%20Tests in your browser.
  • To run just the ESLint core tests, load {orion-server-url}/js-tests/javascript/JsMochaSuite.html?grep=ESLint%20Core%20Tests in your browser.
  • To run only a subset of the tests, add ?grep=ESLint%20Rule%20Tests onto the test page URL.

See Mocha usage options for more options.

User interface

  • Should we have a UI for configuring what rules are active? bug 424268.
  • Should we try to support .eslintrc? This would be an ideal project-scope setting.
  • Should we try to honor equivalent JSLint/JSHint flags when possible? For example /*jslint eqeqeq:false */ could disable the eqeqeq rule on a per-file basis.
    • ESLint now has its own syntax for this: /*eslint ..*/, which we are using instead.

i18n

We need to support i18n. Pre-req is bug 422278 (orion.edit.validator support for i18n).

Back to the top