eslint-config-xo
Advanced tools
Comparing version 0.45.0 to 0.46.0
@@ -1,17 +0,25 @@ | ||
'use strict'; | ||
const path = require('path'); | ||
const confusingBrowserGlobals = require('confusing-browser-globals'); | ||
import globals from 'globals'; | ||
import confusingBrowserGlobals from 'confusing-browser-globals'; | ||
import eslintConfigXo from './index.js'; | ||
module.exports = { | ||
extends: path.join(__dirname, 'index.js'), | ||
env: { | ||
node: false, | ||
browser: true, | ||
const [config] = eslintConfigXo; | ||
export default [ | ||
{ | ||
...config, | ||
languageOptions: { | ||
...config.languageOptions, | ||
globals: { | ||
...globals.es2021, | ||
...globals.browser, | ||
}, | ||
}, | ||
rules: { | ||
...config.rules, | ||
'no-restricted-globals': [ | ||
'error', | ||
...confusingBrowserGlobals, | ||
], | ||
}, | ||
}, | ||
rules: { | ||
'no-restricted-globals': [ | ||
'error', | ||
...confusingBrowserGlobals, | ||
], | ||
}, | ||
}; | ||
]; |
1354
index.js
@@ -1,673 +0,723 @@ | ||
'use strict'; | ||
import globals from 'globals'; | ||
import stylistic from '@stylistic/eslint-plugin'; | ||
module.exports = { | ||
parserOptions: { | ||
ecmaVersion: 'latest', | ||
sourceType: 'module', | ||
ecmaFeatures: { | ||
jsx: true, | ||
const rules = { | ||
'@stylistic/comma-dangle': [ | ||
'error', | ||
'always-multiline', | ||
], | ||
'for-direction': 'error', | ||
'getter-return': 'error', | ||
'no-async-promise-executor': 'error', | ||
'no-await-in-loop': 'error', | ||
'no-compare-neg-zero': 'error', | ||
'no-cond-assign': 'error', | ||
'no-constant-condition': 'error', | ||
'no-control-regex': 'error', | ||
'no-debugger': 'error', | ||
'no-dupe-args': 'error', | ||
'no-dupe-else-if': 'error', | ||
'no-dupe-keys': 'error', | ||
'no-duplicate-case': 'error', | ||
'no-empty-character-class': 'error', | ||
'no-empty': [ | ||
'error', | ||
{ | ||
allowEmptyCatch: true, | ||
}, | ||
}, | ||
env: { | ||
es2021: true, | ||
node: true, | ||
}, | ||
reportUnusedDisableDirectives: true, | ||
rules: { | ||
'comma-dangle': [ | ||
'error', | ||
'always-multiline', | ||
], | ||
'for-direction': 'error', | ||
'getter-return': 'error', | ||
'no-async-promise-executor': 'error', | ||
'no-await-in-loop': 'error', | ||
'no-compare-neg-zero': 'error', | ||
'no-cond-assign': 'error', | ||
'no-constant-condition': 'error', | ||
'no-control-regex': 'error', | ||
'no-debugger': 'error', | ||
'no-dupe-args': 'error', | ||
'no-dupe-else-if': 'error', | ||
'no-dupe-keys': 'error', | ||
'no-duplicate-case': 'error', | ||
'no-empty-character-class': 'error', | ||
'no-empty': [ | ||
'error', | ||
{ | ||
allowEmptyCatch: true, | ||
}, | ||
], | ||
'no-empty-static-block': 'error', | ||
'no-ex-assign': 'error', | ||
'no-extra-boolean-cast': 'error', | ||
// Disabled because of https://github.com/eslint/eslint/issues/6028 | ||
// 'no-extra-parens': [ | ||
// 'error', | ||
// 'all', | ||
// { | ||
// conditionalAssign: false, | ||
// nestedBinaryExpressions: false, | ||
// ignoreJSX: 'multi-line' | ||
// } | ||
// ], | ||
'no-extra-semi': 'error', | ||
'no-func-assign': 'error', | ||
'no-import-assign': 'error', | ||
'no-inner-declarations': 'error', | ||
'no-invalid-regexp': 'error', | ||
'no-irregular-whitespace': 'error', | ||
'no-loss-of-precision': 'error', | ||
'no-misleading-character-class': 'error', | ||
'no-obj-calls': 'error', | ||
'no-promise-executor-return': 'error', | ||
'no-prototype-builtins': 'error', | ||
'no-regex-spaces': 'error', | ||
'no-setter-return': 'error', | ||
'no-sparse-arrays': 'error', | ||
'no-template-curly-in-string': 'error', | ||
'no-unreachable': 'error', | ||
'no-unreachable-loop': 'error', | ||
'no-unsafe-finally': 'error', | ||
'no-unsafe-negation': [ | ||
'error', | ||
{ | ||
enforceForOrderingRelations: true, | ||
}, | ||
], | ||
'no-unsafe-optional-chaining': [ | ||
'error', | ||
{ | ||
disallowArithmeticOperators: true, | ||
}, | ||
], | ||
'no-useless-backreference': 'error', | ||
'use-isnan': 'error', | ||
'valid-typeof': [ | ||
'error', | ||
{ | ||
requireStringLiterals: false, | ||
}, | ||
], | ||
'no-unexpected-multiline': 'error', | ||
'accessor-pairs': [ | ||
'error', | ||
{ | ||
enforceForClassMembers: true, | ||
}, | ||
], | ||
'array-callback-return': [ | ||
'error', | ||
{ | ||
allowImplicit: true, | ||
}, | ||
], | ||
'block-scoped-var': 'error', | ||
complexity: 'warn', | ||
curly: 'error', | ||
'default-case': 'error', | ||
'default-case-last': 'error', | ||
'dot-notation': 'error', | ||
'dot-location': [ | ||
'error', | ||
'property', | ||
], | ||
eqeqeq: 'error', | ||
'grouped-accessor-pairs': [ | ||
'error', | ||
'getBeforeSet', | ||
], | ||
'guard-for-in': 'error', | ||
'no-alert': 'error', | ||
'no-caller': 'error', | ||
'no-case-declarations': 'error', | ||
'no-constructor-return': 'error', | ||
'no-else-return': [ | ||
'error', | ||
{ | ||
allowElseIf: false, | ||
}, | ||
], | ||
'no-empty-pattern': 'error', | ||
'no-eq-null': 'error', | ||
'no-eval': 'error', | ||
'no-extend-native': 'error', | ||
'no-extra-bind': 'error', | ||
'no-extra-label': 'error', | ||
'no-fallthrough': 'error', | ||
'no-floating-decimal': 'error', | ||
'no-global-assign': 'error', | ||
'no-implicit-coercion': 'error', | ||
'no-implicit-globals': 'error', | ||
'no-implied-eval': 'error', | ||
'no-iterator': 'error', | ||
'no-labels': 'error', | ||
'no-lone-blocks': 'error', | ||
'no-multi-spaces': 'error', | ||
'no-multi-str': 'error', | ||
'no-new-func': 'error', | ||
'no-new-wrappers': 'error', | ||
'no-nonoctal-decimal-escape': 'error', | ||
'no-object-constructor': 'error', | ||
'no-new': 'error', | ||
'no-octal-escape': 'error', | ||
'no-octal': 'error', | ||
'no-proto': 'error', | ||
'no-redeclare': 'error', | ||
'no-return-assign': [ | ||
'error', | ||
'always', | ||
], | ||
'no-return-await': 'error', | ||
'no-script-url': 'error', | ||
'no-self-assign': [ | ||
'error', | ||
{ | ||
props: true, | ||
}, | ||
], | ||
'no-self-compare': 'error', | ||
'no-sequences': 'error', | ||
'no-throw-literal': 'error', | ||
'no-unmodified-loop-condition': 'error', | ||
'no-unused-expressions': [ | ||
'error', | ||
{ | ||
enforceForJSX: true, | ||
}, | ||
], | ||
'no-unused-labels': 'error', | ||
'no-useless-call': 'error', | ||
'no-useless-catch': 'error', | ||
'no-useless-concat': 'error', | ||
'no-useless-escape': 'error', | ||
'no-useless-return': 'error', | ||
'no-void': 'error', | ||
'no-warning-comments': 'warn', | ||
'no-with': 'error', | ||
], | ||
'no-empty-static-block': 'error', | ||
'no-ex-assign': 'error', | ||
'no-extra-boolean-cast': 'error', | ||
// Disabled because of https://github.com/xojs/eslint-config-xo/pull/87 | ||
// 'no-extra-boolean-cast': [ | ||
// 'error', | ||
// { | ||
// enforceForInnerExpressions: true | ||
// }, | ||
// ], | ||
// Disabled because of https://github.com/eslint/eslint/issues/6028 | ||
// '@stylistic/no-extra-parens': [ | ||
// 'error', | ||
// 'all', | ||
// { | ||
// conditionalAssign: false, | ||
// nestedBinaryExpressions: false, | ||
// ignoreJSX: 'multi-line' | ||
// } | ||
// ], | ||
'@stylistic/no-extra-semi': 'error', | ||
'no-func-assign': 'error', | ||
'no-import-assign': 'error', | ||
'no-inner-declarations': 'error', | ||
'no-invalid-regexp': 'error', | ||
'no-irregular-whitespace': 'error', | ||
'no-loss-of-precision': 'error', | ||
'no-misleading-character-class': 'error', | ||
'no-obj-calls': 'error', | ||
'no-promise-executor-return': 'error', | ||
'no-prototype-builtins': 'error', | ||
'no-regex-spaces': 'error', | ||
'no-setter-return': 'error', | ||
'no-sparse-arrays': 'error', | ||
'no-template-curly-in-string': 'error', | ||
'no-unreachable': 'error', | ||
'no-unreachable-loop': 'error', | ||
'no-unsafe-finally': 'error', | ||
'no-unsafe-negation': [ | ||
'error', | ||
{ | ||
enforceForOrderingRelations: true, | ||
}, | ||
], | ||
'no-unsafe-optional-chaining': [ | ||
'error', | ||
{ | ||
disallowArithmeticOperators: true, | ||
}, | ||
], | ||
'no-useless-backreference': 'error', | ||
'use-isnan': 'error', | ||
'valid-typeof': [ | ||
'error', | ||
{ | ||
requireStringLiterals: false, | ||
}, | ||
], | ||
'no-unexpected-multiline': 'error', | ||
'accessor-pairs': [ | ||
'error', | ||
{ | ||
enforceForClassMembers: true, | ||
}, | ||
], | ||
'array-callback-return': [ | ||
'error', | ||
{ | ||
allowImplicit: true, | ||
}, | ||
], | ||
'block-scoped-var': 'error', | ||
complexity: 'warn', | ||
curly: 'error', | ||
'default-case': 'error', | ||
'default-case-last': 'error', | ||
'dot-notation': 'error', | ||
'@stylistic/dot-location': [ | ||
'error', | ||
'property', | ||
], | ||
eqeqeq: 'error', | ||
'grouped-accessor-pairs': [ | ||
'error', | ||
'getBeforeSet', | ||
], | ||
'guard-for-in': 'error', | ||
'no-alert': 'error', | ||
'no-caller': 'error', | ||
'no-case-declarations': 'error', | ||
'no-constructor-return': 'error', | ||
'no-else-return': [ | ||
'error', | ||
{ | ||
allowElseIf: false, | ||
}, | ||
], | ||
'no-empty-pattern': 'error', | ||
'no-eq-null': 'error', | ||
'no-eval': 'error', | ||
'no-extend-native': 'error', | ||
'no-extra-bind': 'error', | ||
'no-extra-label': 'error', | ||
'no-fallthrough': 'error', | ||
'@stylistic/no-floating-decimal': 'error', | ||
'no-global-assign': 'error', | ||
'no-implicit-coercion': 'error', | ||
'no-implicit-globals': 'error', | ||
'no-implied-eval': 'error', | ||
'no-iterator': 'error', | ||
'no-labels': 'error', | ||
'no-lone-blocks': 'error', | ||
'@stylistic/no-multi-spaces': 'error', | ||
'no-multi-str': 'error', | ||
'no-new-func': 'error', | ||
'no-new-wrappers': 'error', | ||
'no-nonoctal-decimal-escape': 'error', | ||
'no-object-constructor': 'error', | ||
'no-new': 'error', | ||
'no-octal-escape': 'error', | ||
'no-octal': 'error', | ||
'no-proto': 'error', | ||
'no-redeclare': 'error', | ||
'no-return-assign': [ | ||
'error', | ||
'always', | ||
], | ||
'no-return-await': 'error', | ||
'no-script-url': 'error', | ||
'no-self-assign': [ | ||
'error', | ||
{ | ||
props: true, | ||
}, | ||
], | ||
'no-self-compare': 'error', | ||
'no-sequences': 'error', | ||
'no-throw-literal': 'error', | ||
'no-unmodified-loop-condition': 'error', | ||
'no-unused-expressions': [ | ||
'error', | ||
{ | ||
enforceForJSX: true, | ||
}, | ||
], | ||
'no-unused-labels': 'error', | ||
'no-useless-call': 'error', | ||
'no-useless-catch': 'error', | ||
'no-useless-concat': 'error', | ||
'no-useless-escape': 'error', | ||
'no-useless-return': 'error', | ||
'no-void': 'error', | ||
'no-warning-comments': 'warn', | ||
'no-with': 'error', | ||
// Disabled for now as Firefox doesn't support named capture groups and I'm tired of getting issues about the use of named capture groups... | ||
// 'prefer-named-capture-group': 'error' | ||
// Disabled for now as Firefox doesn't support named capture groups and I'm tired of getting issues about the use of named capture groups... | ||
// 'prefer-named-capture-group': 'error' | ||
'prefer-promise-reject-errors': [ | ||
'error', | ||
{ | ||
allowEmptyReject: true, | ||
}, | ||
], | ||
'prefer-regex-literals': [ | ||
'error', | ||
{ | ||
disallowRedundantWrapping: true, | ||
}, | ||
], | ||
radix: 'error', | ||
'prefer-promise-reject-errors': [ | ||
'error', | ||
{ | ||
allowEmptyReject: true, | ||
}, | ||
], | ||
'prefer-regex-literals': [ | ||
'error', | ||
{ | ||
disallowRedundantWrapping: true, | ||
}, | ||
], | ||
radix: 'error', | ||
// Disabled for now as it causes too much churn | ||
// TODO: Enable it in the future when I have time to deal with | ||
// the churn and the rule is stable and has an autofixer. | ||
// Still doesn't have a fixer as of ESLint 7.24.0. | ||
// 'require-unicode-regexp': 'error', | ||
// Disabled for now as it causes too much churn | ||
// TODO: Enable it in the future when I have time to deal with | ||
// the churn and the rule is stable and has an autofixer. | ||
// Still doesn't have a fixer as of ESLint 7.24.0. | ||
// 'require-unicode-regexp': 'error', | ||
'wrap-iife': [ | ||
'error', | ||
'inside', | ||
{ | ||
functionPrototypeMethods: true, | ||
}, | ||
], | ||
yoda: 'error', | ||
'no-delete-var': 'error', | ||
'no-label-var': 'error', | ||
'no-restricted-globals': [ | ||
'error', | ||
'event', | ||
// TODO: Enable this in 2025. | ||
// { | ||
// name: 'Buffer', | ||
// message: 'Use Uint8Array instead. See: https://sindresorhus.com/blog/goodbye-nodejs-buffer', | ||
// }, | ||
{ | ||
name: 'atob', | ||
message: 'This API is deprecated. Use https://github.com/sindresorhus/uint8array-extras instead.', | ||
}, | ||
{ | ||
name: 'btoa', | ||
message: 'This API is deprecated. Use https://github.com/sindresorhus/uint8array-extras instead.', | ||
}, | ||
], | ||
'no-shadow-restricted-names': 'error', | ||
'no-undef-init': 'error', | ||
'no-undef': [ | ||
'error', | ||
{ | ||
typeof: true, | ||
}, | ||
], | ||
'no-unused-vars': [ | ||
'error', | ||
{ | ||
vars: 'all', | ||
varsIgnorePattern: /^_/.source, | ||
args: 'after-used', | ||
ignoreRestSiblings: true, | ||
argsIgnorePattern: /^_/.source, | ||
caughtErrors: 'all', | ||
caughtErrorsIgnorePattern: /^_$/.source, | ||
}, | ||
], | ||
'no-buffer-constructor': 'error', | ||
'no-restricted-imports': [ | ||
'error', | ||
'domain', | ||
'freelist', | ||
'smalloc', | ||
'punycode', | ||
'sys', | ||
'querystring', | ||
'colors', | ||
// TODO: Enable this in 2025. | ||
// { | ||
// name: 'buffer', | ||
// message: 'Use Uint8Array instead. See: https://sindresorhus.com/blog/goodbye-nodejs-buffer', | ||
// }, | ||
// { | ||
// name: 'node:buffer', | ||
// message: 'Use Uint8Array instead. See: https://sindresorhus.com/blog/goodbye-nodejs-buffer', | ||
// }, | ||
], | ||
'array-bracket-newline': [ | ||
'error', | ||
'consistent', | ||
], | ||
'array-bracket-spacing': [ | ||
'error', | ||
'never', | ||
], | ||
'array-element-newline': [ | ||
'error', | ||
'consistent', | ||
], | ||
'brace-style': [ | ||
'error', | ||
'1tbs', | ||
{ | ||
allowSingleLine: false, | ||
}, | ||
], | ||
camelcase: [ | ||
'error', | ||
{ | ||
properties: 'always', | ||
}, | ||
], | ||
'capitalized-comments': [ | ||
'error', | ||
'always', | ||
{ | ||
// You can also ignore this rule by wrapping the first word in quotes. | ||
// c8 => https://github.com/bcoe/c8 | ||
ignorePattern: /pragma|ignore|prettier-ignore|webpack\w+:|c8|type-coverage:/.source, | ||
ignoreInlineComments: true, | ||
ignoreConsecutiveComments: true, | ||
}, | ||
], | ||
'comma-spacing': [ | ||
'error', | ||
{ | ||
before: false, | ||
after: true, | ||
}, | ||
], | ||
'comma-style': [ | ||
'error', | ||
'last', | ||
], | ||
'computed-property-spacing': [ | ||
'error', | ||
'never', | ||
{ | ||
enforceForClassMembers: true, | ||
}, | ||
], | ||
'eol-last': 'error', | ||
'func-call-spacing': [ | ||
'error', | ||
'never', | ||
], | ||
'func-name-matching': [ | ||
'error', | ||
{ | ||
considerPropertyDescriptor: true, | ||
}, | ||
], | ||
'func-names': [ | ||
'error', | ||
'never', | ||
], | ||
'function-call-argument-newline': [ | ||
'error', | ||
'consistent', | ||
], | ||
indent: [ | ||
'error', | ||
'tab', | ||
{ | ||
SwitchCase: 1, | ||
}, | ||
], | ||
'jsx-quotes': [ | ||
'error', | ||
'prefer-single', | ||
], | ||
'key-spacing': [ | ||
'error', | ||
{ | ||
beforeColon: false, | ||
afterColon: true, | ||
}, | ||
], | ||
'keyword-spacing': 'error', | ||
'linebreak-style': [ | ||
process.platform === 'win32' ? 'off' : 'error', | ||
'unix', | ||
], | ||
'lines-between-class-members': [ | ||
'error', | ||
{ | ||
enforce: [ | ||
{ | ||
blankLine: 'always', | ||
prev: '*', | ||
next: 'method', | ||
}, | ||
{ | ||
blankLine: 'always', | ||
prev: 'method', | ||
next: 'field', | ||
}, | ||
{ | ||
blankLine: 'never', | ||
prev: 'field', | ||
next: 'field', | ||
}, | ||
], | ||
}, | ||
], | ||
'logical-assignment-operators': [ | ||
'error', | ||
'always', | ||
{ | ||
enforceForIfStatements: true, | ||
}, | ||
], | ||
'max-depth': 'warn', | ||
'max-nested-callbacks': [ | ||
'warn', | ||
4, | ||
], | ||
'max-params': [ | ||
'warn', | ||
{ | ||
max: 4, | ||
}, | ||
], | ||
'max-statements-per-line': 'error', | ||
'new-cap': [ | ||
'error', | ||
{ | ||
newIsCap: true, | ||
capIsNew: true, | ||
}, | ||
], | ||
'new-parens': 'error', | ||
'no-array-constructor': 'error', | ||
'no-bitwise': 'error', | ||
'no-lonely-if': 'error', | ||
'no-mixed-operators': 'error', | ||
'no-mixed-spaces-and-tabs': 'error', | ||
'no-multi-assign': 'error', | ||
'no-multiple-empty-lines': [ | ||
'error', | ||
{ | ||
max: 1, | ||
}, | ||
], | ||
'no-negated-condition': 'error', | ||
'no-whitespace-before-property': 'error', | ||
'no-trailing-spaces': 'error', | ||
'no-unneeded-ternary': 'error', | ||
'object-curly-spacing': [ | ||
'error', | ||
'never', | ||
], | ||
'object-curly-newline': [ | ||
'error', | ||
{ | ||
ObjectExpression: { | ||
multiline: true, | ||
minProperties: 4, | ||
consistent: true, | ||
'@stylistic/wrap-iife': [ | ||
'error', | ||
'inside', | ||
{ | ||
functionPrototypeMethods: true, | ||
}, | ||
], | ||
yoda: 'error', | ||
'no-delete-var': 'error', | ||
'no-label-var': 'error', | ||
'no-restricted-globals': [ | ||
'error', | ||
'event', | ||
// TODO: Enable this in 2025. | ||
// { | ||
// name: 'Buffer', | ||
// message: 'Use Uint8Array instead. See: https://sindresorhus.com/blog/goodbye-nodejs-buffer', | ||
// }, | ||
{ | ||
name: 'atob', | ||
message: 'This API is deprecated. Use https://github.com/sindresorhus/uint8array-extras instead.', | ||
}, | ||
{ | ||
name: 'btoa', | ||
message: 'This API is deprecated. Use https://github.com/sindresorhus/uint8array-extras instead.', | ||
}, | ||
], | ||
'no-shadow-restricted-names': 'error', | ||
'no-undef-init': 'error', | ||
'no-undef': [ | ||
'error', | ||
{ | ||
typeof: true, | ||
}, | ||
], | ||
'no-unused-vars': [ | ||
'error', | ||
{ | ||
vars: 'all', | ||
varsIgnorePattern: /^_/.source, | ||
args: 'after-used', | ||
ignoreRestSiblings: true, | ||
argsIgnorePattern: /^_/.source, | ||
caughtErrors: 'all', | ||
caughtErrorsIgnorePattern: /^_$/.source, | ||
}, | ||
], | ||
'no-buffer-constructor': 'error', | ||
'no-restricted-imports': [ | ||
'error', | ||
'domain', | ||
'freelist', | ||
'smalloc', | ||
'punycode', | ||
'sys', | ||
'querystring', | ||
'colors', | ||
// TODO: Enable this in 2025. | ||
// { | ||
// name: 'buffer', | ||
// message: 'Use Uint8Array instead. See: https://sindresorhus.com/blog/goodbye-nodejs-buffer', | ||
// }, | ||
// { | ||
// name: 'node:buffer', | ||
// message: 'Use Uint8Array instead. See: https://sindresorhus.com/blog/goodbye-nodejs-buffer', | ||
// }, | ||
], | ||
'@stylistic/array-bracket-newline': [ | ||
'error', | ||
'consistent', | ||
], | ||
'@stylistic/array-bracket-spacing': [ | ||
'error', | ||
'never', | ||
], | ||
'@stylistic/array-element-newline': [ | ||
'error', | ||
'consistent', | ||
], | ||
'@stylistic/brace-style': [ | ||
'error', | ||
'1tbs', | ||
{ | ||
allowSingleLine: false, | ||
}, | ||
], | ||
camelcase: [ | ||
'error', | ||
{ | ||
properties: 'always', | ||
}, | ||
], | ||
'capitalized-comments': [ | ||
'error', | ||
'always', | ||
{ | ||
// You can also ignore this rule by wrapping the first word in quotes. | ||
// c8 => https://github.com/bcoe/c8 | ||
ignorePattern: /pragma|ignore|prettier-ignore|webpack\w+:|c8|type-coverage:/.source, | ||
ignoreInlineComments: true, | ||
ignoreConsecutiveComments: true, | ||
}, | ||
], | ||
'@stylistic/comma-spacing': [ | ||
'error', | ||
{ | ||
before: false, | ||
after: true, | ||
}, | ||
], | ||
'@stylistic/comma-style': [ | ||
'error', | ||
'last', | ||
], | ||
'@stylistic/computed-property-spacing': [ | ||
'error', | ||
'never', | ||
{ | ||
enforceForClassMembers: true, | ||
}, | ||
], | ||
'@stylistic/eol-last': 'error', | ||
'@stylistic/function-call-spacing': [ | ||
'error', | ||
'never', | ||
], | ||
'@stylistic/function-paren-newline': [ | ||
'error', | ||
'multiline', | ||
], | ||
'func-name-matching': [ | ||
'error', | ||
{ | ||
considerPropertyDescriptor: true, | ||
}, | ||
], | ||
'func-names': [ | ||
'error', | ||
'never', | ||
], | ||
'@stylistic/function-call-argument-newline': [ | ||
'error', | ||
'consistent', | ||
], | ||
'@stylistic/indent': [ | ||
'error', | ||
'tab', | ||
{ | ||
SwitchCase: 1, | ||
}, | ||
], | ||
'@stylistic/jsx-quotes': [ | ||
'error', | ||
'prefer-single', | ||
], | ||
'@stylistic/key-spacing': [ | ||
'error', | ||
{ | ||
beforeColon: false, | ||
afterColon: true, | ||
}, | ||
], | ||
'@stylistic/keyword-spacing': 'error', | ||
'@stylistic/linebreak-style': [ | ||
process.platform === 'win32' ? 'off' : 'error', | ||
'unix', | ||
], | ||
'@stylistic/lines-between-class-members': [ | ||
'error', | ||
{ | ||
enforce: [ | ||
{ | ||
blankLine: 'always', | ||
prev: '*', | ||
next: 'method', | ||
}, | ||
ObjectPattern: { | ||
multiline: true, | ||
consistent: true, | ||
{ | ||
blankLine: 'always', | ||
prev: 'method', | ||
next: 'field', | ||
}, | ||
ImportDeclaration: { | ||
multiline: true, | ||
minProperties: 4, | ||
consistent: true, | ||
{ | ||
blankLine: 'never', | ||
prev: 'field', | ||
next: 'field', | ||
}, | ||
ExportDeclaration: { | ||
multiline: true, | ||
minProperties: 4, | ||
consistent: true, | ||
}, | ||
], | ||
}, | ||
], | ||
'logical-assignment-operators': [ | ||
'error', | ||
'always', | ||
{ | ||
enforceForIfStatements: true, | ||
}, | ||
], | ||
'max-depth': 'warn', | ||
'@stylistic/max-len': [ | ||
'warn', | ||
{ | ||
code: 200, | ||
ignoreComments: true, | ||
ignoreUrls: true, | ||
}, | ||
], | ||
'max-lines': [ | ||
'warn', | ||
{ | ||
max: 1500, | ||
skipComments: true, | ||
}, | ||
], | ||
'max-nested-callbacks': [ | ||
'warn', | ||
4, | ||
], | ||
'max-params': [ | ||
'warn', | ||
{ | ||
max: 4, | ||
}, | ||
], | ||
'@stylistic/max-statements-per-line': 'error', | ||
'new-cap': [ | ||
'error', | ||
{ | ||
newIsCap: true, | ||
capIsNew: true, | ||
}, | ||
], | ||
'@stylistic/multiline-ternary': [ | ||
'error', | ||
'always-multiline', | ||
], | ||
'@stylistic/new-parens': 'error', | ||
'no-array-constructor': 'error', | ||
'no-bitwise': 'error', | ||
'no-lonely-if': 'error', | ||
'@stylistic/no-mixed-operators': 'error', | ||
'@stylistic/no-mixed-spaces-and-tabs': 'error', | ||
'no-multi-assign': 'error', | ||
'@stylistic/no-multiple-empty-lines': [ | ||
'error', | ||
{ | ||
max: 1, | ||
}, | ||
], | ||
'no-negated-condition': 'error', | ||
'@stylistic/no-whitespace-before-property': 'error', | ||
'@stylistic/no-trailing-spaces': 'error', | ||
'no-unneeded-ternary': 'error', | ||
'@stylistic/object-curly-spacing': [ | ||
'error', | ||
'never', | ||
], | ||
'@stylistic/object-curly-newline': [ | ||
'error', | ||
{ | ||
ObjectExpression: { | ||
multiline: true, | ||
minProperties: 4, | ||
consistent: true, | ||
}, | ||
], | ||
'one-var': [ | ||
'error', | ||
'never', | ||
], | ||
'one-var-declaration-per-line': 'error', | ||
'operator-assignment': [ | ||
'error', | ||
'always', | ||
], | ||
'operator-linebreak': [ | ||
'error', | ||
'before', | ||
], | ||
'padded-blocks': [ | ||
'error', | ||
'never', | ||
{ | ||
allowSingleLineBlocks: false, | ||
ObjectPattern: { | ||
multiline: true, | ||
consistent: true, | ||
}, | ||
], | ||
'padding-line-between-statements': [ | ||
'error', | ||
{ | ||
blankLine: 'always', | ||
prev: 'multiline-block-like', | ||
next: '*', | ||
ImportDeclaration: { | ||
multiline: true, | ||
minProperties: 4, | ||
consistent: true, | ||
}, | ||
], | ||
'prefer-exponentiation-operator': 'error', | ||
'prefer-object-spread': 'error', | ||
'quote-props': [ | ||
'error', | ||
'as-needed', | ||
], | ||
quotes: [ | ||
'error', | ||
'single', | ||
], | ||
'semi-spacing': [ | ||
'error', | ||
{ | ||
before: false, | ||
after: true, | ||
ExportDeclaration: { | ||
multiline: true, | ||
minProperties: 4, | ||
consistent: true, | ||
}, | ||
], | ||
'semi-style': [ | ||
'error', | ||
'last', | ||
], | ||
semi: [ | ||
'error', | ||
'always', | ||
], | ||
'space-before-blocks': [ | ||
'error', | ||
'always', | ||
], | ||
'space-before-function-paren': [ | ||
'error', | ||
{ | ||
anonymous: 'always', | ||
named: 'never', | ||
asyncArrow: 'always', | ||
}, | ||
], | ||
'one-var': [ | ||
'error', | ||
'never', | ||
], | ||
'@stylistic/one-var-declaration-per-line': 'error', | ||
'operator-assignment': [ | ||
'error', | ||
'always', | ||
], | ||
'@stylistic/operator-linebreak': [ | ||
'error', | ||
'before', | ||
], | ||
'@stylistic/padded-blocks': [ | ||
'error', | ||
'never', | ||
{ | ||
allowSingleLineBlocks: false, | ||
}, | ||
], | ||
'@stylistic/padding-line-between-statements': [ | ||
'error', | ||
{ | ||
blankLine: 'always', | ||
prev: 'multiline-block-like', | ||
next: '*', | ||
}, | ||
], | ||
'prefer-exponentiation-operator': 'error', | ||
'prefer-object-spread': 'error', | ||
'@stylistic/quote-props': [ | ||
'error', | ||
'as-needed', | ||
], | ||
'@stylistic/quotes': [ | ||
'error', | ||
'single', | ||
], | ||
'@stylistic/semi-spacing': [ | ||
'error', | ||
{ | ||
before: false, | ||
after: true, | ||
}, | ||
], | ||
'@stylistic/semi-style': [ | ||
'error', | ||
'last', | ||
], | ||
'@stylistic/semi': [ | ||
'error', | ||
'always', | ||
], | ||
'@stylistic/space-before-blocks': [ | ||
'error', | ||
'always', | ||
], | ||
'@stylistic/space-before-function-paren': [ | ||
'error', | ||
{ | ||
anonymous: 'always', | ||
named: 'never', | ||
asyncArrow: 'always', | ||
}, | ||
], | ||
'@stylistic/space-in-parens': [ | ||
'error', | ||
'never', | ||
], | ||
'@stylistic/space-infix-ops': 'error', | ||
'@stylistic/space-unary-ops': 'error', | ||
'@stylistic/spaced-comment': [ | ||
'error', | ||
'always', | ||
{ | ||
line: { | ||
exceptions: [ | ||
'-', | ||
'+', | ||
'*', | ||
], | ||
markers: [ | ||
'!', | ||
'/', | ||
'=>', | ||
], | ||
}, | ||
], | ||
'space-in-parens': [ | ||
'error', | ||
'never', | ||
], | ||
'space-infix-ops': 'error', | ||
'space-unary-ops': 'error', | ||
'spaced-comment': [ | ||
'error', | ||
'always', | ||
{ | ||
line: { | ||
exceptions: [ | ||
'-', | ||
'+', | ||
'*', | ||
], | ||
markers: [ | ||
'!', | ||
'/', | ||
'=>', | ||
], | ||
}, | ||
block: { | ||
exceptions: [ | ||
'-', | ||
'+', | ||
'*', | ||
], | ||
markers: [ | ||
'!', | ||
'*', | ||
], | ||
balanced: true, | ||
}, | ||
block: { | ||
exceptions: [ | ||
'-', | ||
'+', | ||
'*', | ||
], | ||
markers: [ | ||
'!', | ||
'*', | ||
], | ||
balanced: true, | ||
}, | ||
], | ||
'switch-colon-spacing': [ | ||
'error', | ||
{ | ||
after: true, | ||
before: false, | ||
}, | ||
], | ||
'@stylistic/switch-colon-spacing': [ | ||
'error', | ||
{ | ||
after: true, | ||
before: false, | ||
}, | ||
], | ||
'@stylistic/template-tag-spacing': [ | ||
'error', | ||
'never', | ||
], | ||
'unicode-bom': [ | ||
'error', | ||
'never', | ||
], | ||
'arrow-body-style': 'error', | ||
'@stylistic/arrow-parens': [ | ||
'error', | ||
'as-needed', | ||
], | ||
'@stylistic/arrow-spacing': [ | ||
'error', | ||
{ | ||
before: true, | ||
after: true, | ||
}, | ||
], | ||
'@stylistic/block-spacing': [ | ||
'error', | ||
'never', | ||
], | ||
'constructor-super': 'error', | ||
'@stylistic/generator-star-spacing': [ | ||
'error', | ||
'both', | ||
], | ||
'no-class-assign': 'error', | ||
'no-const-assign': 'error', | ||
'no-constant-binary-expression': 'error', | ||
'no-dupe-class-members': 'error', | ||
'no-new-native-nonconstructor': 'error', | ||
'no-this-before-super': 'error', | ||
'no-useless-computed-key': [ | ||
'error', | ||
{ | ||
enforceForClassMembers: true, | ||
}, | ||
], | ||
'no-useless-constructor': 'error', | ||
'no-useless-rename': 'error', | ||
'no-var': 'error', | ||
'object-shorthand': [ | ||
'error', | ||
'always', | ||
{ | ||
avoidExplicitReturnArrows: true, | ||
}, | ||
], | ||
'prefer-arrow-callback': [ | ||
'error', | ||
{ | ||
allowNamedFunctions: true, | ||
}, | ||
], | ||
'prefer-const': [ | ||
'error', | ||
{ | ||
destructuring: 'all', | ||
}, | ||
], | ||
'prefer-destructuring': [ | ||
'error', | ||
{ | ||
// `array` is disabled because it forces destructuring on | ||
// stupid stuff like `foo.bar = process.argv[2];` | ||
// TODO: Open ESLint issue about this | ||
VariableDeclarator: { | ||
array: false, | ||
object: true, | ||
}, | ||
], | ||
'template-tag-spacing': [ | ||
'error', | ||
'never', | ||
], | ||
'unicode-bom': [ | ||
'error', | ||
'never', | ||
], | ||
'arrow-body-style': 'error', | ||
'arrow-parens': [ | ||
'error', | ||
'as-needed', | ||
], | ||
'arrow-spacing': [ | ||
'error', | ||
{ | ||
before: true, | ||
after: true, | ||
AssignmentExpression: { | ||
array: false, | ||
// Disabled because object assignment destructuring requires parens wrapping: | ||
// `let foo; ({foo} = object);` | ||
object: false, | ||
}, | ||
], | ||
'constructor-super': 'error', | ||
'generator-star-spacing': [ | ||
'error', | ||
'both', | ||
], | ||
'no-class-assign': 'error', | ||
'no-const-assign': 'error', | ||
'no-constant-binary-expression': 'error', | ||
'no-dupe-class-members': 'error', | ||
'no-new-native-nonconstructor': 'error', | ||
'no-this-before-super': 'error', | ||
'no-useless-computed-key': [ | ||
'error', | ||
{ | ||
enforceForClassMembers: true, | ||
}, | ||
], | ||
'no-useless-constructor': 'error', | ||
'no-useless-rename': 'error', | ||
'no-var': 'error', | ||
'object-shorthand': [ | ||
'error', | ||
'always', | ||
{ | ||
avoidExplicitReturnArrows: true, | ||
}, | ||
], | ||
'prefer-arrow-callback': [ | ||
'error', | ||
{ | ||
allowNamedFunctions: true, | ||
}, | ||
], | ||
'prefer-const': [ | ||
'error', | ||
{ | ||
destructuring: 'all', | ||
}, | ||
], | ||
'prefer-destructuring': [ | ||
'error', | ||
{ | ||
// `array` is disabled because it forces destructuring on | ||
// stupid stuff like `foo.bar = process.argv[2];` | ||
// TODO: Open ESLint issue about this | ||
VariableDeclarator: { | ||
array: false, | ||
object: true, | ||
}, | ||
AssignmentExpression: { | ||
array: false, | ||
}, | ||
{ | ||
enforceForRenamedProperties: false, | ||
}, | ||
], | ||
'prefer-numeric-literals': 'error', | ||
'prefer-object-has-own': 'error', | ||
'prefer-rest-params': 'error', | ||
'prefer-spread': 'error', | ||
'require-yield': 'error', | ||
'@stylistic/rest-spread-spacing': [ | ||
'error', | ||
'never', | ||
], | ||
'symbol-description': 'error', | ||
'@stylistic/template-curly-spacing': 'error', | ||
'@stylistic/yield-star-spacing': [ | ||
'error', | ||
'both', | ||
], | ||
'@stylistic/indent-binary-ops': [ | ||
'error', | ||
'tab', | ||
], | ||
}; | ||
// Disabled because object assignment destructuring requires parens wrapping: | ||
// `let foo; ({foo} = object);` | ||
object: false, | ||
}, | ||
const config = { | ||
languageOptions: { | ||
globals: { | ||
...globals.es2021, | ||
...globals.nodeBuiltin, | ||
}, | ||
ecmaVersion: 'latest', | ||
sourceType: 'module', | ||
parserOptions: { | ||
ecmaFeatures: { | ||
jsx: true, | ||
}, | ||
{ | ||
enforceForRenamedProperties: false, | ||
}, | ||
], | ||
'prefer-numeric-literals': 'error', | ||
'prefer-object-has-own': 'error', | ||
'prefer-rest-params': 'error', | ||
'prefer-spread': 'error', | ||
'require-yield': 'error', | ||
'rest-spread-spacing': [ | ||
'error', | ||
'never', | ||
], | ||
'symbol-description': 'error', | ||
'template-curly-spacing': 'error', | ||
'yield-star-spacing': [ | ||
'error', | ||
'both', | ||
], | ||
}, | ||
}, | ||
linterOptions: { | ||
reportUnusedDisableDirectives: 'error', | ||
}, | ||
plugins: { | ||
'@stylistic': stylistic, | ||
}, | ||
rules, | ||
}; | ||
export default [config]; |
{ | ||
"name": "eslint-config-xo", | ||
"version": "0.45.0", | ||
"version": "0.46.0", | ||
"description": "ESLint shareable config for XO", | ||
@@ -13,12 +13,21 @@ "license": "MIT", | ||
}, | ||
"type": "module", | ||
"exports": { | ||
".": "./index.js", | ||
"./browser": "./browser.js", | ||
"./space": "./space.js", | ||
"./space/browser": "./space-browser.js" | ||
}, | ||
"sideEffects": false, | ||
"engines": { | ||
"node": ">=18" | ||
"node": ">=18.18" | ||
}, | ||
"scripts": { | ||
"test": "eslint . && ava" | ||
"test": "eslint && ava" | ||
}, | ||
"files": [ | ||
"index.js", | ||
"browser.js" | ||
"browser.js", | ||
"space.js", | ||
"space-browser.js" | ||
], | ||
@@ -54,12 +63,13 @@ "keywords": [ | ||
"dependencies": { | ||
"confusing-browser-globals": "1.0.11" | ||
"@stylistic/eslint-plugin": "^2.6.1", | ||
"confusing-browser-globals": "1.0.11", | ||
"globals": "^15.3.0" | ||
}, | ||
"devDependencies": { | ||
"ava": "^2.4.0", | ||
"eslint": "^8.56.0", | ||
"is-plain-obj": "^3.0.0" | ||
"ava": "^6.1.3", | ||
"eslint": "^9.8.0" | ||
}, | ||
"peerDependencies": { | ||
"eslint": ">=8.56.0" | ||
"eslint": ">=9.8.0" | ||
} | ||
} |
@@ -19,29 +19,41 @@ # eslint-config-xo | ||
Add some ESLint config to your `package.json`: | ||
```js | ||
// eslint.config.js | ||
import xo from 'eslint-config-xo'; | ||
```json | ||
{ | ||
"name": "my-awesome-project", | ||
"eslintConfig": { | ||
"extends": "xo" | ||
} | ||
} | ||
export default [ | ||
...xo, | ||
]; | ||
``` | ||
Or to `.eslintrc`: | ||
This package also exposes [`eslint-config-xo/browser`](browser.js) if you're in the browser: | ||
```json | ||
{ | ||
"extends": "xo" | ||
} | ||
```js | ||
import xoBrowser from 'eslint-config-xo/browser'; | ||
export default [ | ||
...xoBrowser, | ||
]; | ||
``` | ||
This package also exposes [`xo/browser`](browser.js) if you're in the browser: | ||
This package also exposes [`eslint-config-xo/space`](space.js) if you're in favor of 2-space indent: | ||
```json | ||
{ | ||
"extends": "xo/browser" | ||
} | ||
```js | ||
import xoSpace from 'eslint-config-xo/space'; | ||
export default [ | ||
...xoSpace, | ||
]; | ||
``` | ||
This package also exposes [`eslint-config-xo/space/browser`](space-browser.js) if you're in favor of 2-space indent and in browser: | ||
```js | ||
import xoSpaceBrowser from 'eslint-config-xo/space/browser'; | ||
export default [ | ||
...xoSpaceBrowser, | ||
]; | ||
``` | ||
## Use the XO CLI instead | ||
@@ -68,3 +80,3 @@ | ||
- [eslint-config-xo-space](https://github.com/xojs/eslint-config-xo-space) - ESLint shareable config for XO with 2-space indent | ||
- [eslint-config-xo-typescript](https://github.com/xojs/eslint-config-xo-typescript) - ESLint shareable config for TypeScript to be used with this config | ||
- [eslint-config-xo-react](https://github.com/xojs/eslint-config-xo-react) - ESLint shareable config for React to be used with this config | ||
- [eslint-config-xo-typescript](https://github.com/xojs/eslint-config-xo-typescript) - ESLint shareable config for TypeScript to be used with this config |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
20037
2
7
772
81
Yes
4
+ Addedglobals@^15.3.0
+ Added@eslint/js@9.10.0(transitive)
+ Added@eslint/plugin-kit@0.1.0(transitive)
+ Added@stylistic/eslint-plugin@2.8.0(transitive)
+ Added@typescript-eslint/scope-manager@8.5.0(transitive)
+ Added@typescript-eslint/types@8.5.0(transitive)
+ Added@typescript-eslint/typescript-estree@8.5.0(transitive)
+ Added@typescript-eslint/utils@8.5.0(transitive)
+ Added@typescript-eslint/visitor-keys@8.5.0(transitive)
+ Addedbrace-expansion@2.0.1(transitive)
+ Addedbraces@3.0.3(transitive)
+ Addeddebug@4.3.7(transitive)
+ Addedeslint@9.10.0(transitive)
+ Addedfast-glob@3.3.2(transitive)
+ Addedfill-range@7.1.1(transitive)
+ Addedglob-parent@5.1.2(transitive)
+ Addedglobals@15.9.0(transitive)
+ Addedis-number@7.0.0(transitive)
+ Addedmerge2@1.4.1(transitive)
+ Addedmicromatch@4.0.8(transitive)
+ Addedminimatch@9.0.5(transitive)
+ Addedms@2.1.3(transitive)
+ Addedpicomatch@2.3.14.0.2(transitive)
+ Addedsemver@7.6.3(transitive)
+ Addedto-regex-range@5.0.1(transitive)
+ Addedts-api-utils@1.3.0(transitive)
+ Addedtypescript@5.6.2(transitive)
- Removed@eslint/js@9.9.1(transitive)
- Removeddebug@4.3.6(transitive)
- Removedeslint@9.9.1(transitive)
- Removedms@2.1.2(transitive)