186 Rules

Offering a set of powerful rules, SonarJS is all you need to find bugs, vulnerabilities, and code smells in your JavaScript code. With SonarJS, monitoring your code quality is no longer a daunting task.



Code Smell

Bug Detection Rules

Rule ID Name Sonar way Tags In Action
S3796 Callbacks of array methods should have return statements~83 issues
S2189 Loops should not be infinitecert~224 issues
S3827 Non-existent variables should not be referenced~17,424 issues
S3828 "yield" expressions should not be used outside generatorses2015
S3834 "Symbol" should not be used as a constructores2015~1 issue
S3812 Results of "in" and "instanceof" should be negated rather than operands~44 issues
S3785 "in" should not be used with primitive types~133 issues
S2549 The "changed" property should not be manipulated directlybackbone
S3854 super() should be invoked appropriately~4 issues
S930 Function calls should not pass extra argumentscert, cwe, misra~3,222 issues
S3799 Destructuring patterns should not be empty~1 issue
S2583 Conditionally executed blocks should be reachablecert, cwe, misra, pitfall, unused~6,526 issues
BoundOrA. "eval" and "arguments" should not be bound or assignedpitfall~24 issues
S1656 Variables should not be self-assignedcert~297 issues
S905 Non-empty statements should change control flow or have at least one side-effectcert, cwe, misra, unused~104 issues
S2234 Parameters should be passed in the correct order~143 issues
S1145 Useless "if(true) {...}" and "if(false){...}" blocks should be removedcwe, misra~1 issue
S2873 Calls should not be made to non-callable values~4,113 issues
S1143 Jump statements should not occur in "finally" blockscert, cwe, error-handling~374 issues
S2757 "=+" should not be used instead of "+="~1 issue
S2999 "new" operators should be used with functions~12 issues
Duplicat. Property names should not be duplicated within a class or object literalpitfall~797 issues
S878 Comma operator should not be usedmisra
S2688 "NaN" should not be used in comparisonscert~42 issues
S1751 Jump statements should not be used unconditionallycert, misra, unused~144 issues
S2201 Return values should not be ignored when function calls don't have any side effectscert, misra~506 issues
S3531 Generators should "yield" somethingapi-design, es2015~11 issues
S2681 Multiline blocks should be enclosed in curly bracescert, cwe~79 issues
Duplicat. Function argument names should be unique~3 issues
ForIn "" loops should filter properties before acting on them~7,568 issues
S1764 Identical expressions should not be used on both sides of a binary operatorcert~1,538 issues
S3786 Template literal placeholder syntax should not be used in regular strings
S1697 Short-circuit logic should be used to prevent null pointer dereferences in conditionals
S2424 Built-in objects should not be overriddenconfusing
S3759 Non-existent properties should not be read~3,992 issues
S1854 Dead stores should be removedcert, cwe, unused~42,307 issues
S1862 Related "if/else if" statements and "cases" in a "switch" should not have the same conditioncert, pitfall, unused~392 issues
S3403 Strict equality operators should not be used with dissimilar types~1,000 issues
S2432 Setters should not return values~52 issues
S2550 "defaults" should be a function when objects or arrays are usedbackbone
Construc. Objects should not be created to be dropped immediately without being used~58 issues
S3923 All branches in a conditional structure should not have exactly the same implementation~236 issues
S3699 The output of functions that don't return anything should not be used~480 issues
S1154 Results of operations on strings should not be ignoredcert~1 issue
S2123 Values should not be uselessly incrementedunused~1 issue
S2769 Selection results should be tested with "length"jquery~1 issue
S3616 Comma and logical OR operators should not be used in switch cases~2 issues
Unreacha. Jump statements should not be followed by other statementscert, cwe, misra, unused~3,984 issues
S2259 Properties of variables with "null" or "undefined" values should not be accessedcert, cwe~4,321 issues
BitwiseO. Bitwise operators should not be used in boolean contexts~63,629 issues
S3500 Attempts should not be made to update "const" variableses2015~9 issues
S2251 A "for" loop update clause should move the counter in the right directioncert~20 issues
FailedUn. Failed unit tests should be fixed
S2508 The names of model properties should not contain spacesbackbone
Function. Function declarations should not be made within blockscross-browser, user-experience~508 issues
S2427 The base should be provided to "parseInt"user-experience
S3001 "delete" should be used only with object properties~65 issues
Trailing. Trailing commas should not be usedcross-browser~6 issues
NamedFun. Named function expressions should not be usedcross-browser, user-experience~1,059 issues
WithStat. "with" statements should not be used~244 issues

Vulnerability Detection Rules

