Security News
ESLint is Now Language-Agnostic: Linting JSON, Markdown, and Beyond
ESLint has added JSON and Markdown linting support with new officially-supported plugins, expanding its versatility beyond JavaScript.
JSCS — JavaScript Code Style.
jscs
is a code style checker. You can configure jscs
for your project in detail using over 60 validation rules. jQuery preset is also available.
jscs
can be installed using npm
:
npm install jscs -g
To run jscs
, you can use the following command from the project root:
jscs path[ path[...]]
--config
Allows to define path to the config file.
jscs path[ path[...]] --config=./.config.json
If there is no --config
option specified, jscs
it will consequentially search for jscsConfig
option in package.json
file then for .jscsrc
and .jscs.json
files in the current working directory then in nearest ancestor until it hits the system root.
--preset
If defined will use predefined rules for specific code style.
jscs path[ path[...]] --preset=jquery
--reporter
jscs
itself provides six reporters: checkstyle
, console
, inline
, junit
and text
.
jscs path[ path[...]] --reporter=console
But you also can specify your own reporter, since this flag accepts relative or absolute paths too.
jscs path[ path[...]] --reporter=./some-dir/my-reporter.js
--no-colors
Will be removed. Clean output without colors.
--help
Outputs usage information.
--version
Outputs version of jscs
.
Path to load additional rules
Type: Array
Values: Array of file matching patterns
"additionalRules": ["project-rules/*.js"]
Extends defined rules with preset rules.
Type: String
Values: "jquery"
"preset": "jquery"
If you want specifically disable preset rule assign it to null
"preset": "jquery",
"requireCurlyBraces": null
Disables style checking for specified paths.
Type: Array
Values: Array of file matching patterns
"excludeFiles": ["node_modules/**"]
Requires curly braces after statements.
Type: Array
Values: Array of quoted keywords
JSHint: curly
"requireCurlyBraces": [
"if",
"else",
"for",
"while",
"do",
"try",
"catch",
"case",
"default"
]
if (x) {
x++;
}
if (x) x++;
Requires space after keyword.
Type: Array
Values: Array of quoted keywords
"requireSpaceAfterKeywords": [
"if",
"else",
"for",
"while",
"do",
"switch",
"return",
"try",
"catch"
]
return true;
if(x) {
x++;
}
Disallows space after keyword.
Type: Array
Values: Array of quoted keywords
"disallowSpaceAfterKeywords": [
"if",
"else",
"for",
"while",
"do",
"switch",
"try",
"catch"
]
if(x > y) {
y++;
}
Requires space before block statements (for loops, control structures).
Type: Boolean
Values: true
"requireSpaceBeforeBlockStatements": true
if (cond) {
foo();
}
for (var e in elements) {
bar(e);
}
while (cond) {
foo();
}
if (cond){
foo();
}
for (var e in elements){
bar(e);
}
while (cond){
foo();
}
Disallows space before block statements (for loops, control structures).
Type: Boolean
Values: true
"disallowSpaceBeforeBlockStatements": true
if (cond){
foo();
}
for (var e in elements){
bar(e);
}
while (cond){
foo();
}
if (cond) {
foo();
}
for (var e in elements) {
bar(e);
}
while (cond) {
foo();
}
Requires parentheses around immediately invoked function expressions.
Type: Boolean
Values: true
JSHint: immed
"requireParenthesesAroundIIFE": true
var a = (function(){ return 1; })();
var b = (function(){ return 2; }());
var c = (function(){ return 3; }).call(this, arg1);
var d = (function(){ return 3; }.call(this, arg1));
var e = (function(){ return d; }).apply(this, args);
var f = (function(){ return d; }.apply(this, args));
var a = function(){ return 1; }();
var c = function(){ return 3; }.call(this, arg1);
var d = function(){ return d; }.apply(this, args);
Requires space before ()
or {}
in function declarations.
Type: Object
Values: beforeOpeningRoundBrace
and beforeOpeningCurlyBrace
as child properties. Child properties must be set to true
.
"requireSpacesInFunctionExpression": {
"beforeOpeningRoundBrace": true,
"beforeOpeningCurlyBrace": true
}
function () {}
function a () {}
function() {}
function (){}
Disallows space before ()
or {}
in function declarations and expressions (both named and anonymous).
Type: Object
Values: "beforeOpeningRoundBrace"
and "beforeOpeningCurlyBrace"
as child properties. Child properties must be set to true
.
"disallowSpacesInFunctionExpression": {
"beforeOpeningRoundBrace": true,
"beforeOpeningCurlyBrace": true
}
function(){}
function a(){}
function () {}
function a (){}
Requires space before ()
or {}
in anonymous function expressions.
Type: Object
Values: beforeOpeningRoundBrace
and beforeOpeningCurlyBrace
as child properties. Child properties must be set to true
.
"requireSpacesInAnonymousFunctionExpression": {
"beforeOpeningRoundBrace": true,
"beforeOpeningCurlyBrace": true
}
function () {}
function() {}
function (){}
Disallows space before ()
or {}
in anonymous function expressions.
Type: Object
Values: "beforeOpeningRoundBrace"
and "beforeOpeningCurlyBrace"
as child properties. Child properties must be set to true
.
"disallowSpacesInAnonymousFunctionExpression": {
"beforeOpeningRoundBrace": true,
"beforeOpeningCurlyBrace": true
}
function(){}
function () {}
function (){}
Requires space before ()
or {}
in named function expressions.
Type: Object
Values: beforeOpeningRoundBrace
and beforeOpeningCurlyBrace
as child properties. Child properties must be set to true
.
"requireSpacesInNamedFunctionExpression": {
"beforeOpeningRoundBrace": true,
"beforeOpeningCurlyBrace": true
}
function a () {}
function a() {}
function a(){}
Disallows space before ()
or {}
in named function expressions.
Type: Object
Values: "beforeOpeningRoundBrace"
and "beforeOpeningCurlyBrace"
as child properties. Child properties must be set to true
.
"disallowSpacesInNamedFunctionExpression": {
"beforeOpeningRoundBrace": true,
"beforeOpeningCurlyBrace": true
}
function a(){}
function a () {}
function a (){}
Requires space before ()
or {}
in function declarations.
Type: Object
Values: beforeOpeningRoundBrace
and beforeOpeningCurlyBrace
as child properties. Child properties must be set to true
.
"requireSpacesInFunctionExpression": {
"beforeOpeningRoundBrace": true,
"beforeOpeningCurlyBrace": true
}
function a () {}
function a() {}
function a (){}
Disallows space before ()
or {}
in function declarations.
Type: Object
Values: "beforeOpeningRoundBrace"
and "beforeOpeningCurlyBrace"
as child properties. Child properties must be set to true
.
"disallowSpacesInFunctionExpression": {
"beforeOpeningRoundBrace": true,
"beforeOpeningCurlyBrace": true
}
function a(){}
function a () {}
function a (){}
Disallows multiple var
declaration (except for-loop).
Type: Boolean
Values: true
"disallowMultipleVarDecl": true
var x = 1;
var y = 2;
for (var i = 0, j = arr.length; i < j; i++) {}
var x = 1,
y = 2;
Requires multiple var
declaration.
Type: Boolean
or String
Values: true
or onevar
if requireMultipleVarDecl
defined as a boolean
value, it will report only consecutive vars, if, on the other hand,
value equals to onevar
string, requireMultipleVarDecl
will allow only one var
per function scope.
JSHint: onevar
"requireMultipleVarDecl": true
var x = 1,
y = 2;
var x = 1;
var y = 2;
Requires blocks to begin and end with a newline
Type: Boolean
or Integer
Values: true
validates all non-empty blocks, Integer
specifies a minimum number of statements in the block before validating.
"requireBlocksOnNewline": true
true
if (true) {
doSomething();
}
var abc = function() {};
if (true) {doSomething();}
1
if (true) {
doSomething();
doSomethingElse();
}
if (true) { doSomething(); }
var abc = function() {};
if (true) { doSomething(); doSomethingElse(); }
Requires blocks to begin and end with 2 newlines
Type: Boolean
or Integer
Values: true
validates all non-empty blocks, Integer
specifies a minimum number of statements in the block before validating.
"requirePaddingNewlinesInBlock": true
true
if (true) {
doSomething();
}
var abc = function() {};
if (true) {doSomething();}
if (true) {
doSomething();
}
1
if (true) {
doSomething();
doSomethingElse();
}
if (true) {
doSomething();
}
if (true) { doSomething(); }
var abc = function() {};
if (true) { doSomething(); doSomethingElse(); }
if (true) {
doSomething();
doSomethingElse();
}
Disallows blocks from beginning and ending with 2 newlines.
Type: Boolean
Values: true
validates all non-empty blocks.
"disallowPaddingNewlinesInBlocks": true
if (true) {
doSomething();
}
if (true) {doSomething();}
var abc = function() {};
if (true) {
doSomething();
}
Disallows empty blocks (except for catch blocks).
Type: Boolean
Values: true
JSHint: noempty
"disallowEmptyBlocks": true
if ( a == b ) { c = d; }
try { a = b; } catch( e ){}
if ( a == b ) { } else { c = d; }
Disallows space after opening object curly brace and before closing.
Type: Boolean
Values: true
"disallowSpacesInsideObjectBrackets": true
var x = {a: 1};
var x = { a: 1 };
Disallows space after opening array square bracket and before closing.
Type: Boolean
Values: true
"disallowSpacesInsideArrayBrackets": true
var x = [1];
var x = [ 1 ];
Disallows space after opening round bracket and before closing.
Type: Boolean
Values: true
"disallowSpacesInsideParentheses": true
var x = (1 + 2) * 3;
var x = ( 1 + 2 ) * 3;
Requires space after opening object curly brace and before closing.
Type: String
Values: "all"
for strict mode, "allButNested"
ignores closing brackets in a row.
"requireSpacesInsideObjectBrackets": "all"
"all"
var x = { a: { b: 1 } };
"allButNested"
var x = { a: { b: 1 }};
var x = {a: 1};
Requires space after opening array square bracket and before closing.
Type: String
Values: "all" for strict mode, "allButNested" ignores closing brackets in a row.
"requireSpacesInsideArrayBrackets": "all"
"all"
var x = [ 1 ];
"allButNested"
var x = [[ 1 ], [ 2 ]];
var x = [1];
Disallows quoted keys in object if possible.
Type: String
or Boolean
Values:
true
for strict mode"allButReserved"
allows ES3+ reserved words to remain quoted which is helpful when using this option with JSHint's es3
flag."disallowQuotedKeysInObjects": true
true
var x = { a: { default: 1 } };
"allButReserved"
var x = {a: 1, 'default': 2};
var x = {'a': 1};
Disallows identifiers that start or end in _
, except for some popular exceptions:
_
(underscore.js)__filename
(node.js global)__dirname
(node.js global)Type: Boolean
Values: true
JSHint: nomen
"disallowDanglingUnderscores": true
var x = 1;
var y = _.extend;
var z = __dirname;
var w = __filename;
var x_y = 1;
var _x = 1;
var x_ = 1;
var x_y_ = 1;
Disallows space after object keys.
Type: Boolean
Values: true
"disallowSpaceAfterObjectKeys": true
var x = {a: 1};
var x = {a : 1};
Requires space after object keys.
Type: Boolean
Values: true
"requireSpaceAfterObjectKeys": true
var x = {a : 1};
var x = {a: 1};
Disallows commas as last token on a line in lists.
Type: Boolean
Values: true
JSHint: laxcomma
"disallowCommaBeforeLineBreak": true
var x = {
one: 1
, two: 2
};
var y = { three: 3, four: 4};
var x = {
one: 1,
two: 2
};
Requires commas as last token on a line in lists.
Type: Boolean
Values: true
JSHint: laxcomma
"requireCommaBeforeLineBreak": true
var x = {
one: 1,
two: 2
};
var y = { three: 3, four: 4};
var x = {
one: 1
, two: 2
};
Requires proper alignment in object literals.
Type: String
Values:
- "all"
for strict mode,
- "skipWithFunction"
ignores objects if one of the property values is a function expression,
- "skipWithLineBreak"
ignores objects if there are line breaks between properties
"requireAlignedObjectValues": "all"
var x = {
a : 1,
bcd : 2,
ef : 'str'
};
var x = {
a : 1,
bcd : 2,
ef : 'str'
};
Requires operators to appear before line breaks and not after.
Type: Array
Values: Array of quoted operators
JSHint: laxbreak
"requireOperatorBeforeLineBreak": [
"?",
"+",
"-",
"/",
"*",
"=",
"==",
"===",
"!=",
"!==",
">",
">=",
"<",
"<="
]
x = y ? 1 : 2;
x = y ?
1 : 2;
x = y
? 1 : 2;
Disallows sticking operators to the left.
Type: Array
Values: Array of quoted operators
"disallowLeftStickedOperators": [
"?",
"+",
"-",
"/",
"*",
"=",
"==",
"===",
"!=",
"!==",
">",
">=",
"<",
"<="
]
x = y ? 1 : 2;
x = y? 1 : 2;
Requires sticking operators to the right.
Type: Array
Values: Array of quoted operators
"requireRightStickedOperators": ["!"]
x = !y;
x = ! y;
Disallows sticking operators to the right.
Type: Array
Values: Array of quoted operators
"disallowRightStickedOperators": [
"?",
"+",
"/",
"*",
":",
"=",
"==",
"===",
"!=",
"!==",
">",
">=",
"<",
"<="
]
x = y + 1;
x = y +1;
Requires sticking operators to the left.
Type: Array
Values: Array of quoted operators
"requireLeftStickedOperators": [","]
x = [1, 2];
x = [1 , 2];
Requires sticking unary operators to the right.
Type: Array
Values: Array of quoted operators
"disallowSpaceAfterPrefixUnaryOperators": ["++", "--", "+", "-", "~", "!"]
x = !y; y = ++z;
x = ! y; y = ++ z;
Disallows sticking unary operators to the right.
Type: Array
Values: Array of quoted operators
"requireSpaceAfterPrefixUnaryOperators": ["++", "--", "+", "-", "~", "!"]
x = ! y; y = ++ z;
x = !y; y = ++z;
Requires sticking unary operators to the left.
Type: Array
Values: Array of quoted operators
"disallowSpaceBeforePostfixUnaryOperators": ["++", "--"]
x = y++; y = z--;
x = y ++; y = z --;
Disallows sticking unary operators to the left.
Type: Array
Values: Array of quoted operators
"requireSpaceBeforePostfixUnaryOperators": ["++", "--"]
x = y ++; y = z --;
x = y++; y = z--;
Requires sticking binary operators to the left.
Type: Array
Values: Array of quoted operators
"disallowSpaceBeforeBinaryOperators": [
"+",
"-",
"/",
"*",
"=",
"==",
"===",
"!=",
"!=="
]
x+ y;
x + y;
Disallows sticking binary operators to the left.
Type: Array
Values: Array of quoted operators
"requireSpaceBeforeBinaryOperators": [
"+",
"-",
"/",
"*",
"=",
"==",
"===",
"!=",
"!=="
]
x !== y;
x!== y;
Requires sticking binary operators to the right.
Type: Array
Values: Array of quoted operators
"disallowSpaceAfterBinaryOperators": [
"+",
"-",
"/",
"*",
"=",
"==",
"===",
"!=",
"!=="
]
x +y;
x+ y;
Disallows sticking binary operators to the right.
Type: Array
Values: Array of quoted operators
"requireSpaceAfterBinaryOperators": [
"+",
"-",
"/",
"*",
"=",
"==",
"===",
"!=",
"!=="
]
x + y;
x +y;
Disallows implicit type conversion.
Type: Array
Values: Array of quoted types
"disallowImplicitTypeConversion": ["numeric", "boolean", "binary", "string"]
x = Boolean(y);
x = Number(y);
x = String(y);
x = s.indexOf('.') !== -1;
x = !!y;
x = +y;
x = '' + y;
x = ~s.indexOf('.');
Requires identifiers to be camelCased or UPPERCASE_WITH_UNDERSCORES
Type: Boolean
Values: true
JSHint: camelcase
"requireCamelCaseOrUpperCaseIdentifiers": true
var camelCase = 0;
var CamelCase = 1;
var _camelCase = 2;
var camelCase_ = 3;
var UPPER_CASE = 4;
var lower_case = 1;
var Mixed_case = 2;
var mixed_Case = 3;
Disallows usage of specified keywords.
Type: Array
Values: Array of quoted keywords
"disallowKeywords": ["with"]
with (x) {
prop++;
}
Disallows strings that span multiple lines without using concatenation.
Type: Boolean
Values: true
JSHint: multistr
"disallowMultipleLineStrings": true
var x = "multi" +
"line";
var y = "single line";
var x = "multi \
line";
Disallows multiple blank lines in a row.
Type: Boolean
Values: true
"disallowMultipleLineBreaks": true
var x = 1;
x++;
var x = 1;
x++;
Option to check line break characters
Type: String
Values: "CR"
, "LF"
, "CRLF"
"validateLineBreaks": "LF"
var x = 1;<LF>
x++;
var x = 1;<CRLF>
x++;
Requires all quote marks to be either the supplied value, or consistent if true
Type: String
or Object
Values:
"\""
: all strings require double quotes"'"
: all strings require single quotestrue
: all strings require the quote mark first encountered in the source codeObject
:
escape
: allow the "other" quote mark to be used, but only to avoid having to escapemark
: the same effect as the non-object valuesJSHint: quotmark
"validateQuoteMarks": "\""
"validateQuoteMarks": { "mark": "\"", "escape": true }
{ "mark": "\"", "escape": true }
var x = "x";
var y = '"x"';
{ "mark": "\"", "escape": true }
var x = "x";
var y = 'x';
"\""
or mode true
var x = "x";
"'"
or mode true
var x = 'x';
true
var x = "x", y = 'y';
Validates indentation for arrays, objects, switch statements, and block statements
Type: Integer
or String
Values: A positive integer or "\t"
JSHint: indent
"validateIndentation": "\t",
2
if (a) {
b=c;
function(d) {
e=f;
}
}
2
if (a) {
b=c;
function(d) {
e=f;
}
}
if (a) {
b=c;
function(d) {
e=f;
}
}
if (a) {
b=c;
function(d) {
e=f;
}
}
Requires lines to not contain both spaces and tabs consecutively, or spaces after tabs only for alignment if "smart"
Type: Boolean
or String
Values: true
or "smart"
JSHint: smarttabs
"disallowMixedSpacesAndTabs": true
true
\tvar foo = "blah blah";
\s\s\s\svar foo = "blah blah";
\t/**
\t\s*
\t\s*/ //a single space to align the star in a multi-line comment is allowed
true
\t\svar foo = "blah blah";
\s\tsvar foo = "blah blah";
"smart"
\tvar foo = "blah blah";
\t\svar foo = "blah blah";
\s\s\s\svar foo = "blah blah";
\t/**
\t\s*
\t\s*/ //a single space to align the star in a multi-line comment is allowed
"smart"
\s\tsvar foo = "blah blah";
Requires all lines to end on a non-whitespace character
Type: Boolean
Values: true
JSHint: trailing
"disallowTrailingWhitespace": true
var foo = "blah blah";
var foo = "blah blah"; //<-- whitespace character here
Disallows an extra comma following the final element of an array or object literal.
Type: Boolean
Values: true
JSHint: es3
"disallowTrailingComma": true
var foo = [1, 2, 3];
var bar = {a: "a", b: "b"}
var foo = [1, 2, 3, ];
var bar = {a: "a", b: "b", }
Requires an extra comma following the final element of an array or object literal.
Type: Boolean
Values: true
"requireTrailingComma": true
var foo = [1, 2, 3,];
var bar = {a: "a", b: "b",}
var foo = [1, 2, 3];
var bar = {a: "a", b: "b"}
Disallows placing keywords on a new line.
Type: Array
Values: Array of quoted keywords
"disallowKeywordsOnNewLine": ["else"]
if (x < 0) {
x++;
} else {
x--;
}
if (x < 0) {
x++;
}
else {
x--;
}
Requires placing keywords on a new line.
Type: Array
Values: Array of quoted keywords
"requireKeywordsOnNewLine": ["else"]
if (x < 0) {
x++;
}
else {
x--;
}
if (x < 0) {
x++;
} else {
x--;
}
Requires placing line feed at file end.
Type: Boolean
Values: true
"requireLineFeedAtFileEnd": true
Requires all lines to be at most the number of characters specified
Type: Integer
Values: A positive integer
JSHint: maxlen
"maximumLineLength": 40
var aLineOf40Chars = 123456789012345678;
var aLineOf41Chars = 1234567890123456789;
Requires constructors to be capitalized (except for this
)
Type: Boolean
Values: true
JSHint: newcap
"requireCapitalizedConstructors": true
var a = new B();
var c = new this();
var d = new e();
Option to check var that = this
expressions
Type: Array
or String
Values: String value used for context local declaration
"safeContextKeyword": [ "that" ]
var that = this;
var _this = this;
Requires member expressions to use dot notation when possible
Type: Boolean
Values: true
JSHint: sub
"requireDotNotation": true
var a = b[c];
var a = b.c;
var a = b[c.d];
var a = b[1];
var a = b['while']; //reserved word
var a = b['c'];
Requires the variable to be the left hand operator when doing a boolean comparison
Type: Boolean
Values: true
"disallowYodaConditions": true
if (a == 1) {
return
}
if (1 == a) {
return
}
Enables JSDoc validation.
Type: Object
Values:
"validateJSDoc": {
"checkParamNames": true,
"checkRedundantParams": true,
"requireParamTypes": true
}
/**
* Adds style error to the list
*
* @param {String} message
* @param {Number|Object} line
* @param {Number} [column]
*/
add: function(message, line, column) {
}
/**
* Adds style error to the list
*
* @param {String} message
* @param {Number|Object} line
* @param {Number} [column]
*/
add: function() {
}
File jscs-browser.js contains browser-compatible version of jscs
.
Download and include jscs-browser.js
into your page.
<script src="jscs-browser.js"></script>
<script>
var checker = new JscsStringChecker();
checker.registerDefaultRules();
checker.configure({disallowMultipleVarDecl: true});
var errors = checker.checkString('var x, y = 1;');
errors.getErrorList().forEach(function(error) {
console.log(errors.explainError(error));
});
</script>
Version 1.4.0:
node.js
0.8 support.vow
/vow-fs
(@XhmikosR).requireSpaceAfterKeywords
rule: trigger error if there is more then two spaces (@markelog).spaceAfterKeywords
: fix up funarg issue (@markelog).requireMultipleVarDecl
rule more like onevar (@markelog).disallowSpacesInsideParentheses
(@Famlam).disallowTrailingComma
(@rxin).requireTrailingComma
(@rxin).disallowSpaceBeforeBlockStatements
(@rxin).requireSpaceBeforeBlockStatements
(@rxin).requireBlocksOnNewline
(@mikesherov).requirePaddingNewlinesInBlock
(@mikesherov).disallowPaddingNewlinesInBlock
(@mikesherov).FAQs
JavaScript Code Style
The npm package jscs receives a total of 47,134 weekly downloads. As such, jscs popularity was classified as popular.
We found that jscs demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 6 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
ESLint has added JSON and Markdown linting support with new officially-supported plugins, expanding its versatility beyond JavaScript.
Security News
Members Hub is conducting large-scale campaigns to artificially boost Discord server metrics, undermining community trust and platform integrity.
Security News
NIST has failed to meet its self-imposed deadline of clearing the NVD's backlog by the end of the fiscal year. Meanwhile, CVE's awaiting analysis have increased by 33% since June.