eslint-config-egg
Version:
Node.js Style Guide for EggJS
657 lines (593 loc) • 15.1 kB
JavaScript
module.exports = {
rules: {
/**
* Doesn't enforces getter/setter pairs in objects
* @see http://eslint.org/docs/rules/accessor-pairs
*/
'accessor-pairs': 'off',
/**
* Enforces return statements in callbacks of following array’s methods
*
* ```js
* Array.from
* Array.prototype.every
* Array.prototype.filter
* Array.prototype.find
* Array.prototype.findIndex
* Array.prototype.map
* Array.prototype.reduce
* Array.prototype.reduceRight
* Array.prototype.some
* Array.prototype.sort
* ```
* @see http://eslint.org/docs/rules/array-callback-return
*/
'array-callback-return': 'error',
/**
* Disallows the usage of variables outside of their binding context and
* emulate traditional block scope from other languages.
* @see http://eslint.org/docs/rules/block-scoped-var
* @since 3.0.0
*/
'block-scoped-var': 'error',
/**
* Doesn't limit cyclomatic complexity
* @see http://eslint.org/docs/rules/complexity
*/
complexity: 'off',
/**
* Doesn't require `return` statements to either always or never specify values
* @see http://eslint.org/docs/rules/consistent-return
* @example
*
* ```js
* // correct
* function doSomething(condition) {
* if (condition) {
* return true;
* }
* }
* ```
*/
'consistent-return': 'off',
/**
* Requires following curly brace conventions
*
* 1. You can relax the rule to allow brace-less single-line `if`,
* `else if`, `else`, `for`, `while`, or `do`, while still enforcing the use
* of curly braces for other instances.
*
* @see http://eslint.org/docs/rules/curly
* @example
*
* ```js
* // incorrect
* if (foo)
* doSomething();
* else
* doSomethingElse();
*
* // correct
* if (foo) doSomething();
*
* if (foo) doSomething();
* else doSomethingElse();
*
* do something();
* while (foo);
* ```
*/
curly: [ 'error', 'multi-line' ],
/**
* Requires default case in switch statements.
* You may optionally include a `// no default` after the last case
* if there is no default case
* @see http://eslint.org/docs/rules/default-case
* @since 3.0.0
* @example
*
* ```js
* // correct
* switch (foo) {
* case 1:
* doSomething();
* break;
*
* case 2:
* doSomething();
* break;
*
* // no default
* }
* ```
*/
'default-case': [ 'error', { commentPattern: '^no default$' }],
/**
* Encouraging use of the dot notation style whenever possible
* @see http://eslint.org/docs/rules/dot-notation
* @since 3.0.0
* @example
*
* ```js
* // incorrect
* const x = foo['bar'];
*
* // correct
* const obj = foo.bar;
* const y = foo[arg];
*
* // Specially, to avoid dot notation for reserved word properties,
* // following pattern is accepted
* const foo = bar['class'];
* ```
*/
'dot-notation': [ 'error', { allowKeywords: true }],
/**
* Doesn't enforce newline before and after dot
* @see http://eslint.org/docs/rules/dot-location
* @example
*
* ```js
* // correct
* const a = foo.
* bar;
*
* const b = foo
* .bar;
* ```
*/
'dot-location': 'off',
/**
* Enforces using the type-safe equality operators `===` and
* `!==` instead of their regular counterparts `==` and `!=`.
* Tt permits comparing to null to check for `null` or `undefined`
* in a single expression
* @see http://eslint.org/docs/rules/eqeqeq
* @example
*
* ```js
* // correct
* a === b
* foo === true
* bananas !== 1
* value === undefined
* typeof foo === 'undefined'
* 'hello' !== 'world'
* 0 === 0
* true === true
* foo === null
* foo == null
*
* // incorrect
* a == b
* foo == true
* bananas != 1
* value == undefined
* typeof foo == 'undefined'
* 'hello' != 'world'
* 0 == 0
* true == true
* ```
*/
eqeqeq: [ 'error', 'allow-null' ],
/**
* Doesn't require filtering the results in the loop for
* preventing unexpected behavior
* @see http://eslint.org/docs/rules/guard-for-in
*/
'guard-for-in': 'off',
/**
* Disallow use of alert
* @see http://eslint.org/docs/rules/no-alert
*/
'no-alert': 'error',
/**
* Disallow use of caller/callee
* @see http://eslint.org/docs/rules/no-caller
*/
'no-caller': 'error',
/**
* Disallow lexical declarations in case/default clauses
* @see http://eslint.org/docs/rules/no-case-declarations
* @example
*
* ```js
* // incorrect
* switch (foo) {
* case 1:
* let x = 1;
* break;
* case 2:
* const y = 2;
* break;
* // no default
*
* // correct
* switch (foo) {
* case 1: {
* let x = 1;
* break;
* }
* case 2: {
* const y = 2;
* break;
* }
* // no default
* ```
*/
'no-case-declarations': 'error',
/**
* Disallow regexs that look like division
* @see http://eslint.org/docs/rules/no-div-regex
*/
'no-div-regex': 'off',
/**
* Disallow return before else
* @see http://eslint.org/docs/rules/no-else-return
* @since 3.0.0
*/
'no-else-return': 'error',
/**
* Disallow empty functions
* @see http://eslint.org/docs/rules/no-empty-function
* @example
*
* Specially, these following patterns are permitted
*
* #### `arrowFunctions`
*
* ```js
* const foo = () => {};
* ```
*
* #### `functions`
*
* ```js
* function foo() {}
*
* const foo = function() {};
*
* const obj = {
* foo: function() {}
* };
* ```
*
* #### `methods`
*
* ```js
* const obj = {
* foo() {}
* };
*
* class A {
* foo() {}
* static foo() {}
* }
* ```
*
* #### `constructors`
*
* ```js
* class A {
* constructor(private readonly app: EggCore) {}
* }
*
* Codes bellow are not permitted
*
* ```js
* // generatorFunctions
* function* foo() {}
* const foo = function*() {};
*
* // generatorMethods
* const obj = {
* foo: function*() {},
* *foo() {},
* };
*
* // getters or setters
* const obj = {
* get foo() {},
* set foo(value) {},
* };
*
* // mixed
* const obj = {
* bar: 123,
* foo: () => this.bar,
* *foo() {},
* }
* ```
*/
'no-empty-function': [ 'error', {
allow: [
'arrowFunctions',
'functions',
'methods',
'constructors',
],
}],
/**
* Disallow empty destructuring patterns
* @see http://eslint.org/docs/rules/no-empty-pattern
* @example
*
* ```js
* // incorrect
* const {} = foo;
* const [] = foo;
* const {a: {}} = foo;
* const {a: []} = foo;
* function foo({}) {}
* function foo([]) {}
* function foo({a: {}}) {}
* function foo({a: []}) {}
* ```
*/
'no-empty-pattern': 'error',
/**
* Allow `foo == null`
* @see http://eslint.org/docs/rules/no-eq-null
*/
'no-eq-null': 'off',
/**
* Disallow usage of `eval`
* @see http://eslint.org/docs/rules/no-eval
*/
'no-eval': 'error',
/**
* Disallows directly modifying the prototype of builtin objects
* @see http://eslint.org/docs/rules/no-extend-native
* @example
*
* ```js
* // incorrect
* Object.prototype.a = "a";
* Object.defineProperty(Array.prototype, "times", { value: 999 });
* ```
*/
'no-extend-native': 'error',
/**
* Disallow unnecessary function binding
* @see http://eslint.org/docs/rules/no-extra-bind
*/
'no-extra-bind': 'error',
/**
* If a loop contains no nested loops or switches,
* labeling the loop is unnecessary
* @see http://eslint.org/docs/rules/no-extra-label
*/
'no-extra-label': 'error',
/**
* Disallow case statements fallthrough
* @see http://eslint.org/docs/rules/no-fallthrough
*/
'no-fallthrough': 'error',
/**
* Disallow floating decimals
* @see http://eslint.org/docs/rules/no-floating-decimal
* @since 3.0.0
*/
'no-floating-decimal': 'error',
/**
* Allow the type conversion with shorter notations
* @see http://eslint.org/docs/rules/no-implicit-coercion
* @example
*
* ```js
* // correct
* const b = !!foo;
* const b = ~foo.indexOf(".");
* const n = +foo;
* const n = 1 * foo;
* const s = "" + foo;
* foo += "";
* ```
*/
'no-implicit-coercion': 'off',
/**
* Allow `var` and named functions in global scope
* @see http://eslint.org/docs/rules/no-implicit-globals
*/
'no-implicit-globals': 'off',
/**
* Disallow implied `eval()`
* @see http://eslint.org/docs/rules/no-implied-eval
*/
'no-implied-eval': 'error',
/**
* Allow this keywords outside of classes or class-like objects
* @see http://eslint.org/docs/rules/no-invalid-this
*/
'no-invalid-this': 'off',
/**
* Allow iterator
* @see http://eslint.org/docs/rules/no-iterator
*/
'no-iterator': 'off',
/**
* Disallow labeled statements
* @see http://eslint.org/docs/rules/no-labels
*/
'no-labels': [ 'error', { allowLoop: false, allowSwitch: false }],
/**
* Disallow unnecessary nested blocks
* @see http://eslint.org/docs/rules/no-lone-blocks
*/
'no-lone-blocks': 'error',
/**
* Disallow functions in loops
* @see http://eslint.org/docs/rules/no-loop-func
*/
'no-loop-func': 'error',
/**
* @see http://eslint.org/docs/rules/no-magic-numbers
* @since 3.0.0
*/
'no-magic-numbers': 'off',
/**
* Disallow multiple spaces
* @see http://eslint.org/docs/rules/no-multi-spaces
*/
'no-multi-spaces': 'error',
/**
* Disallow multi-line strings
* @see http://eslint.org/docs/rules/no-multi-str
*/
'no-multi-str': 'error',
/**
* Disallow reassignment of native objects
* @see http://eslint.org/docs/rules/no-native-reassign
*/
'no-native-reassign': 'error',
/**
* Doesn't require storing the object created by `new` with
* a constructor in a variable
* @see http://eslint.org/docs/rules/no-new
* @example
*
* ```js
* // correct
* new Thing();
*
* const thing = new Thing();
*
* Thing();
* ```
*/
'no-new': 'off',
/**
* Disallow function constructor
* @see http://eslint.org/docs/rules/no-new-func
*/
'no-new-func': 'error',
/**
* Disallow primitive wrapper instances
* @see http://eslint.org/docs/rules/no-new-wrappers
*/
'no-new-wrappers': 'error',
/**
* Disallow octal literals
* @see http://eslint.org/docs/rules/no-octal
*/
'no-octal': 'error',
/**
* Disallow octal escape sequences in string literals
* @see http://eslint.org/docs/rules/no-octal-escape
*/
'no-octal-escape': 'error',
/**
* Allow reassignment of function parameters
* @see http://eslint.org/docs/rules/no-param-reassign
*/
'no-param-reassign': 'off',
/**
* Disallow use of `__proto__`
* @see http://eslint.org/docs/rules/no-proto
*/
'no-proto': 'error',
/**
* Disallow redeclaring variables
* @see http://eslint.org/docs/rules/no-redeclare
*/
'no-redeclare': 'error',
/**
* Disallow assignment in return statement
* @see http://eslint.org/docs/rules/no-return-assign
* @since 3.0.0
*/
'no-return-assign': 'error',
/**
* Disallow script URLs
* @see http://eslint.org/docs/rules/no-script-url
*/
'no-script-url': 'error',
/**
* Disallow self assignment
* @see http://eslint.org/docs/rules/no-self-assign
*/
'no-self-assign': 'error',
/**
* Disallow self comparison
* @see http://eslint.org/docs/rules/no-self-compare
* @since 3.0.0
*/
'no-self-compare': 'error',
/**
* Disallow use of the comma operator
* @see http://eslint.org/docs/rules/no-sequences
*/
'no-sequences': 'error',
/**
* Doesn't restrict what can be thrown as an exception
* @see http://eslint.org/docs/rules/no-throw-literal
*/
'no-throw-literal': 'off',
/**
* disallow unmodified conditions of loops
* @see http://eslint.org/docs/rules/no-unmodified-loop-condition
*/
'no-unmodified-loop-condition': 'off',
/**
* Disallow unused expressions
* @see http://eslint.org/docs/rules/no-unused-expressions
* @since 3.0.0
*/
'no-unused-expressions': 'off',
/**
* disallow unused labels
* @see http://eslint.org/docs/rules/no-unused-labels
*/
'no-unused-labels': 'error',
/**
* Allow unnecessary `.call()` and `.apply()`
* @see http://eslint.org/docs/rules/no-useless-call
*/
'no-useless-call': 'off',
/**
* Disallow unnecessary concatenation of strings
* @see http://eslint.org/docs/rules/no-useless-concat
*/
'no-useless-concat': 'error',
/**
* Disallow unnecessary string escaping
* @see http://eslint.org/docs/rules/no-useless-escape
*/
'no-useless-escape': 'error',
/**
* Allow use of the void operator
* @see http://eslint.org/docs/rules/no-void
*/
'no-void': 'off',
/**
* Allow warning comments
* @see http://eslint.org/docs/rules/no-warning-comments
*/
'no-warning-comments': 'off',
/**
* disallow use of the `with` statement
* @see http://eslint.org/docs/rules/no-with
*/
'no-with': 'error',
/**
* Doesn't require Radix Parameter
* @see http://eslint.org/docs/rules/radix
*/
radix: 'off',
/**
* Doesn't require variable declarations to be at the top of their scope
* @see http://eslint.org/docs/rules/vars-on-top
*/
'vars-on-top': 'off',
/**
* Require IIFEs to be wrapped
* @see http://eslint.org/docs/rules/wrap-iife
*/
'wrap-iife': 'off',
/**
* Disallow Yoda conditions
* @see http://eslint.org/docs/rules/yoda
*/
yoda: 'error',
},
};