Rule ID Name Sonar way Tags In Action
S2817 Web SQL databases should not be usedhtml5, owasp-a6, owasp-a9
S3271 Local storage should not be usedowasp-a6
S2611 Untrusted content should not be includedcwe, sans-top25-risky~8 issues
Eval Code should not be dynamically injected and executedcwe, owasp-a3~1,787 issues
S2819 Cross-document messaging domains should be carefully restrictedhtml5, owasp-a3~73 issues
S3523 Function constructors should not be usedclumsy~2,053 issues
S2228 Console logging should not be usedowasp-a6, user-experience~8,871 issues
Debugger. Debugger statements should not be usedcwe, user-experience~86 issues
S1442 "alert(...)" should not be usedcwe, user-experience~3,240 issues

Code Smell Detection Rules

Rule ID Name Sonar way Tags In Action
Variable. Variables should be declared before they are usedpitfall~12,855 issues
FutureRe. "future reserved words" should not be used as identifierslock-in, pitfall~68 issues
S1451 Track lack of copyright and license headers
OctalNum. Octal values should not be usedcert, misra, pitfall~868 issues
S1219 "switch" statements should not contain non-case labelsmisra, suspicious~109 issues
S3516 Function returns should not be invariant~120 issues
S2703 Variables should be declared explicitlypitfall~10,935 issues
NonEmpty. Switch cases should end with an unconditional "break" statementcert, cwe, misra, suspicious~2,772 issues
S2137 Local variables should not shadow "undefined"~98 issues
S3509 Default parameters should not cause side effectses2015, pitfall
Conditio. Internet Explorer's conditional comments should not be usedcross-browser~15 issues
StrictMo. "strict" mode should be used with cautioncross-browser, user-experience~1,117 issues
S3776 Cognitive Complexity of functions should not be too highbrain-overload~17,728 issues
S1994 "for" loop increment clauses should modify the loops' countersconfusing~340 issues
S2208 Wildcard imports should not be usedes2015, pitfall~1 issue
Variable. Variables should not be shadowedcert, misra, suspicious~1,466 issues
S3353 Unchanged variables should be marked "const"es2015~7,761 issues
CurlyBra. Control structures should use curly bracescert, misra, pitfall~1,608 issues
S1067 Expressions should not be too complexbrain-overload~17,270 issues
S2310 Loop counters should not be assigned to from within the loop bodypitfall~2,423 issues
S1186 Functions should not be emptysuspicious~13,320 issues
S3525 Class methods should be used instead of "prototype" assignmentses2015
SwitchWi. "switch" statements should end with "default" clausescert, cwe, misra~5,460 issues
Function. Functions should not be too complexbrain-overload~17,636 issues
S3735 "void" should not be usedconfusing~7,581 issues
ElseIfWi. "if ... else if" constructs should end with "else" clausescert, misra~1 issue
S888 Equality operators should not be used in "for" loop termination conditionscert, cwe, misra, suspicious~2 issues
NestedIf. Control flow statements "if", "for", "while", "switch" and "try" should not be nested too deeplybrain-overload~32,466 issues
S3504 Variables should be declared with "let" or "const"bad-practice, es2015
S2589 Boolean expressions should not be gratuitouscert, cwe, misra, redundant~2 issues
S3798 Variables and functions should not be declared in the global scope~1 issue
S1134 Track uses of "FIXME" tagscwe~1,061 issues
ParsingE. JavaScript parser failuresuspicious
LineLeng. Lines should not be too longconvention~23 issues
S104 Files should not have too many linesbrain-overload~34 issues
Parenthe. Redundant pairs of parentheses should be removedconfusing~3,363 issues
S3686 Functions should not be called both with and without "new"~602 issues
S2870 "delete" should not be used on arrays~148 issues
S881 Increment (++) and decrement (--) operators should not be used in a method call or mixed with other operators in an expressioncert, misra~20 issues
S1788 Function parameters with default values should be lastes2015~178 issues
S2685 "arguments.caller" and "arguments.callee" should not be usedobsolete~290 issues
S1871 Two branches in a conditional structure should not have exactly the same implementationdesign, suspicious~6,247 issues
Collapsi. Collapsible "if" statements should be mergedclumsy~6,121 issues
S1119 Labels should not be usedconfusing~1,816 issues
Assignme. Assignments should not be made from within sub-expressionscert, cwe, misra, suspicious~1,214 issues
UnusedFu. Unused function parameters should be removedcert, misra, unused~42,884 issues
S2692 "indexOf" checks should not be for positive numberssuspicious~306 issues
S3782 Arguments to built-in functions should match documented types~421 issues
S3358 Ternary operators should not be nestedconfusing~16,043 issues
S3513 "arguments" should not be accessed directlyapi-design, es2015
EmptyBlo. Nested blocks of code should not be left emptysuspicious~7,811 issues
LabelPla. Only "while", "do" and "for" statements should be labelledpitfall~1 issue
EqEqEq "===" and "!==" should be used instead of "==" and "!="suspicious~3,823 issues
S3758 Values not convertible to numbers should not be used in numeric comparisons~439 issues
S3757 Arithmetic operations should not result in "NaN"~459 issues
Excessiv. Functions should not have too many parametersbrain-overload~1,787 issues
S3003 Comparison operators should not be used with strings~24 issues
S3760 Arithmetic operators should only have numbers as operandsconfusing
OneState. Statements should be on separate linesconvention~147,918 issues
S2715 "find" should be used to select the children of an element known by idjquery, performance, user-experience
S2716 Universal selectors should not be usedjquery, performance, user-experience
S2714 Element type selectors should not be used with class selectorsjquery, performance, user-experience
S3800 Functions should always return the same typeconfusing~2,203 issues
S3801 Functions should use "return" consistentlyapi-design, confusing~61 issues
S2392 Variables should be defined in the blocks where they are usedpitfall
S2762 Selections should be storedjquery, performance, user-experience
S3579 Array indexes should be numericbad-practice~390 issues
Commente. Sections of code should not be "commented out"misra, unused~21,985 issues
Conditio. The ternary operator should not be usedbrain-overload
S2376 Property getters and setters should come in pairspitfall~1,428 issues
S2770 Deprecated jQuery methods should not be usedjquery, obsolete
S2814 Variables and functions should not be redeclaredconfusing~40,924 issues
S2898 "[type=...]" should be used to select elements by typejquery, performance
Function. Functions should not be defined inside loopssuspicious~5,131 issues
S138 Functions should not have too many linesbrain-overload~1,176 issues
Insuffic. Lines should have sufficient coverage by testsbad-practice~125 issues
Insuffic. Branches should have sufficient coverage by testsbad-practice~68 issues
Duplicat. Source files should not have any duplicated blockspitfall~20,543 issues
Insuffic. Source files should have a sufficient density of comment linesconvention
SkippedU. Skipped unit tests should be either removed or fixedpitfall
MissingN. Files should contain an empty new line at the endconvention~35 issues
TooManyB. Loops should not contain more than a single "break" or "continue" statementbrain-overload~3,050 issues
S3317 Default export names and file names should matchconfusing, convention, es2015~451 issues
S1301 "switch" statements should have at least 3 "case" clausesbad-practice, misra~1,219 issues
S1264 A "while" loop should be used instead of a "for" loopclumsy~1,103 issues
S2990 The global "this" object should not be usedconfusing~808 issues
S3723 Trailing commas should be usedconvention
S3499 Shorthand object properties should be grouped at the beginning or end of an object declarationconvention, es2015~385 issues
S3533 "import" should be used to include external codeconvention, es2015, obsolete~23 issues
S3498 Object literal shorthand syntax should be usedconvention, es2015~4 issues
S1472 Function call arguments should not start on new linessuspicious~1,771 issues
S1116 Extra semicolons should be removedcert, misra, unused~7,285 issues
S1126 Return of boolean expressions should not be wrapped into an "if-then-else" statementclumsy~231 issues
S1488 Local Variables should not be declared and then immediately returned or thrownclumsy~2,240 issues
S1125 Boolean literals should not be redundantclumsy~1,591 issues
SingleQu. Single quotes should be used for string literalsconvention~2 issues
S100 Function names should comply with a naming conventionconvention
TabChara. Tabulation characters should not be usedconvention
S3512 Template strings should be used instead of concatenationclumsy, es2015~2 issues
HtmlComm. HTML-style comments should not be usedbad-practice~21 issues
S3514 Destructuring syntax should be used for assignmentsclumsy, es2015
Semicolo. Statements should end with semicolonsconvention~7,243 issues
Primitiv. Wrapper objects should not be used for primitive typespitfall~1,218 issues
UnusedVa. Unused local variables and functions should be removedunused~32,192 issues
S3402 Strings and non-strings should not be addedconfusing~82 issues
Continue. "continue" should not be usedbad-practice, misra
S3524 Braces and parentheses should be used consistently with arrow functionsconvention, es2015~19 issues
ArrayAnd. Array constructors should not be usedsuspicious~4,063 issues
S3002 Unary operators "+" and "-" should not be used with objectsconfusing~5 issues
S2713 JQuery cache variables should comply with a convention nameconvention, jquery
S1226 Function parameters, caught exceptions and foreach variables should not be reassignedmisra, pitfall~1 issue
S1105 An open curly brace should be located at the end of a lineconvention
Multilin. Multiline string literals should not be usedbad-practice~988 issues
Trailing. Comments should not be located at the end of lines of codeconvention~4 issues
S2138 "undefined" should not be assignedsuspicious~29 issues
Trailing. Lines should not end with trailing whitespacesconvention~242 issues
S1135 Track uses of "TODO" tagscwe~10,070 issues

Back to the top