index.js
module.exports = {
"extends": [
// This plugin's rules are overridden by following configs (except for
// its own rules), so including first; we also don't want its disabling
// of some, e.g., recommended rules
// Actually, we're disabling instead for now (and manually enabling in
// `index.js` and adding to `plugins`), as has disabling and adds rules
// we don't want; filed the following to get an "all" config instead
// showing only rules specific to the plugin:
// https://github.com/mysticatea/eslint-plugin/issues/21
// "plugin:@mysticatea/es2019",
"eslint:recommended",
// These may override "standard" which includes their rules,
// so including first
"plugin:promise/recommended",
"plugin:import/recommended",
// This may override eslint:recommended and the promise/import rules,
// but it doesn't turn any off
"standard",
// These only add their own rules and are not used by the others
"plugin:unicorn/recommended",
"plugin:eslint-comments/recommended",
"plugin:compat/recommended",
"plugin:array-func/all",
"plugin:sonarjs/recommended",
"plugin:jsdoc/recommended"
],
"plugins": [
// These have no rules
"markdown",
"html",
// See above on why adding here instead of extending a config
"@mysticatea",
// Filed the following to avoid need for adding `plugins` for this as well
// as adding the rule manually as we do below (will need to reference in
// `package.json` if do so can show in `implicitly-included`):
// https://github.com/dustinspecker/eslint-plugin-no-use-extend-native/issues/125
"no-use-extend-native",
// Filed the following to avoid need for adding `plugins` for this as
// well as `extends`: https://github.com/SonarSource/eslint-plugin-sonarjs/issues/117
"sonarjs"
],
"settings": {
"jsdoc": {
"tagNamePreference": {
"augments": "extends"
}
}
},
"rules": {
// RULES SHOULD ONLY BE DIFFERENT FROM INHERITED (ENABLING, DISABLING, CHANGING)
"array-bracket-newline": ["error", "consistent"],
"array-bracket-spacing": ["error"],
"array-callback-return": ["error"],
"arrow-parens": ["error"],
"block-scoped-var": ["error"],
"callback-return": ["error"],
"computed-property-spacing": ["error"],
"consistent-return": ["error"],
"dot-notation": ["error"],
"func-name-matching": ["error"],
"function-paren-newline": ["error", "consistent"],
"global-require": ["error"],
"guard-for-in": ["error"],
"implicit-arrow-linebreak": ["error"],
"jsx-quotes": ["error"],
"linebreak-style": ["error"],
"max-nested-callbacks": ["error"],
"multiline-ternary": ["error", "always-multiline"],
"no-await-in-loop": ["error"],
"no-bitwise": ["error"],
"no-buffer-constructor": ["error"],
"no-confusing-arrow": ["error"],
"no-div-regex": ["error"],
"no-duplicate-imports": ["error"],
"no-else-return": ["error"],
"no-empty": ["error", {"allowEmptyCatch": true}],
"no-eq-null": ["error"],
"no-extra-label": ["error"],
"no-implicit-coercion": ["error"],
"no-implicit-globals": ["error"],
"no-lonely-if": ["error"],
"no-loop-func": ["error"],
"no-mixed-requires": ["error", {"grouping": true, "allowCall": true}],
"no-process-env": ["error"],
"no-restricted-globals": ["error", {
"name": "event",
"message": "Use local event parameter instead (preferably as \"e\" or \"ev\")."
}, {
"name": "fdescribe",
"message": "Do not commit fdescribe. Use describe instead."
}],
"no-restricted-properties": ["error", {
"property": "__defineGetter__",
"message": "Please use `Object.defineProperty` instead."
}],
"no-script-url": ["error"],
"no-sync": ["error"],
"no-var": ["error"],
"no-void": ["error"],
"nonblock-statement-body-position": ["error"],
"object-shorthand": ["error", "always", {"avoidExplicitReturnArrows": true}],
"operator-assignment": ["error"],
"prefer-const": ["error"],
"prefer-destructuring": ["error", {"object": true}],
"prefer-object-spread": ["error"],
"prefer-rest-params": ["error"],
"prefer-spread": ["error"],
"quote-props": ["error", "as-needed"],
"radix": ["error", "as-needed"],
"require-await": ["error"],
"semi-style": ["error"],
"strict": ["error"],
"switch-colon-spacing": ["error"],
"wrap-regex": ["error"],
"semi": ["error", "always"],
"indent": ["error", 2, {"outerIIFEBody": 0}],
"object-curly-spacing": ["error", "never"],
"no-restricted-syntax": ["error", "[operator=instanceof]"],
// Disable standard
"object-curly-newline": ["off"],
"object-property-newline": ["off"],
"one-var": ["off"],
"lines-between-class-members": "off",
// PROMISE
"promise/no-new-statics": "error",
"promise/prefer-await-to-then": "error",
// PROMISE DISABLE
"promise/param-names": "off",
"promise/no-native": "off",
"promise/no-nesting": "off",
"promise/no-promise-in-callback": "off",
"promise/no-callback-in-promise": "off",
"promise/avoid-new": "off",
"promise/no-return-in-finally": "off",
"promise/valid-params": "off",
// IMPORT
"import/no-absolute-path": "error",
"import/no-dynamic-require": "error",
"import/no-self-import": "error",
"import/no-useless-path-segments": "error",
"import/no-named-as-default": "error",
"import/no-named-as-default-member": "error",
"import/no-deprecated": "error",
"import/no-extraneous-dependencies": "error",
"import/no-mutable-exports": "error",
"import/no-amd": "error",
"import/extensions": ["error", "always", {"ignorePackages": true}],
"import/order": ["error", {"groups": [
"builtin",
"external",
"internal",
["parent", "sibling", "index"]
]}],
"import/newline-after-import": "error",
"import/no-anonymous-default-export": "error",
// JSDOC DISABLE
"jsdoc/check-alignment": ["off"],
"jsdoc/newline-after-description": ["off"],
"jsdoc/no-undefined-types": ["off"],
"jsdoc/require-description": ["off"],
"jsdoc/require-param-description": ["off"],
"jsdoc/require-returns-description": ["off"],
"jsdoc/require-example": ["off"],
"jsdoc/require-jsdoc": ["off"],
"jsdoc/require-returns": ["off"],
// JSDOC
"jsdoc/check-examples": ["error", {
"matchingFileName": "dummy.md",
"rejectExampleCodeRegex": "^`"
}],
"jsdoc/check-param-names": ["error"],
"jsdoc/check-syntax": ["error"],
"jsdoc/check-tag-names": ["error"],
"jsdoc/check-types": ["error"],
"jsdoc/match-description": ["error"],
"jsdoc/valid-types": ["error"],
// Unicorn disable
"unicorn/catch-error-name": "off",
"unicorn/explicit-length-check": "off",
"unicorn/filename-case": "off",
"unicorn/no-unreadable-array-destructuring": "off",
"unicorn/throw-new-error": "off",
"unicorn/import-index": "off",
"unicorn/prevent-abbreviations": "off",
// UNICORN
"unicorn/custom-error-definition": "error",
"unicorn/no-unsafe-regex": "error",
// `@mysticatea`
"@mysticatea/block-scoped-var": "error",
// Adding here for comparison purposes only (already added by
// eslint:recommended and would be added by `es2019` config)
"no-label-var": "error",
// These should be inherited by `es2019` config, but we don't want to
// extend as it has other items we don't want (see comment at top)
"@mysticatea/no-literal-call": "error",
"@mysticatea/no-this-in-static": "error",
"@mysticatea/no-useless-rest-spread": "error",
// `@mysticatea` disabled
"@mysticatea/no-use-ignored-vars": "off",
"@mysticatea/prettier": "off",
"@mysticatea/prefer-for-of": "off",
// Disable mysticatea items we don't want
"func-style": "off",
"init-declarations": "off",
"multiline-comment-style": "off",
"no-invalid-this": "off",
"no-param-reassign": "off",
"no-useless-concat": "off",
"padding-line-between-statements": "off",
"max-params": "off",
"arrow-body-style": "off",
"prefer-arrow-callback": "off",
"prefer-template": "off",
"@mysticatea/no-instanceof-array": "off",
"@mysticatea/no-instanceof-wrapper": "off",
// We're directly using `eslint-comments` and without this, these will
// mistakenly show up in our @mysticatea/eslint-plugin inherited list
"@mysticatea/eslint-comments/disable-enable-pair": "off",
"@mysticatea/eslint-comments/no-aggregating-enable": "off",
"@mysticatea/eslint-comments/no-duplicate-disable": "off",
"@mysticatea/eslint-comments/no-unlimited-disable": "off",
"@mysticatea/eslint-comments/no-unused-disable": "off",
"@mysticatea/eslint-comments/no-unused-enable": "off",
"@mysticatea/eslint-comments/no-use": "off",
// eslint-comments
"eslint-comments/no-unused-disable": "error",
"eslint-comments/disable-enable-pair": ["error", {"allowWholeFile": true}],
// array-func
"array-func/prefer-array-from": "off",
// SONARJS
"sonarjs/max-switch-cases": "off",
"sonarjs/no-collapsible-if": "off",
"sonarjs/no-duplicate-string": "off",
"sonarjs/no-identical-functions": "off",
"sonarjs/no-small-switch": "off",
"sonarjs/prefer-immediate-return": "off",
"sonarjs/cognitive-complexity": "off",
// no-use-extend-native
// Should not be needed here; see comment in `plugins`
// re: "no-use-extend-native" above
"no-use-extend-native/no-use-extend-native": "error"
}
};