eslint-config-jm
Version:
京东京麦前端eslint规范
310 lines (298 loc) • 9.56 kB
JavaScript
//
// 暂时没有版权声明
//
'use strict'
/**
* 产生格式化的ESLint控制数组/字符串
* @param {string} type 警告类型
* @param {string|array|object} config 选项
* @param {string|array|object} extend 扩展选项
* @returns {string|array} 格式化的ESLint控制数组/字符串
*/
const parseConfig = (type, config, extend) => {
if (config === undefined) {
return type
} else if (Array.isArray(config)) {
return [type, ...config]
}
if (extend === undefined) {
return [type, config]
}
return [type, config, extend]
}
/**
* 产生不发出警告的控制数组/字符串
* @param {string|array|object} [config] 选项
* @param {string|array|object} [extend] 扩展选项
* @returns {string|array} 不发出警告的控制数组/字符串
*/
const off = (config, extend) => parseConfig('off', config, extend)
/**
* 产生警告控制数组/字符串
* @param {string|array|object} [config] 选项
* @param {string|array|object} [extend] 扩展选项
* @returns {string|array} 警告控制数组/字符串
*/
const warn = (config, extend) => parseConfig('warn', config, extend)
/**
* 产生错误控制数组/字符串
* @param {string|array|object} [config] 选项
* @param {string|array|object} [extend] 扩展选项
* @returns {string|array} 错误控制数组/字符串
*/
const error = (config, extend) => parseConfig('error', config, extend)
module.exports = {
rules: {
'accessor-pairs': error(),
'arrow-spacing': error({
before: true,
after: true
}),
'comma-spacing': error({
before: false,
after: true
}),
'constructor-super': error(),
'curly': error('multi-line'),
'dot-location': error('property'),
'eqeqeq': error('always', { 'null': 'ignore' }),
'generator-star-spacing': error({
before: true,
after: true
}),
'handle-callback-err': error('^(err|error)$'),
'indent': error(2, {
SwitchCase: 1,
VariableDeclarator: 1,
outerIIFEBody: 1,
MemberExpression: 1,
FunctionDeclaration: { parameters: 1, body: 1 },
FunctionExpression: { parameters: 1, body: 1 },
CallExpression: { arguments: 1 },
ArrayExpression: 1,
ObjectExpression: 1,
ImportDeclaration: 1,
flatTernaryExpressions: false,
ignoreComments: false
}),
'no-caller': error(),
'no-class-assign': error(),
'no-compare-neg-zero': error(),
'no-cond-assign': error(),
'no-const-assign': error(),
'no-constant-condition': error({ checkLoops: false }),
'no-control-regex': error(),
'no-debugger': error(),
'no-delete-var': error(),
'no-dupe-args': error(),
'no-dupe-class-members': error(),
'no-dupe-keys': error(),
'no-duplicate-case': error(),
'no-empty-character-class': error(),
'no-empty-pattern': error(),
'no-eval': error(),
'no-ex-assign': error(),
'no-extend-native': error(),
'no-extra-bind': error(),
'no-extra-boolean-cast': error(),
'no-extra-parens': error('functions'),
'no-fallthrough': error(),
'no-floating-decimal': error(),
'no-func-assign': error(),
'no-global-assign': error(),
'no-implied-eval': error(),
'no-inner-declarations': error('functions'),
'no-invalid-regexp': error(),
'no-irregular-whitespace': error(),
'no-iterator': error(),
'no-label-var': error(),
'no-labels': error({
allowLoop: false,
allowSwitch: false
}),
'no-lone-blocks': error(),
'no-mixed-operators': error({
allowSamePrecedence: true,
groups: [
['==', '!=', '===', '!==', '>', '>=', '<', '<='],
['&&', '||'],
['in', 'instanceof']
]
}),
'no-multi-spaces': error(),
'no-multi-str': error(),
'no-multiple-empty-lines': error({
max: 1,
maxEOF: 0
}),
'no-negated-in-lhs': error(),
'no-new': error(),
'no-new-func': error(),
'no-new-object': error(),
'no-new-require': error(),
'no-new-symbol': error(),
'no-new-wrappers': error(),
'no-obj-calls': error(),
'no-octal': error(),
'no-octal-escape': error(),
'no-path-concat': error(),
'no-proto': error(),
'no-redeclare': error(),
'no-regex-spaces': error(),
'no-return-assign': error('except-parens'),
'no-return-await': error(),
'no-self-assign': error(),
'no-self-compare': error(),
'no-sequences': error(),
'no-shadow-restricted-names': error(),
'no-sparse-arrays': error(),
'no-tabs': error(),
'no-template-curly-in-string': error(),
'no-this-before-super': error(),
'no-throw-literal': error(),
'no-undef': error(),
'no-undef-init': error(),
'no-unexpected-multiline': error(),
'no-unmodified-loop-condition': error(),
'no-unneeded-ternary': error({ defaultAssignment: false }),
'no-unreachable': error(),
'no-unsafe-finally': error(),
'no-unsafe-negation': error(),
'no-unused-expressions': error({
allowShortCircuit: true,
allowTernary: true,
allowTaggedTemplates: true
}),
'no-unused-vars': error({
vars: 'all',
args: 'none',
ignoreRestSiblings: true
}),
'no-use-before-define': error({
functions: false,
classes: false,
variables: false
}),
'no-useless-call': error(),
'no-useless-computed-key': error(),
'no-useless-constructor': error(),
'no-useless-escape': error(),
'no-useless-rename': error(),
'no-useless-return': error(),
'no-with': error(),
'operator-linebreak': error('after', {
overrides: {
'?': 'before',
':': 'before',
'+': 'ignore'
}
}),
'padded-blocks': error({
blocks: 'never',
switches: 'never',
classes: 'never'
}),
'prefer-promise-reject-errors': error(),
'quotes': error('single', {
avoidEscape: true,
allowTemplateLiterals: true
}),
'rest-spread-spacing': error('never'),
'semi': error('never'),
'semi-spacing': error({
before: false,
after: true
}),
'space-before-blocks': error('always'),
'space-before-function-paren': error('always'),
'space-in-parens': error('never'),
'space-infix-ops': error(),
'space-unary-ops': error({ 'words': true, 'nonwords': false }),
'spaced-comment': error('always', {
line: {
markers: ['*package', '!', '/', ',', '=']
},
block: {
balanced: true,
markers: ['*package', '!', ',', ':', '::', 'flow-include'],
exceptions: ['*']
}
}),
'symbol-description': error(),
'template-curly-spacing': error('never'),
'template-tag-spacing': error('never'),
'unicode-bom': error('never'),
'use-isnan': error(),
'valid-typeof': error({ requireStringLiterals: true }),
'wrap-iife':error('any', { functionPrototypeMethods: true }),
'yield-star-spacing': error('both'),
'yoda': error('never'),
'array-bracket-newline': error({ multiline: true }),
'array-bracket-spacing': error('never'),
// 'array-element-newline': error({ multiline: true }),
'block-spacing': error(),
'brace-style': error(),
'camelcase': error({ properties: 'never' }),
'comma-dangle': error('never'),
'comma-spacing': error({
before: false,
after: true
}),
'comma-style': error('last'),
'computed-property-spacing': error('never'),
'consistent-this': error('that'),
'eol-last': error('always'),
'func-call-spacing': error('never'),
// 'func-style': warn('expression'),
'function-paren-newline': error('multiline'),
// 'id-blacklist': warn([
// 'error', 'err', 'e', 'list', 'data', 'item', 'callback'
// ]),
'implicit-arrow-linebreak': error('beside'),
'key-spacing': error({
beforeColon: false,
afterColon: true
}),
'keyword-spacing': error({
before: true,
after: true
}),
'lines-between-class-members': error('never'),
// 'max-depth': warn(4),
// 'max-len': warn({ code: 80 }),
// 'max-lines': warn({
// max: 500,
// skipBlankLines: true,
// skipComments: true
// }),
'max-nested-callbacks': warn(10),
'max-params': warn(6),
'new-cap': error({ newIsCap: true }),
'new-parens': error(),
// 'newline-per-chained-call': error({ ignoreChainWithDepth: 2 }),
'no-array-constructor': error(),
'no-mixed-spaces-and-tabs': error(),
'no-multi-assign': error(),
'no-nested-ternary': error(),
'no-trailing-spaces': error({ ignoreComments: true }),
'no-whitespace-before-property': error(),
'object-curly-newline': error({ multiline: true }),
'object-curly-spacing': error('always'),
'object-property-newline': error({ allowAllPropertiesOnSameLine: true }),
'one-var': error('never'),
'operator-assignment': error('always'),
'padding-line-between-statements': error(),
// 'import/export': error(),
// 'import/first': error(),
// 'import/no-duplicates': error(),
// 'import/no-named-default': error(),
// 'import/no-webpack-loader-syntax': error(),
// 'node/no-deprecated-api': error(),
// 'node/process-exit-as-throw': error(),
// 'promise/param-names': error(),
// 'standard/array-bracket-even-spacing': error('either'),
// 'standard/computed-property-even-spacing': error('even'),
// 'standard/no-callback-literal':error(),
// 'standard/object-curly-even-spacing': error('either')
}
}