mirror of
https://github.com/airbnb/javascript.git
synced 2026-01-15 05:38:04 -05:00
Compare commits
31 Commits
es5-deprec
...
eslint-con
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ca1124cd8d | ||
|
|
2e694723bf | ||
|
|
f1fedfa7ca | ||
|
|
baf0fa5343 | ||
|
|
39d5559b9a | ||
|
|
41623039e8 | ||
|
|
3ad33681a7 | ||
|
|
b126016410 | ||
|
|
e92eaef4e2 | ||
|
|
db2e7bdf63 | ||
|
|
424d74ec8d | ||
|
|
3fb9f2ec69 | ||
|
|
7d9af14ce4 | ||
|
|
be6e13f7b9 | ||
|
|
fb0f03f676 | ||
|
|
0b8e466397 | ||
|
|
d20f33f660 | ||
|
|
646fa70f59 | ||
|
|
31265099af | ||
|
|
c7d34b526a | ||
|
|
030598db09 | ||
|
|
dc7e7e77f2 | ||
|
|
6d2fc89bd1 | ||
|
|
bfc842e3ad | ||
|
|
f0b31960d3 | ||
|
|
f94f6e21c6 | ||
|
|
6454839e76 | ||
|
|
52a2da4182 | ||
|
|
9ffadff1fd | ||
|
|
a1edac348a | ||
|
|
53b4173b04 |
122
README.md
122
README.md
@@ -7,7 +7,7 @@
|
||||
[](https://gitter.im/airbnb/javascript?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)
|
||||
|
||||
Other Style Guides
|
||||
- [ES5](es5/)
|
||||
- [ES5 (Deprecated)](https://github.com/airbnb/javascript/tree/es5-deprecated/es5)
|
||||
- [React](react/)
|
||||
- [CSS & Sass](https://github.com/airbnb/css)
|
||||
- [Ruby](https://github.com/airbnb/ruby)
|
||||
@@ -40,7 +40,7 @@ Other Style Guides
|
||||
1. [Events](#events)
|
||||
1. [jQuery](#jquery)
|
||||
1. [ECMAScript 5 Compatibility](#ecmascript-5-compatibility)
|
||||
1. [ECMAScript 6 Styles](#ecmascript-6-styles)
|
||||
1. [ECMAScript 6+ (ES 2015+) Styles](#ecmascript-6-styles)
|
||||
1. [Testing](#testing)
|
||||
1. [Performance](#performance)
|
||||
1. [Resources](#resources)
|
||||
@@ -153,43 +153,6 @@ Other Style Guides
|
||||
const item = {};
|
||||
```
|
||||
|
||||
<a name="objects--reserved-words"></a><a name="3.2"></a>
|
||||
- [3.2](#objects--reserved-words) If your code will be executed in browsers in script context, don't use [reserved words](http://es5.github.io/#x7.6.1) as keys. It won't work in IE8. [More info](https://github.com/airbnb/javascript/issues/61). It’s OK to use them in ES6 modules and server-side code. jscs: [`disallowIdentifierNames`](http://jscs.info/rule/disallowIdentifierNames)
|
||||
|
||||
```javascript
|
||||
// bad
|
||||
const superman = {
|
||||
default: { clark: 'kent' },
|
||||
private: true,
|
||||
};
|
||||
|
||||
// good
|
||||
const superman = {
|
||||
defaults: { clark: 'kent' },
|
||||
hidden: true,
|
||||
};
|
||||
```
|
||||
|
||||
<a name="objects--reserved-words-2"></a><a name="3.3"></a>
|
||||
- [3.3](#objects--reserved-words-2) Use readable synonyms in place of reserved words. jscs: [`disallowIdentifierNames`](http://jscs.info/rule/disallowIdentifierNames)
|
||||
|
||||
```javascript
|
||||
// bad
|
||||
const superman = {
|
||||
class: 'alien',
|
||||
};
|
||||
|
||||
// bad
|
||||
const superman = {
|
||||
klass: 'alien',
|
||||
};
|
||||
|
||||
// good
|
||||
const superman = {
|
||||
type: 'alien',
|
||||
};
|
||||
```
|
||||
|
||||
<a name="es6-computed-properties"></a><a name="3.4"></a>
|
||||
- [3.4](#es6-computed-properties) Use computed property names when creating objects with dynamic property names.
|
||||
|
||||
@@ -512,30 +475,32 @@ Other Style Guides
|
||||
// bad
|
||||
const name = "Capt. Janeway";
|
||||
|
||||
// bad - template literals should contain interpolation or newlines
|
||||
const name = `Capt. Janeway`;
|
||||
|
||||
// good
|
||||
const name = 'Capt. Janeway';
|
||||
```
|
||||
|
||||
<a name="strings--line-length"></a><a name="6.2"></a>
|
||||
- [6.2](#strings--line-length) Strings that cause the line to go over 100 characters should be written across multiple lines using string concatenation.
|
||||
- [6.2](#strings--line-length) Strings that cause the line to go over 100 characters should not be written across multiple lines using string concatenation.
|
||||
|
||||
<a name="strings--concat-perf"></a><a name="6.3"></a>
|
||||
- [6.3](#strings--concat-perf) Note: If overused, long strings with concatenation could impact performance. [jsPerf](http://jsperf.com/ya-string-concat) & [Discussion](https://github.com/airbnb/javascript/issues/40).
|
||||
> Why? Broken strings are painful to work with and make code less searchable.
|
||||
|
||||
```javascript
|
||||
// bad
|
||||
const errorMessage = 'This is a super long error that was thrown because of Batman. When you stop to think about how Batman had anything to do with this, you would get nowhere fast.';
|
||||
|
||||
// bad
|
||||
const errorMessage = 'This is a super long error that was thrown because \
|
||||
of Batman. When you stop to think about how Batman had anything to do \
|
||||
with this, you would get nowhere \
|
||||
fast.';
|
||||
|
||||
// good
|
||||
// bad
|
||||
const errorMessage = 'This is a super long error that was thrown because ' +
|
||||
'of Batman. When you stop to think about how Batman had anything to do ' +
|
||||
'with this, you would get nowhere fast.';
|
||||
|
||||
// good
|
||||
const errorMessage = 'This is a super long error that was thrown because of Batman. When you stop to think about how Batman had anything to do with this, you would get nowhere fast.';
|
||||
```
|
||||
|
||||
<a name="es6-template-literals"></a><a name="6.4"></a>
|
||||
@@ -588,7 +553,7 @@ Other Style Guides
|
||||
## Functions
|
||||
|
||||
<a name="functions--declarations"></a><a name="7.1"></a>
|
||||
- [7.1](#functions--declarations) Use function declarations instead of function expressions. jscs: [`requireFunctionDeclarations`](http://jscs.info/rule/requireFunctionDeclarations)
|
||||
- [7.1](#functions--declarations) Use function declarations instead of function expressions. eslint: [`func-style`](http://eslint.org/docs/rules/func-style) jscs: [`requireFunctionDeclarations`](http://jscs.info/rule/requireFunctionDeclarations)
|
||||
|
||||
> Why? Function declarations are named, so they're easier to identify in call stacks. Also, the whole body of a function declaration is hoisted, whereas only the reference of a function expression is hoisted. This rule makes it possible to always use [Arrow Functions](#arrow-functions) in place of function expressions.
|
||||
|
||||
@@ -730,7 +695,7 @@ Other Style Guides
|
||||
```
|
||||
|
||||
<a name="functions--constructor"></a><a name="7.10"></a>
|
||||
- [7.10](#functions--constructor) Never use the Function constructor to create a new function.
|
||||
- [7.10](#functions--constructor) Never use the Function constructor to create a new function. eslint: [`no-new-func`](http://eslint.org/docs/rules/no-new-func)
|
||||
|
||||
> Why? Creating a function in this way evaluates a string similarly to eval(), which opens vulnerabilities.
|
||||
|
||||
@@ -743,7 +708,7 @@ Other Style Guides
|
||||
```
|
||||
|
||||
<a name="functions--signature-spacing"></a><a name="7.11"></a>
|
||||
- [7.11](#functions--signature-spacing) Spacing in a function signature.
|
||||
- [7.11](#functions--signature-spacing) Spacing in a function signature. eslint: [`space-before-function-paren`](http://eslint.org/docs/rules/space-before-function-paren) [`space-before-blocks`](http://eslint.org/docs/rules/space-before-blocks)
|
||||
|
||||
> Why? Consistency is good, and you shouldn’t have to add or remove a space when adding or removing a name.
|
||||
|
||||
@@ -799,6 +764,27 @@ Other Style Guides
|
||||
}
|
||||
```
|
||||
|
||||
<a name="functions--spread-vs-apply"></a><a name="7.14"></a>
|
||||
- [7.14](#functions--spread-vs-apply) Prefer the use of the spread operator `...` to call variadic functions. eslint: [`prefer-spread`](http://eslint.org/docs/rules/prefer-spread)
|
||||
|
||||
> Why? It's cleaner, you don't need to supply a context, and you can not easily compose `new` with `apply`.
|
||||
|
||||
```javascript
|
||||
// bad
|
||||
const x = [1, 2, 3, 4, 5];
|
||||
console.log.apply(console, x);
|
||||
|
||||
// good
|
||||
const x = [1, 2, 3, 4, 5];
|
||||
console.log(...x);
|
||||
|
||||
// bad
|
||||
new (Function.prototype.bind.apply(Date, [null, 2016, 08, 05]));
|
||||
|
||||
// good
|
||||
new Date(...[2016, 08, 05]);
|
||||
```
|
||||
|
||||
**[⬆ back to top](#table-of-contents)**
|
||||
|
||||
## Arrow Functions
|
||||
@@ -1334,7 +1320,7 @@ Other Style Guides
|
||||
## Variables
|
||||
|
||||
<a name="variables--const"></a><a name="13.1"></a>
|
||||
- [13.1](#variables--const) Always use `const` to declare variables. Not doing so will result in global variables. We want to avoid polluting the global namespace. Captain Planet warned us of that.
|
||||
- [13.1](#variables--const) Always use `const` to declare variables. Not doing so will result in global variables. We want to avoid polluting the global namespace. Captain Planet warned us of that. eslint: [`no-undef`](http://eslint.org/docs/rules/no-undef) [`prefer-const`](http://eslint.org/docs/rules/prefer-const)
|
||||
|
||||
```javascript
|
||||
// bad
|
||||
@@ -1431,6 +1417,38 @@ Other Style Guides
|
||||
return name;
|
||||
}
|
||||
```
|
||||
<a name="variables--no-chain-assignment"></a><a name="13.5"></a>
|
||||
- [13.5](#variables--no-chain-assignment) Don't chain variable assignments.
|
||||
|
||||
> Why? Chaining variable assignments creates implicit global variables.
|
||||
|
||||
```javascript
|
||||
// bad
|
||||
(function example() {
|
||||
// JavaScript interprets this as
|
||||
// let a = ( b = ( c = 1 ) );
|
||||
// The let keyword only applies to variable a; variables b and c become
|
||||
// global variables.
|
||||
let a = b = c = 1;
|
||||
}());
|
||||
|
||||
console.log(a); // undefined
|
||||
console.log(b); // 1
|
||||
console.log(c); // 1
|
||||
|
||||
// good
|
||||
(function example() {
|
||||
let a = 1;
|
||||
let b = a;
|
||||
let c = a;
|
||||
}());
|
||||
|
||||
console.log(a); // undefined
|
||||
console.log(b); // undefined
|
||||
console.log(c); // undefined
|
||||
|
||||
// the same applies for `const`
|
||||
```
|
||||
|
||||
**[⬆ back to top](#table-of-contents)**
|
||||
|
||||
@@ -2362,7 +2380,7 @@ Other Style Guides
|
||||
## Naming Conventions
|
||||
|
||||
<a name="naming--descriptive"></a><a name="22.1"></a>
|
||||
- [22.1](#naming--descriptive) Avoid single letter names. Be descriptive with your naming.
|
||||
- [22.1](#naming--descriptive) Avoid single letter names. Be descriptive with your naming. eslint: [`id-length`](http://eslint.org/docs/rules/id-length)
|
||||
|
||||
```javascript
|
||||
// bad
|
||||
@@ -2883,6 +2901,7 @@ Other Style Guides
|
||||
- **JSSolutions**: [JSSolutions/javascript](https://github.com/JSSolutions/javascript)
|
||||
- **KickorStick**: [kickorstick/javascript](https://github.com/kickorstick/javascript)
|
||||
- **Kinetica Solutions**: [kinetica/javascript](https://github.com/kinetica/Javascript-style-guide)
|
||||
- **M2GEN**: [M2GEN/javascript](https://github.com/M2GEN/javascript)
|
||||
- **Mighty Spring**: [mightyspring/javascript](https://github.com/mightyspring/javascript)
|
||||
- **MinnPost**: [MinnPost/javascript](https://github.com/MinnPost/javascript)
|
||||
- **MitocGroup**: [MitocGroup/javascript](https://github.com/MitocGroup/javascript)
|
||||
@@ -2904,6 +2923,7 @@ Other Style Guides
|
||||
- **Shutterfly**: [shutterfly/javascript](https://github.com/shutterfly/javascript)
|
||||
- **Springload**: [springload/javascript](https://github.com/springload/javascript)
|
||||
- **StratoDem Analytics**: [stratodem/javascript](https://github.com/stratodem/javascript)
|
||||
- **SteelKiwi Development**: [steelkiwi/javascript](https://github.com/steelkiwi/javascript)
|
||||
- **StudentSphere**: [studentsphere/javascript](https://github.com/studentsphere/guide-javascript)
|
||||
- **SysGarage**: [sysgarage/javascript-style-guide](https://github.com/sysgarage/javascript-style-guide)
|
||||
- **Syzygy Warsaw**: [syzygypl/javascript](https://github.com/syzygypl/javascript)
|
||||
|
||||
1753
es5/README.md
1753
es5/README.md
File diff suppressed because it is too large
Load Diff
@@ -1,3 +1,14 @@
|
||||
5.0.3 / 2016-08-21
|
||||
==================
|
||||
- [fix] correct `import/extensions` list (#1013)
|
||||
- [refactor] Changed ESLint rule configs to use 'off', 'warn', and 'error' instead of numbers for better readability (#946)
|
||||
- [deps] update `eslint`, `eslint-plugin-react`
|
||||
|
||||
5.0.2 / 2016-08-12
|
||||
==================
|
||||
- [deps] update `eslint`, `eslint-find-rules`, `eslint-plugin-import`
|
||||
- [tests] add `safe-publish-latest` to `prepublish`
|
||||
|
||||
5.0.1 / 2016-07-29
|
||||
==================
|
||||
- [patch] `no-unused-expressions`: flesh out options
|
||||
|
||||
@@ -13,6 +13,6 @@ module.exports = {
|
||||
sourceType: 'module',
|
||||
},
|
||||
rules: {
|
||||
strict: 2,
|
||||
strict: 'error',
|
||||
}
|
||||
};
|
||||
|
||||
@@ -16,6 +16,6 @@ module.exports = {
|
||||
ecmaFeatures: {},
|
||||
globals: {},
|
||||
rules: {
|
||||
'comma-dangle': [2, 'never']
|
||||
'comma-dangle': ['error', 'never']
|
||||
}
|
||||
};
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "eslint-config-airbnb-base",
|
||||
"version": "5.0.1",
|
||||
"version": "5.0.3",
|
||||
"description": "Airbnb's base JS ESLint config, following our styleguide",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"lint": "eslint .",
|
||||
"tests-only": "babel-tape-runner ./test/test-*.js",
|
||||
"prepublish": "(in-install || eslint-find-rules --unused) && (not-in-publish || npm test)",
|
||||
"prepublish": "(in-install || eslint-find-rules --unused) && (not-in-publish || npm test) && safe-publish-latest",
|
||||
"pretest": "npm run --silent lint",
|
||||
"test": "npm run --silent tests-only",
|
||||
"travis": "npm run --silent test"
|
||||
@@ -47,15 +47,16 @@
|
||||
"devDependencies": {
|
||||
"babel-preset-airbnb": "^2.0.0",
|
||||
"babel-tape-runner": "^2.0.1",
|
||||
"eslint": "^3.2.0",
|
||||
"eslint-find-rules": "^1.11.1",
|
||||
"eslint-plugin-import": "^1.12.0",
|
||||
"eslint": "^3.3.1",
|
||||
"eslint-find-rules": "^1.13.0",
|
||||
"eslint-plugin-import": "^1.13.0",
|
||||
"in-publish": "^2.0.0",
|
||||
"safe-publish-latest": "^1.0.1",
|
||||
"tape": "^4.6.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"eslint": "^3.2.0",
|
||||
"eslint-plugin-import": "^1.12.0"
|
||||
"eslint": "^3.3.1",
|
||||
"eslint-plugin-import": "^1.13.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 4"
|
||||
|
||||
@@ -1,61 +1,61 @@
|
||||
module.exports = {
|
||||
rules: {
|
||||
// enforces getter/setter pairs in objects
|
||||
'accessor-pairs': 0,
|
||||
'accessor-pairs': 'off',
|
||||
|
||||
// enforces return statements in callbacks of array's methods
|
||||
// http://eslint.org/docs/rules/array-callback-return
|
||||
'array-callback-return': 2,
|
||||
'array-callback-return': 'error',
|
||||
|
||||
// treat var statements as if they were block scoped
|
||||
'block-scoped-var': 2,
|
||||
'block-scoped-var': 'error',
|
||||
|
||||
// specify the maximum cyclomatic complexity allowed in a program
|
||||
complexity: [0, 11],
|
||||
complexity: ['off', 11],
|
||||
|
||||
// require return statements to either always or never specify values
|
||||
'consistent-return': 2,
|
||||
'consistent-return': 'error',
|
||||
|
||||
// specify curly brace conventions for all control statements
|
||||
curly: [2, 'multi-line'],
|
||||
curly: ['error', 'multi-line'],
|
||||
|
||||
// require default case in switch statements
|
||||
'default-case': [2, { commentPattern: '^no default$' }],
|
||||
'default-case': ['error', { commentPattern: '^no default$' }],
|
||||
|
||||
// encourages use of dot notation whenever possible
|
||||
'dot-notation': [2, { allowKeywords: true }],
|
||||
'dot-notation': ['error', { allowKeywords: true }],
|
||||
|
||||
// enforces consistent newlines before or after dots
|
||||
// http://eslint.org/docs/rules/dot-location
|
||||
'dot-location': [2, 'property'],
|
||||
'dot-location': ['error', 'property'],
|
||||
|
||||
// require the use of === and !==
|
||||
// http://eslint.org/docs/rules/eqeqeq
|
||||
eqeqeq: [2, 'allow-null'],
|
||||
eqeqeq: ['error', 'allow-null'],
|
||||
|
||||
// make sure for-in loops have an if statement
|
||||
'guard-for-in': 2,
|
||||
'guard-for-in': 'error',
|
||||
|
||||
// disallow the use of alert, confirm, and prompt
|
||||
'no-alert': 1,
|
||||
'no-alert': 'warn',
|
||||
|
||||
// disallow use of arguments.caller or arguments.callee
|
||||
'no-caller': 2,
|
||||
'no-caller': 'error',
|
||||
|
||||
// disallow lexical declarations in case/default clauses
|
||||
// http://eslint.org/docs/rules/no-case-declarations.html
|
||||
'no-case-declarations': 2,
|
||||
'no-case-declarations': 'error',
|
||||
|
||||
// disallow division operators explicitly at beginning of regular expression
|
||||
// http://eslint.org/docs/rules/no-div-regex
|
||||
'no-div-regex': 0,
|
||||
'no-div-regex': 'off',
|
||||
|
||||
// disallow else after a return in an if
|
||||
'no-else-return': 2,
|
||||
'no-else-return': 'error',
|
||||
|
||||
// disallow empty functions, except for standalone funcs/arrows
|
||||
// http://eslint.org/docs/rules/no-empty-function
|
||||
'no-empty-function': [2, {
|
||||
'no-empty-function': ['error', {
|
||||
allow: [
|
||||
'arrowFunctions',
|
||||
'functions',
|
||||
@@ -65,33 +65,37 @@ module.exports = {
|
||||
|
||||
// disallow empty destructuring patterns
|
||||
// http://eslint.org/docs/rules/no-empty-pattern
|
||||
'no-empty-pattern': 2,
|
||||
'no-empty-pattern': 'error',
|
||||
|
||||
// disallow comparisons to null without a type-checking operator
|
||||
'no-eq-null': 0,
|
||||
'no-eq-null': 'off',
|
||||
|
||||
// disallow use of eval()
|
||||
'no-eval': 2,
|
||||
'no-eval': 'error',
|
||||
|
||||
// disallow adding to native types
|
||||
'no-extend-native': 2,
|
||||
'no-extend-native': 'error',
|
||||
|
||||
// disallow unnecessary function binding
|
||||
'no-extra-bind': 2,
|
||||
'no-extra-bind': 'error',
|
||||
|
||||
// disallow Unnecessary Labels
|
||||
// http://eslint.org/docs/rules/no-extra-label
|
||||
'no-extra-label': 2,
|
||||
'no-extra-label': 'error',
|
||||
|
||||
// disallow fallthrough of case statements
|
||||
'no-fallthrough': 2,
|
||||
'no-fallthrough': 'error',
|
||||
|
||||
// disallow the use of leading or trailing decimal points in numeric literals
|
||||
'no-floating-decimal': 2,
|
||||
'no-floating-decimal': 'error',
|
||||
|
||||
// disallow reassignments of native objects or read-only globals
|
||||
// http://eslint.org/docs/rules/no-global-assign
|
||||
'no-global-assign': ['error', { exceptions: [] }],
|
||||
|
||||
// disallow implicit type conversions
|
||||
// http://eslint.org/docs/rules/no-implicit-coercion
|
||||
'no-implicit-coercion': [0, {
|
||||
'no-implicit-coercion': ['off', {
|
||||
boolean: false,
|
||||
number: true,
|
||||
string: true,
|
||||
@@ -100,29 +104,29 @@ module.exports = {
|
||||
|
||||
// disallow var and named functions in global scope
|
||||
// http://eslint.org/docs/rules/no-implicit-globals
|
||||
'no-implicit-globals': 0,
|
||||
'no-implicit-globals': 'off',
|
||||
|
||||
// disallow use of eval()-like methods
|
||||
'no-implied-eval': 2,
|
||||
'no-implied-eval': 'error',
|
||||
|
||||
// disallow this keywords outside of classes or class-like objects
|
||||
'no-invalid-this': 0,
|
||||
'no-invalid-this': 'off',
|
||||
|
||||
// disallow usage of __iterator__ property
|
||||
'no-iterator': 2,
|
||||
'no-iterator': 'error',
|
||||
|
||||
// disallow use of labels for anything other then loops and switches
|
||||
'no-labels': [2, { allowLoop: false, allowSwitch: false }],
|
||||
'no-labels': ['error', { allowLoop: false, allowSwitch: false }],
|
||||
|
||||
// disallow unnecessary nested blocks
|
||||
'no-lone-blocks': 2,
|
||||
'no-lone-blocks': 'error',
|
||||
|
||||
// disallow creation of functions within loops
|
||||
'no-loop-func': 2,
|
||||
'no-loop-func': 'error',
|
||||
|
||||
// disallow magic numbers
|
||||
// http://eslint.org/docs/rules/no-magic-numbers
|
||||
'no-magic-numbers': [0, {
|
||||
'no-magic-numbers': ['off', {
|
||||
ignore: [],
|
||||
ignoreArrayIndexes: true,
|
||||
enforceConst: true,
|
||||
@@ -130,106 +134,107 @@ module.exports = {
|
||||
}],
|
||||
|
||||
// disallow use of multiple spaces
|
||||
'no-multi-spaces': 2,
|
||||
'no-multi-spaces': 'error',
|
||||
|
||||
// disallow use of multiline strings
|
||||
'no-multi-str': 2,
|
||||
'no-multi-str': 'error',
|
||||
|
||||
// disallow reassignments of native objects
|
||||
'no-native-reassign': 2,
|
||||
// TODO: deprecated in favor of no-global-assign
|
||||
'no-native-reassign': 'off',
|
||||
|
||||
// disallow use of new operator when not part of the assignment or comparison
|
||||
'no-new': 2,
|
||||
'no-new': 'error',
|
||||
|
||||
// disallow use of new operator for Function object
|
||||
'no-new-func': 2,
|
||||
'no-new-func': 'error',
|
||||
|
||||
// disallows creating new instances of String, Number, and Boolean
|
||||
'no-new-wrappers': 2,
|
||||
'no-new-wrappers': 'error',
|
||||
|
||||
// disallow use of (old style) octal literals
|
||||
'no-octal': 2,
|
||||
'no-octal': 'error',
|
||||
|
||||
// disallow use of octal escape sequences in string literals, such as
|
||||
// var foo = 'Copyright \251';
|
||||
'no-octal-escape': 2,
|
||||
'no-octal-escape': 'error',
|
||||
|
||||
// disallow reassignment of function parameters
|
||||
// disallow parameter object manipulation
|
||||
// rule: http://eslint.org/docs/rules/no-param-reassign.html
|
||||
'no-param-reassign': [2, { props: true }],
|
||||
'no-param-reassign': ['error', { props: true }],
|
||||
|
||||
// disallow usage of __proto__ property
|
||||
'no-proto': 2,
|
||||
'no-proto': 'error',
|
||||
|
||||
// disallow declaring the same variable more then once
|
||||
'no-redeclare': 2,
|
||||
'no-redeclare': 'error',
|
||||
|
||||
// disallow use of assignment in return statement
|
||||
'no-return-assign': 2,
|
||||
'no-return-assign': 'error',
|
||||
|
||||
// disallow use of `javascript:` urls.
|
||||
'no-script-url': 2,
|
||||
'no-script-url': 'error',
|
||||
|
||||
// disallow self assignment
|
||||
// http://eslint.org/docs/rules/no-self-assign
|
||||
'no-self-assign': 2,
|
||||
'no-self-assign': 'error',
|
||||
|
||||
// disallow comparisons where both sides are exactly the same
|
||||
'no-self-compare': 2,
|
||||
'no-self-compare': 'error',
|
||||
|
||||
// disallow use of comma operator
|
||||
'no-sequences': 2,
|
||||
'no-sequences': 'error',
|
||||
|
||||
// restrict what can be thrown as an exception
|
||||
'no-throw-literal': 2,
|
||||
'no-throw-literal': 'error',
|
||||
|
||||
// disallow unmodified conditions of loops
|
||||
// http://eslint.org/docs/rules/no-unmodified-loop-condition
|
||||
'no-unmodified-loop-condition': 0,
|
||||
'no-unmodified-loop-condition': 'off',
|
||||
|
||||
// disallow usage of expressions in statement position
|
||||
'no-unused-expressions': [2, {
|
||||
'no-unused-expressions': ['error', {
|
||||
allowShortCircuit: false,
|
||||
allowTernary: false,
|
||||
}],
|
||||
|
||||
// disallow unused labels
|
||||
// http://eslint.org/docs/rules/no-unused-labels
|
||||
'no-unused-labels': 2,
|
||||
'no-unused-labels': 'error',
|
||||
|
||||
// disallow unnecessary .call() and .apply()
|
||||
'no-useless-call': 0,
|
||||
'no-useless-call': 'off',
|
||||
|
||||
// disallow useless string concatenation
|
||||
// http://eslint.org/docs/rules/no-useless-concat
|
||||
'no-useless-concat': 2,
|
||||
'no-useless-concat': 'error',
|
||||
|
||||
// disallow unnecessary string escaping
|
||||
// http://eslint.org/docs/rules/no-useless-escape
|
||||
'no-useless-escape': 2,
|
||||
'no-useless-escape': 'error',
|
||||
|
||||
// disallow use of void operator
|
||||
// http://eslint.org/docs/rules/no-void
|
||||
'no-void': 2,
|
||||
'no-void': 'error',
|
||||
|
||||
// disallow usage of configurable warning terms in comments: e.g. todo
|
||||
'no-warning-comments': [0, { terms: ['todo', 'fixme', 'xxx'], location: 'start' }],
|
||||
'no-warning-comments': ['off', { terms: ['todo', 'fixme', 'xxx'], location: 'start' }],
|
||||
|
||||
// disallow use of the with statement
|
||||
'no-with': 2,
|
||||
'no-with': 'error',
|
||||
|
||||
// require use of the second argument for parseInt()
|
||||
radix: 2,
|
||||
radix: 'error',
|
||||
|
||||
// requires to declare all vars on top of their containing scope
|
||||
'vars-on-top': 2,
|
||||
'vars-on-top': 'error',
|
||||
|
||||
// require immediate function invocation to be wrapped in parentheses
|
||||
// http://eslint.org/docs/rules/wrap-iife.html
|
||||
'wrap-iife': [2, 'outside'],
|
||||
'wrap-iife': ['error', 'outside'],
|
||||
|
||||
// require or disallow Yoda conditions
|
||||
yoda: 2
|
||||
yoda: 'error'
|
||||
}
|
||||
};
|
||||
|
||||
@@ -1,103 +1,113 @@
|
||||
module.exports = {
|
||||
rules: {
|
||||
// require trailing commas in multiline object literals
|
||||
'comma-dangle': [2, 'always-multiline'],
|
||||
'comma-dangle': ['error', 'always-multiline'],
|
||||
|
||||
// disallow assignment in conditional expressions
|
||||
'no-cond-assign': [2, 'always'],
|
||||
'no-cond-assign': ['error', 'always'],
|
||||
|
||||
// disallow use of console
|
||||
'no-console': 1,
|
||||
'no-console': 'warn',
|
||||
|
||||
// disallow use of constant expressions in conditions
|
||||
'no-constant-condition': 1,
|
||||
'no-constant-condition': 'warn',
|
||||
|
||||
// disallow control characters in regular expressions
|
||||
'no-control-regex': 2,
|
||||
'no-control-regex': 'error',
|
||||
|
||||
// disallow use of debugger
|
||||
'no-debugger': 2,
|
||||
'no-debugger': 'error',
|
||||
|
||||
// disallow duplicate arguments in functions
|
||||
'no-dupe-args': 2,
|
||||
'no-dupe-args': 'error',
|
||||
|
||||
// disallow duplicate keys when creating object literals
|
||||
'no-dupe-keys': 2,
|
||||
'no-dupe-keys': 'error',
|
||||
|
||||
// disallow a duplicate case label.
|
||||
'no-duplicate-case': 2,
|
||||
'no-duplicate-case': 'error',
|
||||
|
||||
// disallow empty statements
|
||||
'no-empty': 2,
|
||||
'no-empty': 'error',
|
||||
|
||||
// disallow the use of empty character classes in regular expressions
|
||||
'no-empty-character-class': 2,
|
||||
'no-empty-character-class': 'error',
|
||||
|
||||
// disallow assigning to the exception in a catch block
|
||||
'no-ex-assign': 2,
|
||||
'no-ex-assign': 'error',
|
||||
|
||||
// disallow double-negation boolean casts in a boolean context
|
||||
// http://eslint.org/docs/rules/no-extra-boolean-cast
|
||||
'no-extra-boolean-cast': 2,
|
||||
'no-extra-boolean-cast': 'error',
|
||||
|
||||
// disallow unnecessary parentheses
|
||||
// http://eslint.org/docs/rules/no-extra-parens
|
||||
'no-extra-parens': [0, 'all', {
|
||||
'no-extra-parens': ['off', 'all', {
|
||||
conditionalAssign: true,
|
||||
nestedBinaryExpressions: false,
|
||||
returnAssign: false,
|
||||
}],
|
||||
|
||||
// disallow unnecessary semicolons
|
||||
'no-extra-semi': 2,
|
||||
'no-extra-semi': 'error',
|
||||
|
||||
// disallow overwriting functions written as function declarations
|
||||
'no-func-assign': 2,
|
||||
'no-func-assign': 'error',
|
||||
|
||||
// disallow function or variable declarations in nested blocks
|
||||
'no-inner-declarations': 2,
|
||||
'no-inner-declarations': 'error',
|
||||
|
||||
// disallow invalid regular expression strings in the RegExp constructor
|
||||
'no-invalid-regexp': 2,
|
||||
'no-invalid-regexp': 'error',
|
||||
|
||||
// disallow irregular whitespace outside of strings and comments
|
||||
'no-irregular-whitespace': 2,
|
||||
'no-irregular-whitespace': 'error',
|
||||
|
||||
// disallow negation of the left operand of an in expression
|
||||
'no-negated-in-lhs': 2,
|
||||
// TODO: deprecated in favor of no-unsafe-negation
|
||||
'no-negated-in-lhs': 'off',
|
||||
|
||||
// disallow the use of object properties of the global object (Math and JSON) as functions
|
||||
'no-obj-calls': 2,
|
||||
'no-obj-calls': 'error',
|
||||
|
||||
// disallow use of Object.prototypes builtins directly
|
||||
// http://eslint.org/docs/rules/no-prototype-builtins
|
||||
'no-prototype-builtins': 2,
|
||||
'no-prototype-builtins': 'error',
|
||||
|
||||
// disallow multiple spaces in a regular expression literal
|
||||
'no-regex-spaces': 2,
|
||||
'no-regex-spaces': 'error',
|
||||
|
||||
// disallow sparse arrays
|
||||
'no-sparse-arrays': 2,
|
||||
'no-sparse-arrays': 'error',
|
||||
|
||||
// Disallow template literal placeholder syntax in regular strings
|
||||
// http://eslint.org/docs/rules/no-template-curly-in-string
|
||||
// TODO: enable, semver-major
|
||||
'no-template-curly-in-string': 'off',
|
||||
|
||||
// Avoid code that looks like two expressions but is actually one
|
||||
// http://eslint.org/docs/rules/no-unexpected-multiline
|
||||
'no-unexpected-multiline': 2,
|
||||
'no-unexpected-multiline': 'error',
|
||||
|
||||
// disallow unreachable statements after a return, throw, continue, or break statement
|
||||
'no-unreachable': 2,
|
||||
'no-unreachable': 'error',
|
||||
|
||||
// disallow return/throw/break/continue inside finally blocks
|
||||
// http://eslint.org/docs/rules/no-unsafe-finally
|
||||
'no-unsafe-finally': 2,
|
||||
'no-unsafe-finally': 'error',
|
||||
|
||||
// disallow negating the left operand of relational operators
|
||||
// http://eslint.org/docs/rules/no-unsafe-negation
|
||||
'no-unsafe-negation': 'error',
|
||||
|
||||
// disallow comparisons with the value NaN
|
||||
'use-isnan': 2,
|
||||
'use-isnan': 'error',
|
||||
|
||||
// ensure JSDoc comments are valid
|
||||
// http://eslint.org/docs/rules/valid-jsdoc
|
||||
'valid-jsdoc': 0,
|
||||
'valid-jsdoc': 'off',
|
||||
|
||||
// ensure that the results of typeof are compared against a valid string
|
||||
'valid-typeof': 2
|
||||
'valid-typeof': 'error'
|
||||
}
|
||||
};
|
||||
|
||||
@@ -14,89 +14,89 @@ module.exports = {
|
||||
rules: {
|
||||
// enforces no braces where they can be omitted
|
||||
// http://eslint.org/docs/rules/arrow-body-style
|
||||
'arrow-body-style': [2, 'as-needed'],
|
||||
'arrow-body-style': ['error', 'as-needed'],
|
||||
|
||||
// require parens in arrow function arguments
|
||||
'arrow-parens': 0,
|
||||
'arrow-parens': 'off',
|
||||
|
||||
// require space before/after arrow function's arrow
|
||||
// http://eslint.org/docs/rules/arrow-spacing
|
||||
'arrow-spacing': [2, { before: true, after: true }],
|
||||
'arrow-spacing': ['error', { before: true, after: true }],
|
||||
|
||||
// verify super() callings in constructors
|
||||
'constructor-super': 2,
|
||||
'constructor-super': 'error',
|
||||
|
||||
// enforce the spacing around the * in generator functions
|
||||
// http://eslint.org/docs/rules/generator-star-spacing
|
||||
'generator-star-spacing': [2, { before: false, after: true }],
|
||||
'generator-star-spacing': ['error', { before: false, after: true }],
|
||||
|
||||
// disallow modifying variables of class declarations
|
||||
// http://eslint.org/docs/rules/no-class-assign
|
||||
'no-class-assign': 2,
|
||||
'no-class-assign': 'error',
|
||||
|
||||
// disallow arrow functions where they could be confused with comparisons
|
||||
// http://eslint.org/docs/rules/no-confusing-arrow
|
||||
'no-confusing-arrow': [2, {
|
||||
'no-confusing-arrow': ['error', {
|
||||
allowParens: true,
|
||||
}],
|
||||
|
||||
// disallow modifying variables that are declared using const
|
||||
'no-const-assign': 2,
|
||||
'no-const-assign': 'error',
|
||||
|
||||
// disallow duplicate class members
|
||||
// http://eslint.org/docs/rules/no-dupe-class-members
|
||||
'no-dupe-class-members': 2,
|
||||
'no-dupe-class-members': 'error',
|
||||
|
||||
// disallow importing from the same path more than once
|
||||
// http://eslint.org/docs/rules/no-duplicate-imports
|
||||
'no-duplicate-imports': 2,
|
||||
'no-duplicate-imports': 'error',
|
||||
|
||||
// disallow symbol constructor
|
||||
// http://eslint.org/docs/rules/no-new-symbol
|
||||
'no-new-symbol': 2,
|
||||
'no-new-symbol': 'error',
|
||||
|
||||
// disallow specific imports
|
||||
// http://eslint.org/docs/rules/no-restricted-imports
|
||||
'no-restricted-imports': 0,
|
||||
'no-restricted-imports': 'off',
|
||||
|
||||
// disallow to use this/super before super() calling in constructors.
|
||||
// http://eslint.org/docs/rules/no-this-before-super
|
||||
'no-this-before-super': 2,
|
||||
'no-this-before-super': 'error',
|
||||
|
||||
// disallow useless computed property keys
|
||||
// http://eslint.org/docs/rules/no-useless-computed-key
|
||||
'no-useless-computed-key': 2,
|
||||
'no-useless-computed-key': 'error',
|
||||
|
||||
// disallow unnecessary constructor
|
||||
// http://eslint.org/docs/rules/no-useless-constructor
|
||||
'no-useless-constructor': 2,
|
||||
'no-useless-constructor': 'error',
|
||||
|
||||
// disallow renaming import, export, and destructured assignments to the same name
|
||||
// http://eslint.org/docs/rules/no-useless-rename
|
||||
'no-useless-rename': [2, {
|
||||
'no-useless-rename': ['error', {
|
||||
ignoreDestructuring: false,
|
||||
ignoreImport: false,
|
||||
ignoreExport: false,
|
||||
}],
|
||||
|
||||
// require let or const instead of var
|
||||
'no-var': 2,
|
||||
'no-var': 'error',
|
||||
|
||||
// require method and property shorthand syntax for object literals
|
||||
// http://eslint.org/docs/rules/object-shorthand
|
||||
'object-shorthand': [2, 'always', {
|
||||
'object-shorthand': ['error', 'always', {
|
||||
ignoreConstructors: false,
|
||||
avoidQuotes: true,
|
||||
}],
|
||||
|
||||
// suggest using arrow functions as callbacks
|
||||
'prefer-arrow-callback': [2, {
|
||||
'prefer-arrow-callback': ['error', {
|
||||
allowNamedFunctions: false,
|
||||
allowUnboundThis: true,
|
||||
}],
|
||||
|
||||
// suggest using of const declaration for variables that are never modified after declared
|
||||
'prefer-const': [2, {
|
||||
'prefer-const': ['error', {
|
||||
destructuring: 'any',
|
||||
ignoreReadBeforeAssign: true,
|
||||
}],
|
||||
@@ -104,31 +104,31 @@ module.exports = {
|
||||
// suggest using Reflect methods where applicable
|
||||
// http://eslint.org/docs/rules/prefer-reflect
|
||||
// TODO: enable
|
||||
'prefer-reflect': 0,
|
||||
'prefer-reflect': 'off',
|
||||
|
||||
// use rest parameters instead of arguments
|
||||
// http://eslint.org/docs/rules/prefer-rest-params
|
||||
'prefer-rest-params': 2,
|
||||
'prefer-rest-params': 'error',
|
||||
|
||||
// suggest using the spread operator instead of .apply()
|
||||
// http://eslint.org/docs/rules/prefer-spread
|
||||
'prefer-spread': 2,
|
||||
'prefer-spread': 'error',
|
||||
|
||||
// suggest using template literals instead of string concatenation
|
||||
// http://eslint.org/docs/rules/prefer-template
|
||||
'prefer-template': 2,
|
||||
'prefer-template': 'error',
|
||||
|
||||
// disallow generator functions that do not have yield
|
||||
// http://eslint.org/docs/rules/require-yield
|
||||
'require-yield': 2,
|
||||
'require-yield': 'error',
|
||||
|
||||
// enforce spacing between object rest-spread
|
||||
// http://eslint.org/docs/rules/rest-spread-spacing
|
||||
'rest-spread-spacing': [2, 'never'],
|
||||
'rest-spread-spacing': ['error', 'never'],
|
||||
|
||||
// import sorting
|
||||
// http://eslint.org/docs/rules/sort-imports
|
||||
'sort-imports': [0, {
|
||||
'sort-imports': ['off', {
|
||||
ignoreCase: false,
|
||||
ignoreMemberSort: false,
|
||||
memberSyntaxSortOrder: ['none', 'all', 'multiple', 'single'],
|
||||
@@ -136,10 +136,10 @@ module.exports = {
|
||||
|
||||
// enforce usage of spacing in template strings
|
||||
// http://eslint.org/docs/rules/template-curly-spacing
|
||||
'template-curly-spacing': 2,
|
||||
'template-curly-spacing': 'error',
|
||||
|
||||
// enforce spacing around the * in yield* expressions
|
||||
// http://eslint.org/docs/rules/yield-star-spacing
|
||||
'yield-star-spacing': [2, 'after']
|
||||
'yield-star-spacing': ['error', 'after']
|
||||
}
|
||||
};
|
||||
|
||||
@@ -17,7 +17,8 @@ module.exports = {
|
||||
}
|
||||
},
|
||||
'import/extensions': [
|
||||
'node_modules',
|
||||
'.js',
|
||||
'.jsx',
|
||||
],
|
||||
'import/core-modules': [
|
||||
],
|
||||
@@ -32,101 +33,101 @@ module.exports = {
|
||||
|
||||
// ensure imports point to files/modules that can be resolved
|
||||
// https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-unresolved.md
|
||||
'import/no-unresolved': [2, { commonjs: true }],
|
||||
'import/no-unresolved': ['error', { commonjs: true }],
|
||||
|
||||
// ensure named imports coupled with named exports
|
||||
// https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/named.md#when-not-to-use-it
|
||||
'import/named': 0,
|
||||
'import/named': 'off',
|
||||
|
||||
// ensure default import coupled with default export
|
||||
// https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/default.md#when-not-to-use-it
|
||||
'import/default': 0,
|
||||
'import/default': 'off',
|
||||
|
||||
// https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/namespace.md
|
||||
'import/namespace': 0,
|
||||
'import/namespace': 'off',
|
||||
|
||||
// Helpful warnings:
|
||||
|
||||
// disallow invalid exports, e.g. multiple defaults
|
||||
// https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/export.md
|
||||
'import/export': 2,
|
||||
'import/export': 'error',
|
||||
|
||||
// do not allow a default import name to match a named export
|
||||
// https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-named-as-default.md
|
||||
'import/no-named-as-default': 2,
|
||||
'import/no-named-as-default': 'error',
|
||||
|
||||
// warn on accessing default export property names that are also named exports
|
||||
// https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-named-as-default-member.md
|
||||
'import/no-named-as-default-member': 2,
|
||||
'import/no-named-as-default-member': 'error',
|
||||
|
||||
// disallow use of jsdoc-marked-deprecated imports
|
||||
// https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-deprecated.md
|
||||
'import/no-deprecated': 0,
|
||||
'import/no-deprecated': 'off',
|
||||
|
||||
// Forbid the use of extraneous packages
|
||||
// https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-extraneous-dependencies.md
|
||||
'import/no-extraneous-dependencies': [2, {
|
||||
'import/no-extraneous-dependencies': ['error', {
|
||||
devDependencies: false,
|
||||
optionalDependencies: false,
|
||||
}],
|
||||
|
||||
// Forbid mutable exports
|
||||
// https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-mutable-exports.md
|
||||
'import/no-mutable-exports': 2,
|
||||
'import/no-mutable-exports': 'error',
|
||||
|
||||
// Module systems:
|
||||
|
||||
// disallow require()
|
||||
// https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-commonjs.md
|
||||
'import/no-commonjs': 0,
|
||||
'import/no-commonjs': 'off',
|
||||
|
||||
// disallow AMD require/define
|
||||
// https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-amd.md
|
||||
'import/no-amd': 2,
|
||||
'import/no-amd': 'error',
|
||||
|
||||
// No Node.js builtin modules
|
||||
// https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-nodejs-modules.md
|
||||
// TODO: enable?
|
||||
'import/no-nodejs-modules': 0,
|
||||
'import/no-nodejs-modules': 'off',
|
||||
|
||||
// Style guide:
|
||||
|
||||
// disallow non-import statements appearing before import statements
|
||||
// https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/imports-first.md
|
||||
'import/imports-first': [2, 'absolute-first'],
|
||||
'import/imports-first': ['error', 'absolute-first'],
|
||||
|
||||
// disallow duplicate imports
|
||||
// https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-duplicates.md
|
||||
'import/no-duplicates': 2,
|
||||
'import/no-duplicates': 'error',
|
||||
|
||||
// disallow namespace imports
|
||||
// TODO: enable?
|
||||
// https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-namespace.md
|
||||
'import/no-namespace': 0,
|
||||
'import/no-namespace': 'off',
|
||||
|
||||
// Ensure consistent use of file extension within the import path
|
||||
// https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/extensions.md
|
||||
// TODO: enable when https://github.com/benmosher/eslint-plugin-import/issues/390 is resolved
|
||||
'import/extensions': [0, 'never'],
|
||||
'import/extensions': ['off', 'never'],
|
||||
|
||||
// Enforce a convention in module import order
|
||||
// https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/order.md
|
||||
// TODO: enable?
|
||||
'import/order': [0, {
|
||||
'import/order': ['off', {
|
||||
groups: ['builtin', 'external', 'internal', 'parent', 'sibling', 'index'],
|
||||
'newlines-between': 'never',
|
||||
}],
|
||||
|
||||
// Require a newline after the last import/require in a group
|
||||
// https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/newline-after-import.md
|
||||
'import/newline-after-import': 2,
|
||||
'import/newline-after-import': 'error',
|
||||
|
||||
// Require modules with a single export to use a default export
|
||||
// https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/prefer-default-export.md
|
||||
'import/prefer-default-export': 2,
|
||||
'import/prefer-default-export': 'error',
|
||||
|
||||
// Restrict which files can be imported in a given folder
|
||||
// https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-restricted-paths.md
|
||||
'import/no-restricted-paths': 0,
|
||||
'import/no-restricted-paths': 'off',
|
||||
},
|
||||
};
|
||||
|
||||
@@ -5,35 +5,35 @@ module.exports = {
|
||||
|
||||
rules: {
|
||||
// enforce return after a callback
|
||||
'callback-return': 0,
|
||||
'callback-return': 'off',
|
||||
|
||||
// require all requires be top-level
|
||||
// http://eslint.org/docs/rules/global-require
|
||||
'global-require': 2,
|
||||
'global-require': 'error',
|
||||
|
||||
// enforces error handling in callbacks (node environment)
|
||||
'handle-callback-err': 0,
|
||||
'handle-callback-err': 'off',
|
||||
|
||||
// disallow mixing regular variable and require declarations
|
||||
'no-mixed-requires': [0, false],
|
||||
'no-mixed-requires': ['off', false],
|
||||
|
||||
// disallow use of new operator with the require function
|
||||
'no-new-require': 2,
|
||||
'no-new-require': 'error',
|
||||
|
||||
// disallow string concatenation with __dirname and __filename
|
||||
// http://eslint.org/docs/rules/no-path-concat
|
||||
'no-path-concat': 2,
|
||||
'no-path-concat': 'error',
|
||||
|
||||
// disallow use of process.env
|
||||
'no-process-env': 0,
|
||||
'no-process-env': 'off',
|
||||
|
||||
// disallow process.exit()
|
||||
'no-process-exit': 0,
|
||||
'no-process-exit': 'off',
|
||||
|
||||
// restrict usage of specified node modules
|
||||
'no-restricted-modules': 0,
|
||||
'no-restricted-modules': 'off',
|
||||
|
||||
// disallow use of synchronous methods (off by default)
|
||||
'no-sync': 0,
|
||||
'no-sync': 'off',
|
||||
}
|
||||
};
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
module.exports = {
|
||||
rules: {
|
||||
// babel inserts `'use strict';` for us
|
||||
strict: [2, 'never']
|
||||
strict: ['error', 'never']
|
||||
}
|
||||
};
|
||||
|
||||
@@ -1,63 +1,68 @@
|
||||
module.exports = {
|
||||
rules: {
|
||||
// enforce spacing inside array brackets
|
||||
'array-bracket-spacing': [2, 'never'],
|
||||
'array-bracket-spacing': ['error', 'never'],
|
||||
|
||||
// enforce spacing inside single-line blocks
|
||||
// http://eslint.org/docs/rules/block-spacing
|
||||
'block-spacing': [2, 'always'],
|
||||
'block-spacing': ['error', 'always'],
|
||||
|
||||
// enforce one true brace style
|
||||
'brace-style': [2, '1tbs', { allowSingleLine: true }],
|
||||
'brace-style': ['error', '1tbs', { allowSingleLine: true }],
|
||||
|
||||
// require camel case names
|
||||
camelcase: [2, { properties: 'never' }],
|
||||
camelcase: ['error', { properties: 'never' }],
|
||||
|
||||
// enforce spacing before and after comma
|
||||
'comma-spacing': [2, { before: false, after: true }],
|
||||
'comma-spacing': ['error', { before: false, after: true }],
|
||||
|
||||
// enforce one true comma style
|
||||
'comma-style': [2, 'last'],
|
||||
'comma-style': ['error', 'last'],
|
||||
|
||||
// disallow padding inside computed properties
|
||||
'computed-property-spacing': [2, 'never'],
|
||||
'computed-property-spacing': ['error', 'never'],
|
||||
|
||||
// enforces consistent naming when capturing the current execution context
|
||||
'consistent-this': 0,
|
||||
'consistent-this': 'off',
|
||||
|
||||
// enforce newline at the end of file, with no multiple empty lines
|
||||
'eol-last': 2,
|
||||
'eol-last': 'error',
|
||||
|
||||
// enforce spacing between functions and their invocations
|
||||
// http://eslint.org/docs/rules/func-call-spacing
|
||||
// TODO: enable, semver-minor
|
||||
'func-call-spacing': ['off', 'never'],
|
||||
|
||||
// require function expressions to have a name
|
||||
'func-names': 1,
|
||||
'func-names': 'warn',
|
||||
|
||||
// enforces use of function declarations or expressions
|
||||
'func-style': 0,
|
||||
'func-style': 'off',
|
||||
|
||||
// Blacklist certain identifiers to prevent them being used
|
||||
// http://eslint.org/docs/rules/id-blacklist
|
||||
'id-blacklist': 0,
|
||||
'id-blacklist': 'off',
|
||||
|
||||
// this option enforces minimum and maximum identifier lengths
|
||||
// (variable names, property names etc.)
|
||||
'id-length': 0,
|
||||
'id-length': 'off',
|
||||
|
||||
// require identifiers to match the provided regular expression
|
||||
'id-match': 0,
|
||||
'id-match': 'off',
|
||||
|
||||
// this option sets a specific tab width for your code
|
||||
// http://eslint.org/docs/rules/indent
|
||||
indent: [2, 2, { SwitchCase: 1, VariableDeclarator: 1, outerIIFEBody: 1 }],
|
||||
indent: ['error', 2, { SwitchCase: 1, VariableDeclarator: 1, outerIIFEBody: 1 }],
|
||||
|
||||
// specify whether double or single quotes should be used in JSX attributes
|
||||
// http://eslint.org/docs/rules/jsx-quotes
|
||||
'jsx-quotes': [0, 'prefer-double'],
|
||||
'jsx-quotes': ['off', 'prefer-double'],
|
||||
|
||||
// enforces spacing between keys and values in object literal properties
|
||||
'key-spacing': [2, { beforeColon: false, afterColon: true }],
|
||||
'key-spacing': ['error', { beforeColon: false, afterColon: true }],
|
||||
|
||||
// require a space before & after certain keywords
|
||||
'keyword-spacing': [2, {
|
||||
'keyword-spacing': ['error', {
|
||||
before: true,
|
||||
after: true,
|
||||
overrides: {
|
||||
@@ -69,86 +74,86 @@ module.exports = {
|
||||
|
||||
// disallow mixed 'LF' and 'CRLF' as linebreaks
|
||||
// http://eslint.org/docs/rules/linebreak-style
|
||||
'linebreak-style': [2, 'unix'],
|
||||
'linebreak-style': ['error', 'unix'],
|
||||
|
||||
// enforces empty lines around comments
|
||||
'lines-around-comment': 0,
|
||||
'lines-around-comment': 'off',
|
||||
|
||||
// specify the maximum depth that blocks can be nested
|
||||
'max-depth': [0, 4],
|
||||
'max-depth': ['off', 4],
|
||||
|
||||
// specify the maximum length of a line in your program
|
||||
// http://eslint.org/docs/rules/max-len
|
||||
'max-len': [2, 100, 2, {
|
||||
'max-len': ['error', 100, 2, {
|
||||
ignoreUrls: true,
|
||||
ignoreComments: false
|
||||
}],
|
||||
|
||||
// specify the max number of lines in a file
|
||||
// http://eslint.org/docs/rules/max-lines
|
||||
'max-lines': [0, {
|
||||
'max-lines': ['off', {
|
||||
max: 300,
|
||||
skipBlankLines: true,
|
||||
skipComments: true
|
||||
}],
|
||||
|
||||
// specify the maximum depth callbacks can be nested
|
||||
'max-nested-callbacks': 0,
|
||||
'max-nested-callbacks': 'off',
|
||||
|
||||
// limits the number of parameters that can be used in the function declaration.
|
||||
'max-params': [0, 3],
|
||||
'max-params': ['off', 3],
|
||||
|
||||
// specify the maximum number of statement allowed in a function
|
||||
'max-statements': [0, 10],
|
||||
'max-statements': ['off', 10],
|
||||
|
||||
// restrict the number of statements per line
|
||||
// http://eslint.org/docs/rules/max-statements-per-line
|
||||
'max-statements-per-line': [0, { max: 1 }],
|
||||
'max-statements-per-line': ['off', { max: 1 }],
|
||||
|
||||
// require multiline ternary
|
||||
// http://eslint.org/docs/rules/multiline-ternary
|
||||
'multiline-ternary': 0,
|
||||
'multiline-ternary': 'off',
|
||||
|
||||
// require a capital letter for constructors
|
||||
'new-cap': [2, { newIsCap: true }],
|
||||
'new-cap': ['error', { newIsCap: true }],
|
||||
|
||||
// disallow the omission of parentheses when invoking a constructor with no arguments
|
||||
// http://eslint.org/docs/rules/new-parens
|
||||
'new-parens': 2,
|
||||
'new-parens': 'error',
|
||||
|
||||
// allow/disallow an empty newline after var statement
|
||||
'newline-after-var': 0,
|
||||
'newline-after-var': 'off',
|
||||
|
||||
// http://eslint.org/docs/rules/newline-before-return
|
||||
'newline-before-return': 0,
|
||||
'newline-before-return': 'off',
|
||||
|
||||
// enforces new line after each method call in the chain to make it
|
||||
// more readable and easy to maintain
|
||||
// http://eslint.org/docs/rules/newline-per-chained-call
|
||||
'newline-per-chained-call': [2, { ignoreChainWithDepth: 4 }],
|
||||
'newline-per-chained-call': ['error', { ignoreChainWithDepth: 4 }],
|
||||
|
||||
// disallow use of the Array constructor
|
||||
'no-array-constructor': 2,
|
||||
'no-array-constructor': 'error',
|
||||
|
||||
// disallow use of bitwise operators
|
||||
// http://eslint.org/docs/rules/no-bitwise
|
||||
// TODO: enable
|
||||
'no-bitwise': 0,
|
||||
'no-bitwise': 'off',
|
||||
|
||||
// disallow use of the continue statement
|
||||
// http://eslint.org/docs/rules/no-continue
|
||||
'no-continue': 2,
|
||||
'no-continue': 'error',
|
||||
|
||||
// disallow comments inline after code
|
||||
'no-inline-comments': 0,
|
||||
'no-inline-comments': 'off',
|
||||
|
||||
// disallow if as the only statement in an else block
|
||||
// http://eslint.org/docs/rules/no-lonely-if
|
||||
'no-lonely-if': 2,
|
||||
'no-lonely-if': 'error',
|
||||
|
||||
// disallow un-paren'd mixes of different operators
|
||||
// http://eslint.org/docs/rules/no-mixed-operators
|
||||
'no-mixed-operators': [2, {
|
||||
'no-mixed-operators': ['error', {
|
||||
groups: [
|
||||
['+', '-', '*', '/', '%', '**'],
|
||||
['&', '|', '^', '~', '<<', '>>', '>>>'],
|
||||
@@ -160,28 +165,28 @@ module.exports = {
|
||||
}],
|
||||
|
||||
// disallow mixed spaces and tabs for indentation
|
||||
'no-mixed-spaces-and-tabs': 2,
|
||||
'no-mixed-spaces-and-tabs': 'error',
|
||||
|
||||
// disallow multiple empty lines and only one newline at the end
|
||||
'no-multiple-empty-lines': [2, { max: 2, maxEOF: 1 }],
|
||||
'no-multiple-empty-lines': ['error', { max: 2, maxEOF: 1 }],
|
||||
|
||||
// disallow negated conditions
|
||||
// http://eslint.org/docs/rules/no-negated-condition
|
||||
'no-negated-condition': 0,
|
||||
'no-negated-condition': 'off',
|
||||
|
||||
// disallow nested ternary expressions
|
||||
'no-nested-ternary': 2,
|
||||
'no-nested-ternary': 'error',
|
||||
|
||||
// disallow use of the Object constructor
|
||||
'no-new-object': 2,
|
||||
'no-new-object': 'error',
|
||||
|
||||
// disallow use of unary operators, ++ and --
|
||||
'no-plusplus': 0,
|
||||
'no-plusplus': 'off',
|
||||
|
||||
// disallow certain syntax forms
|
||||
// http://eslint.org/docs/rules/no-restricted-syntax
|
||||
'no-restricted-syntax': [
|
||||
2,
|
||||
'error',
|
||||
'DebuggerStatement',
|
||||
'ForInStatement',
|
||||
'LabeledStatement',
|
||||
@@ -189,100 +194,103 @@ module.exports = {
|
||||
],
|
||||
|
||||
// disallow space between function identifier and application
|
||||
'no-spaced-func': 2,
|
||||
'no-spaced-func': 'error',
|
||||
|
||||
// disallow tab characters entirely
|
||||
// TODO: enable
|
||||
'no-tabs': 0,
|
||||
'no-tabs': 'off',
|
||||
|
||||
// disallow the use of ternary operators
|
||||
'no-ternary': 0,
|
||||
'no-ternary': 'off',
|
||||
|
||||
// disallow trailing whitespace at the end of lines
|
||||
'no-trailing-spaces': 2,
|
||||
'no-trailing-spaces': 'error',
|
||||
|
||||
// disallow dangling underscores in identifiers
|
||||
'no-underscore-dangle': [2, { allowAfterThis: false }],
|
||||
'no-underscore-dangle': ['error', { allowAfterThis: false }],
|
||||
|
||||
// disallow the use of Boolean literals in conditional expressions
|
||||
// also, prefer `a || b` over `a ? a : b`
|
||||
// http://eslint.org/docs/rules/no-unneeded-ternary
|
||||
'no-unneeded-ternary': [2, { defaultAssignment: false }],
|
||||
'no-unneeded-ternary': ['error', { defaultAssignment: false }],
|
||||
|
||||
// disallow whitespace before properties
|
||||
// http://eslint.org/docs/rules/no-whitespace-before-property
|
||||
'no-whitespace-before-property': 2,
|
||||
'no-whitespace-before-property': 'error',
|
||||
|
||||
// require padding inside curly braces
|
||||
'object-curly-spacing': [2, 'always'],
|
||||
'object-curly-spacing': ['error', 'always'],
|
||||
|
||||
// enforce line breaks between braces
|
||||
// http://eslint.org/docs/rules/object-curly-newline
|
||||
// TODO: enable once https://github.com/eslint/eslint/issues/6488 is resolved
|
||||
'object-curly-newline': [0, {
|
||||
'object-curly-newline': ['off', {
|
||||
ObjectExpression: { minProperties: 0, multiline: true },
|
||||
ObjectPattern: { minProperties: 0, multiline: true }
|
||||
}],
|
||||
|
||||
// enforce "same line" or "multiple line" on object properties.
|
||||
// http://eslint.org/docs/rules/object-property-newline
|
||||
'object-property-newline': [2, {
|
||||
'object-property-newline': ['error', {
|
||||
allowMultiplePropertiesPerLine: true,
|
||||
}],
|
||||
|
||||
// allow just one var statement per function
|
||||
'one-var': [2, 'never'],
|
||||
'one-var': ['error', 'never'],
|
||||
|
||||
// require a newline around variable declaration
|
||||
// http://eslint.org/docs/rules/one-var-declaration-per-line
|
||||
'one-var-declaration-per-line': [2, 'always'],
|
||||
'one-var-declaration-per-line': ['error', 'always'],
|
||||
|
||||
// require assignment operator shorthand where possible or prohibit it entirely
|
||||
// http://eslint.org/docs/rules/operator-assignment
|
||||
'operator-assignment': [2, 'always'],
|
||||
'operator-assignment': ['error', 'always'],
|
||||
|
||||
// enforce operators to be placed before or after line breaks
|
||||
'operator-linebreak': 0,
|
||||
'operator-linebreak': 'off',
|
||||
|
||||
// enforce padding within blocks
|
||||
'padded-blocks': [2, 'never'],
|
||||
'padded-blocks': ['error', 'never'],
|
||||
|
||||
// require quotes around object literal property names
|
||||
// http://eslint.org/docs/rules/quote-props.html
|
||||
'quote-props': [2, 'as-needed', { keywords: false, unnecessary: true, numbers: false }],
|
||||
'quote-props': ['error', 'as-needed', { keywords: false, unnecessary: true, numbers: false }],
|
||||
|
||||
// specify whether double or single quotes should be used
|
||||
quotes: [2, 'single', { avoidEscape: true }],
|
||||
quotes: ['error', 'single', { avoidEscape: true }],
|
||||
|
||||
// do not require jsdoc
|
||||
// http://eslint.org/docs/rules/require-jsdoc
|
||||
'require-jsdoc': 0,
|
||||
'require-jsdoc': 'off',
|
||||
|
||||
// require or disallow use of semicolons instead of ASI
|
||||
semi: [2, 'always'],
|
||||
semi: ['error', 'always'],
|
||||
|
||||
// enforce spacing before and after semicolons
|
||||
'semi-spacing': [2, { before: false, after: true }],
|
||||
'semi-spacing': ['error', { before: false, after: true }],
|
||||
|
||||
// requires object keys to be sorted
|
||||
'sort-keys': ['off', 'asc', { caseSensitive: false, natural: true }],
|
||||
|
||||
// sort variables within the same declaration block
|
||||
'sort-vars': 0,
|
||||
'sort-vars': 'off',
|
||||
|
||||
// require or disallow space before blocks
|
||||
'space-before-blocks': 2,
|
||||
'space-before-blocks': 'error',
|
||||
|
||||
// require or disallow space before function opening parenthesis
|
||||
// http://eslint.org/docs/rules/space-before-function-paren
|
||||
'space-before-function-paren': [2, { anonymous: 'always', named: 'never' }],
|
||||
'space-before-function-paren': ['error', { anonymous: 'always', named: 'never' }],
|
||||
|
||||
// require or disallow spaces inside parentheses
|
||||
'space-in-parens': [2, 'never'],
|
||||
'space-in-parens': ['error', 'never'],
|
||||
|
||||
// require spaces around operators
|
||||
'space-infix-ops': 2,
|
||||
'space-infix-ops': 'error',
|
||||
|
||||
// Require or disallow spaces before/after unary operators
|
||||
// http://eslint.org/docs/rules/space-unary-ops
|
||||
'space-unary-ops': [2, {
|
||||
'space-unary-ops': ['error', {
|
||||
words: true,
|
||||
nonwords: false,
|
||||
overrides: {
|
||||
@@ -290,16 +298,16 @@ module.exports = {
|
||||
}],
|
||||
|
||||
// require or disallow a space immediately following the // or /* in a comment
|
||||
'spaced-comment': [2, 'always', {
|
||||
'spaced-comment': ['error', 'always', {
|
||||
exceptions: ['-', '+'],
|
||||
markers: ['=', '!'] // space here to support sprockets directives
|
||||
}],
|
||||
|
||||
// require or disallow the Unicode Byte Order Mark
|
||||
// http://eslint.org/docs/rules/unicode-bom
|
||||
'unicode-bom': [2, 'never'],
|
||||
'unicode-bom': ['error', 'never'],
|
||||
|
||||
// require regex literals to be wrapped in parentheses
|
||||
'wrap-regex': 0
|
||||
'wrap-regex': 'off'
|
||||
}
|
||||
};
|
||||
|
||||
@@ -1,41 +1,41 @@
|
||||
module.exports = {
|
||||
rules: {
|
||||
// enforce or disallow variable initializations at definition
|
||||
'init-declarations': 0,
|
||||
'init-declarations': 'off',
|
||||
|
||||
// disallow the catch clause parameter name being the same as a variable in the outer scope
|
||||
'no-catch-shadow': 0,
|
||||
'no-catch-shadow': 'off',
|
||||
|
||||
// disallow deletion of variables
|
||||
'no-delete-var': 2,
|
||||
'no-delete-var': 'error',
|
||||
|
||||
// disallow labels that share a name with a variable
|
||||
// http://eslint.org/docs/rules/no-label-var
|
||||
'no-label-var': 2,
|
||||
'no-label-var': 'error',
|
||||
|
||||
// disallow specific globals
|
||||
'no-restricted-globals': 0,
|
||||
'no-restricted-globals': 'off',
|
||||
|
||||
// disallow declaration of variables already declared in the outer scope
|
||||
'no-shadow': 2,
|
||||
'no-shadow': 'error',
|
||||
|
||||
// disallow shadowing of names such as arguments
|
||||
'no-shadow-restricted-names': 2,
|
||||
'no-shadow-restricted-names': 'error',
|
||||
|
||||
// disallow use of undeclared variables unless mentioned in a /*global */ block
|
||||
'no-undef': 2,
|
||||
'no-undef': 'error',
|
||||
|
||||
// disallow use of undefined when initializing variables
|
||||
'no-undef-init': 2,
|
||||
'no-undef-init': 'error',
|
||||
|
||||
// disallow use of undefined variable
|
||||
// TODO: enable?
|
||||
'no-undefined': 0,
|
||||
'no-undefined': 'off',
|
||||
|
||||
// disallow declaration of variables that are not used in the code
|
||||
'no-unused-vars': [2, { vars: 'local', args: 'after-used' }],
|
||||
'no-unused-vars': ['error', { vars: 'local', args: 'after-used' }],
|
||||
|
||||
// disallow use of variables before they are defined
|
||||
'no-use-before-define': 2
|
||||
'no-use-before-define': 'error'
|
||||
}
|
||||
};
|
||||
|
||||
@@ -1,3 +1,41 @@
|
||||
10.0.1 / 2016-08-12
|
||||
==================
|
||||
- [deps] update `eslint`, `eslint-find-rules`, `eslint-plugin-jsx-a11y`, `eslint-plugin-import`, `eslint-config-airbnb-base`
|
||||
|
||||
10.0.0 / 2016-08-01
|
||||
==================
|
||||
- [breaking] enable jsx-a11y rules:
|
||||
- `jsx-a11y/heading-has-content`
|
||||
- `jsx-a11y/html-has-lang`
|
||||
- `jsx-a11y/lang`
|
||||
- `jsx-a11y/no-marquee`
|
||||
- `jsx-a11y/scope`
|
||||
- `jsx-a11y/href-no-hash`
|
||||
- `jsx-a11y/label-has-for`
|
||||
- [breaking] enable aria rules:
|
||||
- `jsx-a11y/aria-props`
|
||||
- `jsx-a11y/aria-proptypes`
|
||||
- `jsx-a11y/aria-unsupported-elements`
|
||||
- `jsx-a11y/role-has-required-aria-props`
|
||||
- `jsx-a11y/role-supports-aria-props`
|
||||
- [breaking] enable react rules:
|
||||
- `react/jsx-filename-extension`
|
||||
- `react/jsx-no-comment-textnodes`
|
||||
- `react/jsx-no-target-blank`
|
||||
- `react/require-extension`
|
||||
- `react/no-render-return-value`
|
||||
- `react/no-find-dom-node`
|
||||
- `react/no-deprecated`
|
||||
- [deps] [breaking] update `eslint` to v3, `eslint-config-airbnb-base` to v5, `eslint-find-rules`, `eslint-plugin-import`, `eslint-plugin-jsx-a11y` to v2, `eslint-plugin-react` to v6, `tape`. drop node < 4 support.
|
||||
- [deps] update `eslint-config-airbnb-base`, `eslint-plugin-react`, `eslint-plugin-import`, `eslint-plugin-jsx-a11y`, `babel-tape-runner`, add `babel-preset-airbnb`. ensure react is `>=` 0.13.0
|
||||
- [patch] loosen `jsx-pascal-case` rule to allow all caps component names
|
||||
- [tests] stop testing < node 4
|
||||
- [tests] use `in-publish` because coffeescript screwed up the prepublish script for everyone
|
||||
- [tests] Only run `eslint-find-rules` on prepublish, not in tests
|
||||
- [tests] Even though the base config may not be up to date in the main package, let’s `npm link` the base package into the main one for the sake of travis-ci tests
|
||||
- [docs] update the peer dep install command to dynamically look up the right version numbers when installing peer deps
|
||||
- add `safe-publish-latest` to `prepublish`
|
||||
|
||||
9.0.1 / 2016-05-08
|
||||
==================
|
||||
- [patch] update `eslint-config-airbnb-base` to v3.0.1
|
||||
|
||||
@@ -27,6 +27,7 @@ Our default export contains all of our ESLint rules, including ECMAScript 6+ and
|
||||
```
|
||||
|
||||
2. Add `"extends": "airbnb"` to your .eslintrc
|
||||
|
||||
### eslint-config-airbnb/base
|
||||
|
||||
This entry point is deprecated. See [eslint-config-airbnb-base](https://npmjs.com/eslint-config-airbnb-base).
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "eslint-config-airbnb",
|
||||
"version": "9.0.1",
|
||||
"version": "10.0.1",
|
||||
"description": "Airbnb's ESLint config, following our styleguide",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"lint": "eslint .",
|
||||
"tests-only": "babel-tape-runner ./test/test-*.js",
|
||||
"prepublish": "(in-install || eslint-find-rules --unused) && (not-in-publish || npm test)",
|
||||
"prepublish": "(in-install || eslint-find-rules --unused) && (not-in-publish || npm test) && safe-publish-latest",
|
||||
"pretest": "npm run --silent lint",
|
||||
"test": "npm run --silent tests-only",
|
||||
"travis": "cd ../eslint-config-airbnb-base && npm install && npm link && cd - && npm link eslint-config-airbnb-base && npm run --silent test ; npm unlink eslint-config-airbnb-base >/dev/null &"
|
||||
@@ -45,25 +45,26 @@
|
||||
},
|
||||
"homepage": "https://github.com/airbnb/javascript",
|
||||
"dependencies": {
|
||||
"eslint-config-airbnb-base": "^5.0.1"
|
||||
"eslint-config-airbnb-base": "^5.0.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
"babel-preset-airbnb": "^2.0.0",
|
||||
"babel-tape-runner": "^2.0.1",
|
||||
"eslint": "^3.2.2",
|
||||
"eslint-find-rules": "^1.11.1",
|
||||
"eslint-plugin-import": "^1.12.0",
|
||||
"eslint-plugin-jsx-a11y": "^2.0.1",
|
||||
"eslint-plugin-react": "^6.0.0",
|
||||
"eslint": "^3.3.1",
|
||||
"eslint-find-rules": "^1.13.0",
|
||||
"eslint-plugin-import": "^1.13.0",
|
||||
"eslint-plugin-jsx-a11y": "^2.1.0",
|
||||
"eslint-plugin-react": "^6.1.2",
|
||||
"in-publish": "^2.0.0",
|
||||
"react": ">= 0.13.0",
|
||||
"safe-publish-latest": "^1.0.1",
|
||||
"tape": "^4.6.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"eslint": "^3.2.2",
|
||||
"eslint-plugin-jsx-a11y": "^2.0.1",
|
||||
"eslint-plugin-import": "^1.12.0",
|
||||
"eslint-plugin-react": "^6.0.0"
|
||||
"eslint": "^3.3.1",
|
||||
"eslint-plugin-jsx-a11y": "^2.1.0",
|
||||
"eslint-plugin-import": "^1.13.0",
|
||||
"eslint-plugin-react": "^6.1.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 4"
|
||||
|
||||
@@ -7,94 +7,99 @@ module.exports = {
|
||||
jsx: true
|
||||
},
|
||||
rules: {
|
||||
// Enforce that anchors have content
|
||||
// https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/anchor-has-content.md
|
||||
// TODO: enable, semver-major
|
||||
'jsx-a11y/anchor-has-content': ['off', ['']],
|
||||
|
||||
// Require ARIA roles to be valid and non-abstract
|
||||
// https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/aria-role.md
|
||||
'jsx-a11y/aria-role': 2,
|
||||
'jsx-a11y/aria-role': 'error',
|
||||
|
||||
// Enforce all aria-* props are valid.
|
||||
// https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/aria-props.md
|
||||
'jsx-a11y/aria-props': 2,
|
||||
'jsx-a11y/aria-props': 'error',
|
||||
|
||||
// Enforce ARIA state and property values are valid.
|
||||
// https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/aria-proptypes.md
|
||||
'jsx-a11y/aria-proptypes': 2,
|
||||
'jsx-a11y/aria-proptypes': 'error',
|
||||
|
||||
// Enforce that elements that do not support ARIA roles, states, and
|
||||
// properties do not have those attributes.
|
||||
// https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/aria-unsupported-elements.md
|
||||
'jsx-a11y/aria-unsupported-elements': 2,
|
||||
'jsx-a11y/aria-unsupported-elements': 'error',
|
||||
|
||||
// disallow href "#"
|
||||
// https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/href-no-hash.md
|
||||
'jsx-a11y/href-no-hash': [2, ['a']],
|
||||
'jsx-a11y/href-no-hash': ['error', ['a']],
|
||||
|
||||
// Require <img> to have a non-empty `alt` prop, or role="presentation"
|
||||
// https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/img-has-alt.md
|
||||
'jsx-a11y/img-has-alt': 2,
|
||||
'jsx-a11y/img-has-alt': 'error',
|
||||
|
||||
// Prevent img alt text from containing redundant words like "image", "picture", or "photo"
|
||||
// https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/img-redundant-alt.md
|
||||
'jsx-a11y/img-redundant-alt': 2,
|
||||
'jsx-a11y/img-redundant-alt': 'error',
|
||||
|
||||
// require that JSX labels use "htmlFor"
|
||||
// https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/label-has-for.md
|
||||
'jsx-a11y/label-has-for': [2, ['label']],
|
||||
'jsx-a11y/label-has-for': ['error', ['label']],
|
||||
|
||||
// require that mouseover/out come with focus/blur, for keyboard-only users
|
||||
// TODO: evaluate
|
||||
// https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/mouse-events-have-key-events.md
|
||||
'jsx-a11y/mouse-events-have-key-events': 0,
|
||||
'jsx-a11y/mouse-events-have-key-events': 'off',
|
||||
|
||||
// Prevent use of `accessKey`
|
||||
// https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-access-key.md
|
||||
'jsx-a11y/no-access-key': 2,
|
||||
'jsx-a11y/no-access-key': 'error',
|
||||
|
||||
// require onBlur instead of onChange
|
||||
// https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-onchange.md
|
||||
'jsx-a11y/no-onchange': 0,
|
||||
'jsx-a11y/no-onchange': 'off',
|
||||
|
||||
// Enforce that elements with onClick handlers must be focusable.
|
||||
// TODO: evaluate
|
||||
// https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/onclick-has-focus.md
|
||||
'jsx-a11y/onclick-has-focus': 0,
|
||||
'jsx-a11y/onclick-has-focus': 'off',
|
||||
|
||||
// require things with onClick to have an aria role
|
||||
// https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/onclick-has-role.md
|
||||
'jsx-a11y/onclick-has-role': 0,
|
||||
'jsx-a11y/onclick-has-role': 'off',
|
||||
|
||||
// Enforce that elements with ARIA roles must have all required attributes
|
||||
// for that role.
|
||||
// https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/role-has-required-aria-props.md
|
||||
'jsx-a11y/role-has-required-aria-props': 2,
|
||||
'jsx-a11y/role-has-required-aria-props': 'error',
|
||||
|
||||
// Enforce that elements with explicit or implicit roles defined contain
|
||||
// only aria-* properties supported by that role.
|
||||
// https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/role-supports-aria-props.md
|
||||
'jsx-a11y/role-supports-aria-props': 2,
|
||||
'jsx-a11y/role-supports-aria-props': 'error',
|
||||
|
||||
// Enforce tabIndex value is not greater than zero.
|
||||
// TODO: evaluate
|
||||
// https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/tabindex-no-positive.md
|
||||
'jsx-a11y/tabindex-no-positive': 0,
|
||||
'jsx-a11y/tabindex-no-positive': 'off',
|
||||
|
||||
// ensure <hX> tags have content and are not aria-hidden
|
||||
// https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/heading-has-content.md
|
||||
'jsx-a11y/heading-has-content': [2, ['']],
|
||||
'jsx-a11y/heading-has-content': ['error', ['']],
|
||||
|
||||
// require HTML elements to have a "lang" prop
|
||||
// https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/html-has-lang.md
|
||||
'jsx-a11y/html-has-lang': 2,
|
||||
'jsx-a11y/html-has-lang': 'error',
|
||||
|
||||
// require HTML element's lang prop to be valid
|
||||
// https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/lang.md
|
||||
'jsx-a11y/lang': 2,
|
||||
'jsx-a11y/lang': 'error',
|
||||
|
||||
// prevent marquee elements
|
||||
// https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-marquee.md
|
||||
'jsx-a11y/no-marquee': 2,
|
||||
'jsx-a11y/no-marquee': 'error',
|
||||
|
||||
// only allow <th> to have the "scope" attr
|
||||
// https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/scope.md
|
||||
'jsx-a11y/scope': 2,
|
||||
'jsx-a11y/scope': 'error',
|
||||
},
|
||||
};
|
||||
|
||||
111
packages/eslint-config-airbnb/rules/react.js
vendored
111
packages/eslint-config-airbnb/rules/react.js
vendored
@@ -16,50 +16,50 @@ module.exports = {
|
||||
rules: {
|
||||
// Specify whether double or single quotes should be used in JSX attributes
|
||||
// http://eslint.org/docs/rules/jsx-quotes
|
||||
'jsx-quotes': [2, 'prefer-double'],
|
||||
'jsx-quotes': ['error', 'prefer-double'],
|
||||
|
||||
// Prevent missing displayName in a React component definition
|
||||
// https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/display-name.md
|
||||
'react/display-name': [0, { ignoreTranspilerName: false }],
|
||||
'react/display-name': ['off', { ignoreTranspilerName: false }],
|
||||
|
||||
// Forbid certain propTypes (any, array, object)
|
||||
// https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/forbid-prop-types.md
|
||||
'react/forbid-prop-types': [0, { forbid: ['any', 'array', 'object'] }],
|
||||
'react/forbid-prop-types': ['off', { forbid: ['any', 'array', 'object'] }],
|
||||
|
||||
// Enforce boolean attributes notation in JSX
|
||||
// https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-boolean-value.md
|
||||
'react/jsx-boolean-value': [2, 'never'],
|
||||
'react/jsx-boolean-value': ['error', 'never'],
|
||||
|
||||
// Validate closing bracket location in JSX
|
||||
// https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-closing-bracket-location.md
|
||||
'react/jsx-closing-bracket-location': [2, 'line-aligned'],
|
||||
'react/jsx-closing-bracket-location': ['error', 'line-aligned'],
|
||||
|
||||
// Enforce or disallow spaces inside of curly braces in JSX attributes
|
||||
// https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-curly-spacing.md
|
||||
'react/jsx-curly-spacing': [2, 'never', { allowMultiline: true }],
|
||||
'react/jsx-curly-spacing': ['error', 'never', { allowMultiline: true }],
|
||||
|
||||
// Enforce event handler naming conventions in JSX
|
||||
// https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-handler-names.md
|
||||
'react/jsx-handler-names': [0, {
|
||||
'react/jsx-handler-names': ['off', {
|
||||
eventHandlerPrefix: 'handle',
|
||||
eventHandlerPropPrefix: 'on',
|
||||
}],
|
||||
|
||||
// Validate props indentation in JSX
|
||||
// https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-indent-props.md
|
||||
'react/jsx-indent-props': [2, 2],
|
||||
'react/jsx-indent-props': ['error', 2],
|
||||
|
||||
// Validate JSX has key prop when in array or iterator
|
||||
// https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-key.md
|
||||
'react/jsx-key': 0,
|
||||
'react/jsx-key': 'off',
|
||||
|
||||
// Limit maximum of props on a single line in JSX
|
||||
// https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-max-props-per-line.md
|
||||
'react/jsx-max-props-per-line': [0, { maximum: 1 }],
|
||||
'react/jsx-max-props-per-line': ['off', { maximum: 1 }],
|
||||
|
||||
// Prevent usage of .bind() in JSX props
|
||||
// https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-bind.md
|
||||
'react/jsx-no-bind': [2, {
|
||||
'react/jsx-no-bind': ['error', {
|
||||
ignoreRefs: true,
|
||||
allowArrowFunctions: true,
|
||||
allowBind: false,
|
||||
@@ -67,37 +67,37 @@ module.exports = {
|
||||
|
||||
// Prevent duplicate props in JSX
|
||||
// https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-duplicate-props.md
|
||||
'react/jsx-no-duplicate-props': [0, { ignoreCase: false }],
|
||||
'react/jsx-no-duplicate-props': ['off', { ignoreCase: false }],
|
||||
|
||||
// Prevent usage of unwrapped JSX strings
|
||||
// https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-literals.md
|
||||
'react/jsx-no-literals': 0,
|
||||
'react/jsx-no-literals': 'off',
|
||||
|
||||
// Disallow undeclared variables in JSX
|
||||
// https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-undef.md
|
||||
'react/jsx-no-undef': 2,
|
||||
'react/jsx-no-undef': 'error',
|
||||
|
||||
// Enforce PascalCase for user-defined JSX components
|
||||
// https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-pascal-case.md
|
||||
'react/jsx-pascal-case': [2, {
|
||||
'react/jsx-pascal-case': ['error', {
|
||||
allowAllCaps: true,
|
||||
ignore: [],
|
||||
}],
|
||||
|
||||
// Enforce propTypes declarations alphabetical sorting
|
||||
// https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/sort-prop-types.md
|
||||
'react/sort-prop-types': [0, {
|
||||
'react/sort-prop-types': ['off', {
|
||||
ignoreCase: false,
|
||||
callbacksLast: false,
|
||||
requiredFirst: false,
|
||||
}],
|
||||
|
||||
// Deprecated in favor of react/jsx-sort-props
|
||||
'react/jsx-sort-prop-types': 0,
|
||||
'react/jsx-sort-prop-types': 'off',
|
||||
|
||||
// Enforce props alphabetical sorting
|
||||
// https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-sort-props.md
|
||||
'react/jsx-sort-props': [0, {
|
||||
'react/jsx-sort-props': ['off', {
|
||||
ignoreCase: false,
|
||||
callbacksLast: false,
|
||||
shorthandFirst: false,
|
||||
@@ -106,87 +106,87 @@ module.exports = {
|
||||
|
||||
// Prevent React to be incorrectly marked as unused
|
||||
// https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-uses-react.md
|
||||
'react/jsx-uses-react': [2],
|
||||
'react/jsx-uses-react': ['error'],
|
||||
|
||||
// Prevent variables used in JSX to be incorrectly marked as unused
|
||||
// https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-uses-vars.md
|
||||
'react/jsx-uses-vars': 2,
|
||||
'react/jsx-uses-vars': 'error',
|
||||
|
||||
// Prevent usage of dangerous JSX properties
|
||||
// https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-danger.md
|
||||
'react/no-danger': 0,
|
||||
'react/no-danger': 'off',
|
||||
|
||||
// Prevent usage of deprecated methods
|
||||
// https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-deprecated.md
|
||||
'react/no-deprecated': [2],
|
||||
'react/no-deprecated': ['error'],
|
||||
|
||||
// Prevent usage of setState in componentDidMount
|
||||
// https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-did-mount-set-state.md
|
||||
'react/no-did-mount-set-state': [2],
|
||||
'react/no-did-mount-set-state': ['error'],
|
||||
|
||||
// Prevent usage of setState in componentDidUpdate
|
||||
// https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-did-update-set-state.md
|
||||
'react/no-did-update-set-state': [2],
|
||||
'react/no-did-update-set-state': ['error'],
|
||||
|
||||
// Prevent direct mutation of this.state
|
||||
// https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-direct-mutation-state.md
|
||||
'react/no-direct-mutation-state': 0,
|
||||
'react/no-direct-mutation-state': 'off',
|
||||
|
||||
// Prevent usage of isMounted
|
||||
// https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-is-mounted.md
|
||||
'react/no-is-mounted': 2,
|
||||
'react/no-is-mounted': 'error',
|
||||
|
||||
// Prevent multiple component definition per file
|
||||
// https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-multi-comp.md
|
||||
'react/no-multi-comp': [2, { ignoreStateless: true }],
|
||||
'react/no-multi-comp': ['error', { ignoreStateless: true }],
|
||||
|
||||
// Prevent usage of setState
|
||||
// https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-set-state.md
|
||||
'react/no-set-state': 0,
|
||||
'react/no-set-state': 'off',
|
||||
|
||||
// Prevent using string references
|
||||
// https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-string-refs.md
|
||||
'react/no-string-refs': 2,
|
||||
'react/no-string-refs': 'error',
|
||||
|
||||
// Prevent usage of unknown DOM property
|
||||
// https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-unknown-property.md
|
||||
'react/no-unknown-property': 2,
|
||||
'react/no-unknown-property': 'error',
|
||||
|
||||
// Require ES6 class declarations over React.createClass
|
||||
// https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/prefer-es6-class.md
|
||||
'react/prefer-es6-class': [2, 'always'],
|
||||
'react/prefer-es6-class': ['error', 'always'],
|
||||
|
||||
// Require stateless functions when not using lifecycle methods, setState or ref
|
||||
// https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/prefer-stateless-function.md
|
||||
'react/prefer-stateless-function': 2,
|
||||
'react/prefer-stateless-function': 'error',
|
||||
|
||||
// Prevent missing props validation in a React component definition
|
||||
// https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/prop-types.md
|
||||
'react/prop-types': [2, { ignore: [], customValidators: [] }],
|
||||
'react/prop-types': ['error', { ignore: [], customValidators: [] }],
|
||||
|
||||
// Prevent missing React when using JSX
|
||||
// https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/react-in-jsx-scope.md
|
||||
'react/react-in-jsx-scope': 2,
|
||||
'react/react-in-jsx-scope': 'error',
|
||||
|
||||
// Restrict file extensions that may be required
|
||||
// https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/require-extension.md
|
||||
'react/require-extension': [2, { extensions: ['.jsx', '.js'] }],
|
||||
'react/require-extension': ['error', { extensions: ['.jsx', '.js'] }],
|
||||
|
||||
// Require render() methods to return something
|
||||
// https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/require-render-return.md
|
||||
'react/require-render-return': 2,
|
||||
'react/require-render-return': 'error',
|
||||
|
||||
// Prevent extra closing tags for components without children
|
||||
// https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/self-closing-comp.md
|
||||
'react/self-closing-comp': 2,
|
||||
'react/self-closing-comp': 'error',
|
||||
|
||||
// Enforce spaces before the closing bracket of self-closing JSX elements
|
||||
// https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-space-before-closing.md
|
||||
'react/jsx-space-before-closing': [2, 'always'],
|
||||
'react/jsx-space-before-closing': ['error', 'always'],
|
||||
|
||||
// Enforce component methods order
|
||||
// https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/sort-comp.md
|
||||
'react/sort-comp': [2, {
|
||||
'react/sort-comp': ['error', {
|
||||
order: [
|
||||
'static-methods',
|
||||
'lifecycle',
|
||||
@@ -200,49 +200,58 @@ module.exports = {
|
||||
|
||||
// Prevent missing parentheses around multilines JSX
|
||||
// https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-wrap-multilines.md
|
||||
'react/jsx-wrap-multilines': [2, {
|
||||
'react/jsx-wrap-multilines': ['error', {
|
||||
declaration: true,
|
||||
assignment: true,
|
||||
return: true
|
||||
}],
|
||||
'react/wrap-multilines': 0, // deprecated version
|
||||
'react/wrap-multilines': 'off', // deprecated version
|
||||
|
||||
// Require that the first prop in a JSX element be on a new line when the element is multiline
|
||||
// https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-first-prop-new-line.md
|
||||
'react/jsx-first-prop-new-line': [2, 'multiline'],
|
||||
'react/jsx-first-prop-new-line': ['error', 'multiline'],
|
||||
|
||||
// Enforce spacing around jsx equals signs
|
||||
// https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-equals-spacing.md
|
||||
'react/jsx-equals-spacing': [2, 'never'],
|
||||
'react/jsx-equals-spacing': ['error', 'never'],
|
||||
|
||||
// Enforce JSX indentation
|
||||
// https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-indent.md
|
||||
'react/jsx-indent': [2, 2],
|
||||
'react/jsx-indent': ['error', 2],
|
||||
|
||||
// Disallow target="_blank" on links
|
||||
// https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-target-blank.md
|
||||
'react/jsx-no-target-blank': 2,
|
||||
'react/jsx-no-target-blank': 'error',
|
||||
|
||||
// only .jsx files may have JSX
|
||||
// https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-filename-extension.md
|
||||
'react/jsx-filename-extension': [2, { extensions: ['.jsx'] }],
|
||||
'react/jsx-filename-extension': ['error', { extensions: ['.jsx'] }],
|
||||
|
||||
// prevent accidental JS comments from being injected into JSX as text
|
||||
// https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-comment-textnodes.md
|
||||
'react/jsx-no-comment-textnodes': 2,
|
||||
'react/no-comment-textnodes': 0, // deprecated version
|
||||
'react/jsx-no-comment-textnodes': 'error',
|
||||
'react/no-comment-textnodes': 'off', // deprecated version
|
||||
|
||||
// disallow using React.render/ReactDOM.render's return value
|
||||
// https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-render-return-value.md
|
||||
'react/no-render-return-value': 2,
|
||||
'react/no-render-return-value': 'error',
|
||||
|
||||
// require a shouldComponentUpdate method, or PureRenderMixin
|
||||
// https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/require-optimization.md
|
||||
'react/require-optimization': [0, { allowDecorators: [] }],
|
||||
'react/require-optimization': ['off', { allowDecorators: [] }],
|
||||
|
||||
// warn against using findDOMNode()
|
||||
// https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-find-dom-node.md
|
||||
'react/no-find-dom-node': 2,
|
||||
'react/no-find-dom-node': 'error',
|
||||
|
||||
// Forbid certain props on Components
|
||||
// https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/forbid-component-props.md
|
||||
'react/forbid-component-props': ['off', { forbid: [] }],
|
||||
|
||||
// Prevent problem with children and props.dangerouslySetInnerHTML
|
||||
// https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-danger-with-children.md
|
||||
// TODO: enable, semver-major
|
||||
'react/no-danger-with-children': 'off',
|
||||
},
|
||||
|
||||
settings: {
|
||||
|
||||
@@ -337,7 +337,7 @@
|
||||
|
||||
// good
|
||||
<Foo
|
||||
ref={(ref) => this.myRef = ref}
|
||||
ref={ref => { this.myRef = ref; }}
|
||||
/>
|
||||
```
|
||||
|
||||
@@ -575,5 +575,6 @@
|
||||
-  **Polish**: [pietraszekl/javascript](https://github.com/pietraszekl/javascript/tree/master/react)
|
||||
-  **Korean**: [apple77y/javascript](https://github.com/apple77y/javascript/tree/master/react)
|
||||
-  **Portuguese**: [ronal2do/javascript](https://github.com/ronal2do/airbnb-react-styleguide)
|
||||
-  **Japanese**: [mitsuruog/javascript-style-guide](https://github.com/mitsuruog/javascript-style-guide)
|
||||
|
||||
**[⬆ back to top](#table-of-contents)**
|
||||
|
||||
Reference in New Issue
Block a user