eslint-config-strict
Version:
ESLint sharable config for strict linting
854 lines (832 loc) • 26.8 kB
JavaScript
module.exports = {
env: {
builtin: true,
node: true,
},
plugins: [],
globals: {
},
rules: {
// # Possible Errors
// The following rules point out areas where you might have made mistakes.
// enforce “for” loop update clause moving the counter in the right direction
'for-direction': 2,
// disallow comparing against -0
'no-compare-neg-zero': 2,
// disallow assignment in conditional expressions
'no-cond-assign': 2,
// disallow use of console
'no-console': 2,
// disallow use of constant expressions in conditions
'no-constant-condition': 2,
// disallow control characters in regular expressions
'no-control-regex': 2,
// disallow use of debugger
'no-debugger': 2,
// disallow duplicate arguments in functions
'no-dupe-args': 2,
// disallow duplicate keys when creating object literals
'no-dupe-keys': 2,
// disallow a duplicate case label
'no-duplicate-case': 2,
// disallow the use of empty character classes in regular expressions
'no-empty-character-class': 2,
// disallow empty statements
'no-empty': 2,
// disallow assigning to the exception in a catch block
'no-ex-assign': 2,
// disallow double-negation boolean casts in a boolean context
'no-extra-boolean-cast': 2,
// disallow unnecessary parentheses
'no-extra-parens': [
2,
// only function expressions will be checked for unnecessary parentheses
'functions',
],
// disallow unnecessary semicolons
'no-extra-semi': 2,
// disallow overwriting functions written as function declarations
'no-func-assign': 2,
// disallow function or variable declarations in nested blocks
'no-inner-declarations': 2,
// disallow invalid regular expression strings in the RegExp constructor
'no-invalid-regexp': 2,
// disallow irregular whitespace outside of strings and comments
'no-irregular-whitespace': 2,
// disallow the use of object properties of the global object (Math and JSON)
// as functions
'no-obj-calls': 2,
// disallow use of Object.prototypes builtins directly
'no-prototype-builtins': 2,
// disallow multiple spaces in a regular expression literal
'no-regex-spaces': 2,
// disallow sparse arrays
'no-sparse-arrays': 2,
// Disallow template literal placeholder syntax in regular strings
'no-template-curly-in-string': 2,
// Avoid code that looks like two expressions but is actually one (off by default)
'no-unexpected-multiline': 2,
// disallow unreachable statements after a return, throw, continue, or break
// statement
'no-unreachable': 2,
// disallow control flow statements in finally blocks
'no-unsafe-finally': 2,
// disallow negating the left operand of relational operators
'no-unsafe-negation': 2,
// disallow comparisons with the value NaN
'use-isnan': 2,
// Ensure JSDoc comments are valid
'valid-jsdoc': 0,
// Ensure that the results of typeof are compared against a valid string
'valid-typeof': 2,
// # Best Practices
// These are rules designed to prevent you from making mistakes. They either
// prescribe a better way of doing something or help you avoid footguns.
// Enforces getter/setter pairs in objects
'accessor-pairs': 2,
// Enforces return statements in callbacks of array's methods
'array-callback-return': 2,
// treat var statements as if they were block scoped
'block-scoped-var': 0,
// enforce that class methods utilize `this`
'class-methods-use-this': 2,
// specify the maximum cyclomatic complexity allowed in a program
'complexity': [
2,
// Maximum cycolmatic complexity
10,
],
// require return statements to either always or never specify values
'consistent-return': 2,
// specify curly brace conventions for all control statements
'curly': 2,
// require default case in switch statements
'default-case': 2,
// enforces consistent newlines before or after dots
'dot-location': [
2,
// require the dot to be on the same line as the property
'property',
],
// encourages use of dot notation whenever possible
'dot-notation': 2,
// require the use of === and !==
'eqeqeq': 2,
// make sure for-in loops have an if statement
'guard-for-in': 0,
// disallow the use of alert, confirm, and prompt
'no-alert': 2,
// disallow use of arguments.caller or arguments.callee
'no-caller': 2,
// disallow lexical declarations in case clauses
'no-case-declarations': 2,
// disallow division operators explicitly at beginning of regular expression
'no-div-regex': 2,
// disallow else after a return in an if
'no-else-return': 2,
// disallow use of empty functions
'no-empty-function': [
2,
{
// Do not allow any type of empty function
allow: [],
},
],
// disallow use of empty destructuring patterns
'no-empty-pattern': 2,
// disallow comparisons to null without a type-checking operator
'no-eq-null': 2,
// disallow use of eval()
'no-eval': 2,
// disallow adding to native types
'no-extend-native': 2,
// disallow unnecessary function binding
'no-extra-bind': 2,
// disallow unnecessary labels
'no-extra-label': 2,
// disallow fallthrough of case statements
'no-fallthrough': 2,
// disallow the use of leading or trailing decimal points in numeric literals
'no-floating-decimal': 2,
// disallow assignments to native objects or read-only global variables
'no-global-assign': 2,
// disallow the type conversions with shorter notations
'no-implicit-coercion': [
2,
{
// booleans must be explicitly coerced
boolean: true,
// numbers must be explicitly coerced
number: true,
// strings must be explicitly coerced
string: true,
},
],
// disallow var and named functions in global scope
'no-implicit-globals': 2,
// disallow use of eval()-like methods
'no-implied-eval': 2,
// disallow this keywords outside of classes or class-like objects
'no-invalid-this': 2,
// disallow usage of __iterator__ property
'no-iterator': 2,
// disallow use of labeled statements
'no-labels': 0,
// disallow unnecessary nested blocks
'no-lone-blocks': 2,
// disallow creation of functions within loops
'no-loop-func': 2,
// disallow the use of magic numbers
'no-magic-numbers': [
2,
{
ignore: [
0, // allowed for common operations such as guarding length (`.length === 0`)
1, // allowed for common operations such as inc/decrementing (`+=1`, `.length - 1`)
2, // allowed for common operations such as dividing by two (`half = total / 2`)
],
},
],
// disallow use of multiple spaces
'no-multi-spaces': 2,
// disallow use of multiline strings
'no-multi-str': 2,
// disallow use of new operator for Function object
'no-new-func': 2,
// disallows creating new instances of String,Number, and Boolean
'no-new-wrappers': 2,
// disallow use of new operator when not part of the assignment or comparison
'no-new': 2,
// disallow use of octal escape sequences in string literals, such as var foo = "Copyright \251";
'no-octal-escape': 2,
// disallow use of (old style) octal literals
'no-octal': 2,
// disallow reassignment of function parameters
'no-param-reassign': 0,
// disallow usage of __proto__ property
'no-proto': 2,
// disallow declaring the same variable more then once
'no-redeclare': 2,
'no-restricted-properties': [
2,
{
'property': '__defineGetter__',
'message': 'Please use Object.defineProperty instead.',
},
{
'property': '__defineSetter__',
'message': 'Please use Object.defineProperty instead.',
},
{
'property': '__lookupGetter__',
'message': 'Please use Object.getOwnPropertyDescriptor instead.',
},
{
'property': '__lookupSetter__',
'message': 'Please use Object.getOwnPropertyDescriptor instead.',
},
],
// disallow use of assignment in return statement
'no-return-assign': 2,
// disallows unnecessary `return await`
'no-return-await': 2,
// disallow use of `javascript:` urls.
'no-script-url': 2,
// disallow assignments where both sides are exactly the same
'no-self-assign': 2,
// disallow comparisons where both sides are exactly the same
'no-self-compare': 2,
// disallow use of comma operator
'no-sequences': 2,
// restrict what can be thrown as an exception
'no-throw-literal': 2,
// disallow unmodified conditions of loops
'no-unmodified-loop-condition': 2,
// disallow usage of expressions in statement position
'no-unused-expressions': 2,
// disallow unused labels
'no-unused-labels': 2,
// disallow unnecessary .call() and .apply()
'no-useless-call': 2,
// disallow unnecessary concatenation of literals or template literals
'no-useless-concat': 2,
// disallow unnecessary escape usage
'no-useless-escape': 2,
// disallow redundant return statements
'no-useless-return': 2,
// disallow use of void operator
'no-void': 2,
// disallow usage of configurable warning terms in comments: e.g. todo
'no-warning-comments': [
2,
{
// Disallowed warning terms
'terms': [
'todo',
'fixme',
'xxx',
],
// Comment location to check
'location': 'anywhere',
},
],
// disallow use of the with statement
'no-with': 2,
// require using Error objects as Promise rejection reasons
'prefer-promise-reject-errors': 2,
// require use of the second argument for parseInt()
'radix': 2,
// disallow async functions which have no `await` expression
'require-await': 2,
// requires to declare all vars on top of their containing scope
'vars-on-top': 0,
// require immediate function invocation to be wrapped in parentheses
'wrap-iife': 2,
// require or disallow Yoda conditions
'yoda': 2,
// # Strict Mode
// These rules relate to using strict mode.
// require that all functions are run in strict mode
'strict': [
2,
'global',
],
// # Variables
// These rules have to do with variable declarations.
// enforce or disallow variable initializations at definition
'init-declarations': [
2,
// always expect variables to be assigned upon initialisation
'always',
],
// disallow the catch clause parameter name being the same as a variable in the
// outer scope
'no-catch-shadow': 2,
// disallow deletion of variables
'no-delete-var': 2,
// disallow labels that share a name with a variable
'no-label-var': 2,
// disallow declaration of variables already declared in the outer scope
'no-shadow': 2,
// disallow specified global variables
'no-restricted-globals': 0,
// disallow shadowing of names such as arguments
'no-shadow-restricted-names': 2,
// disallow use of undefined when initializing variables
'no-undef-init': 2,
// disallow use of undeclared variables unless mentioned in a /*global */ block
'no-undef': 2,
// disallow use of undefined variable
'no-undefined': 2,
// disallow declaration of variables that are not used in the code
'no-unused-vars': 2,
// disallow use of variables before they are defined
'no-use-before-define': 2,
// # Node.js
// These rules are specific to JavaScript running on Node.js.
// enforces error handling in callbacks
'callback-return': [
2,
// name of callback argument
['callback', 'cb', 'next', 'done'],
],
// enforce `require()` on top-level module scope
'global-require': 2,
// enforces error handling in callbacks
'handle-callback-err': [
2,
// name of error argument
'^.*(e|E)rr(or)?$',
],
// disallow use of the Buffer() constructor
'no-buffer-constructor': 2,
// disallow mixing regular variable and require declarations
'no-mixed-requires': 2,
// disallow use of new operator with the require function
'no-new-require': 2,
// disallow string concatenation with __dirname and __filename
'no-path-concat': 2,
// disallow the use of `process.env`
'no-process-env': 2,
// disallow process.exit()
'no-process-exit': 2,
// restrict usage of specified node modules
'no-restricted-modules': 0,
// disallow use of synchronous methods
'no-sync': 2,
// # Stylistic Issues
// These rules are purely matters of style and are quite subjective.
// enforce line breaks after opening and before closing array brackets
'array-bracket-newline': [
2,
{
// require line breaks if there are line breaks inside elements or between elements
'multiline': true,
},
],
// enforce spacing inside array brackets
'array-bracket-spacing': [
2,
'always',
],
// enforce line breaks between array elements
'array-element-newline': [
2,
{
// require line breaks if there are line breaks inside elements
'multiline': true,
},
],
// disallow or enforce spaces inside of single line blocks
'block-spacing': [
2,
// always enforce spacing in blocks
'always',
],
// enforce one true brace style
'brace-style': [
2,
// brace-style (1tbs or stroustrup)
'1tbs',
{
// allow the start and end braces to be on the same line
'allowSingleLine': false,
},
],
// require camel case names
'camelcase': 2,
// enforce or disallow capitalization of the first letter of a comment
'capitalized-comments': 0,
// disallow or enforce trailing commas in object literals
'comma-dangle': [
2,
'always-multiline',
],
// enforce spacing before and after comma
'comma-spacing': [
2,
{
// enforce spaces before
'before': false,
// enforce spaces after
'after': true,
},
],
// enforce one true comma style
'comma-style': [
2,
// enforce comma on the first line, or the last line
'last',
],
// require or disallow padding inside computed properties
'computed-property-spacing': [
2,
// disallows spaces inside of computed properties
'never',
],
// enforces consistent naming when capturing the current execution context
'consistent-this': [
2,
// Variable name that a `this` alias must be
'self',
],
// enforce newline at the end of file, with no multiple empty lines
'eol-last': 2,
// require or disallow spacing between function identifiers and their invocations
'func-call-spacing': [
2,
'never',
],
// require function names to match the name of the variable or property to which they are assigned
'func-name-matching': 2,
// require function expressions to have a name
'func-names': 2,
// enforces use of function declarations or expressions
'func-style': [
2,
// enforce declarations
'declaration',
],
// Blacklist certain identifiers to prevent them being used
'id-blacklist': [
2,
// Generic, try instead naming with context, for example "userData", "fileError", "httpCallback"
'data',
'item',
'err',
'error',
'cb',
'callback',
// These name the type but have no other real context. Try naming with context
'array',
'func',
'object',
'string',
'num',
'number',
// Common placeholder variables, avoid these in real code
'foo',
'bar',
'baz',
'bang',
'biz',
'bong',
'tmp',
'temp',
'thing',
// These are common names for `this`. Instead use bind or arrow functions
'that',
'self',
'context',
],
// this option enforces minimum and maximum identifier lengths
// (variable names, property names etc.)
'id-length': [
2,
{
// identifiers must be a minimum of 3 characters
'min': 3,
// ... and a max of 50
'max': 50,
// ... but `i`, `x`, and `y`, and 'id' are allowed
'exceptions': [ 'i', 'x', 'y', 'id' ],
// don't check identifiers that are object properties
'properties': 'never',
},
],
// require identifiers to match the provided regular expression
'id-match': [
2,
// identifiers must always be camelCased or CONSTANT_NAMED.
'^([A-Za-z]*|[A-Z][A-Z_]*[A-Z])$',
{
// don't check existing identifiers, only new ones
'onlyDeclarations': true,
// don't check identifiers in properties are also checked
'properties': false,
},
],
// this option sets a specific tab width for your code
'indent': [
2,
// 2 space tabs
2,
{
// indent switch cases
'SwitchCase': 1,
},
],
// specify whether double or single quotes should be used in JSX attributes
'jsx-quotes': [
2,
// Always prefer double quotes
'prefer-double',
],
// enforces spacing between keys and values in object literal properties
'key-spacing': [
2,
{
// enforce spaces before colon
'beforeColon': false,
// enforce spaces after colon
'afterColon': true,
},
],
// enforce spacing before and after keywords
'keyword-spacing': [
2,
{
before: true,
after: true,
},
],
// enforce position of line comments
'line-comment-position': [
2,
{
// ensure line comments go above the line of code
position: 'above',
},
],
// disallow mixed 'LF' and 'CRLF' as linebreaks
'linebreak-style': [
2,
'unix',
],
// enforces empty lines around comments
'lines-around-comment': [
2,
{
'beforeBlockComment': false,
'beforeLineComment': false,
},
],
// specify the maximum depth that blocks can be nested
'max-depth': [
2,
// the max depth
5,
],
// specify the maximum length of a line in your program
'max-len': [
2,
// line length
120,
],
// enforce a maximum file length
'max-lines': 0,
// specify the maximum depth callbacks can be nested
'max-nested-callbacks': [
2,
// max amount of nested callbacks
5,
],
// limits the number of parameters that can be used in the function declaration.
'max-params': [
2,
// max params
5,
],
// enforce a maximum number of statements allowed per line
'max-statements-per-line': 2,
// specify the maximum number of statement allowed in a function
'max-statements': [
2,
// max statements
50,
],
// enforce newlines between operands of ternary expressions
'multiline-ternary': 0,
// require a capital letter for constructors
'new-cap': [
2,
{
// require constructors called with new to be capped
'newIsCap': true,
// require functions with capital to always be called with new
'capIsNew': false,
},
],
// disallow the omission of parentheses when invoking a constructor with no arguments
'new-parens': 2,
// enforce newline after each call when chaining the calls
'newline-per-chained-call': [
2,
{
ignoreChainWithDepth: 5,
},
],
// disallow use of the Array constructor
'no-array-constructor': 2,
// disallow use of bitwise operators
'no-bitwise': 2,
// disallow use of the continue statement
'no-continue': 0,
// disallow comments inline after code
'no-inline-comments': 2,
// disallow if as the only statement in an else block
'no-lonely-if': 2,
// disallow mixed binary operators
'no-mixed-operators': 2,
// disallow mixed spaces and tabs for indentation
'no-mixed-spaces-and-tabs': 2,
// disallow Use of Chained Assignment Expressions
'no-multi-assign': 2,
// disallow multiple empty lines
'no-multiple-empty-lines': 2,
// disallow negated conditions
'no-negated-condition': 2,
// disallow nested ternary expressions
'no-nested-ternary': 2,
// disallow use of the Object constructor
'no-new-object': 2,
// disallow use of unary operators, ++ and --
'no-plusplus': 0,
// disallow use of certain syntax in code
'no-restricted-syntax': [
2,
// Disallow `with` statements.
'WithStatement',
],
// disallow tabs in file
'no-tabs': 2,
// disallow the use of ternary operators
'no-ternary': 0,
// disallow trailing whitespace at the end of lines
'no-trailing-spaces': 2,
// disallow dangling underscores in identifiers
'no-underscore-dangle': 2,
// disallow the use of Boolean literals in conditional expressions
'no-unneeded-ternary': 2,
// disallow whitespace before properties
'no-whitespace-before-property': 2,
// enforce the location of single-line statements
'nonblock-statement-body-position': 0,
// enforce consistent line breaks inside braces
'object-curly-newline': 0,
// require or disallow padding inside curly braces
'object-curly-spacing': [
2,
// enforces a space inside of curly braces
'always',
],
// enforce placing object properties on separate lines
'object-property-newline': 0,
// require or disallow an newline around variable declarations
'one-var-declaration-per-line': [
2,
// Always enforce one variable declaration per line
'always',
],
// require or disallow one variable declaration per function
'one-var': [
2,
// only allow one variable per declaration
'never',
],
// require assignment operator shorthand where possible or prohibit it entirely
'operator-assignment': [
2,
// enforce them to be "always" used when possible, or "never" used
'always',
],
// enforce operators to be placed before or after line breaks
'operator-linebreak': [
2,
// enforce line breaks after operators
'after',
],
// enforce padding within blocks
'padded-blocks': [
2,
// enforce them to be "always" used when possible, or "never" used
'never',
],
// require or disallow padding lines between statements
'padding-line-between-statements': [
2,
// equire blank lines after all directive prologues, like the deprecated lines-around-directive rule
{
'blankLine': 'always',
'prev': 'directive',
'next': '*',
},
{
'blankLine': 'any',
'prev': 'directive',
'next': 'directive',
},
],
// require quotes around object literal property names
'quote-props': 0,
// specify whether double or single quotes should be used
'quotes': [
2,
// "double" or 'single' quotes should always be enforced
'single',
],
// Require JSDoc comment
'require-jsdoc': 0,
// enforce spacing before and after semicolons
'semi-spacing': [
2,
{
// dissallow spacing before semicolon
'before': false,
// enforce spacing after semicolon
'after': true,
},
],
// enforce location of semicolons
'semi-style': [
2,
// enforce that semicolons are at the end of statements
'last',
],
// require or disallow use of semicolons instead of ASI
'semi': [
2,
// enforce them to be "always" used when possible, or "never" used
'always',
],
// require object keys to be sorted
'sort-keys': 0,
// sort variables within the same declaration block
'sort-vars': 0,
// require or disallow space before blocks
'space-before-blocks': [
2,
// enforce them to be "always" used when possible, or "never" used
'always',
],
// require or disallow space before function opening parenthesis
'space-before-function-paren': [
2,
{
// enforce a space before anonymous function parens
'anonymous': 'always',
// dissallow a space before named function parens
'named': 'never',
},
],
// require or disallow spaces inside parentheses
'space-in-parens': [
2,
// enforce them to be "always" used when possible, or "never" used
'never',
],
// require spaces around operators
'space-infix-ops': 2,
// Require or disallow spaces before/after unary operators
'space-unary-ops': 2,
// require or disallow a space immediately following the // or /* in a comment
'spaced-comment': [
2,
'always',
{
'exceptions': ['*'],
},
],
// enforce spacing around colons of switch statements
'switch-colon-spacing': [
2,
{
// require one or more spaces after colons
'after': true,
// disallow before colons
'before': false,
},
],
// require or disallow spacing between template tags and their literals
'template-tag-spacing': 2,
// require or disallow the Unicode Byte Order Mark (BOM)
'unicode-bom': 0,
// require regex literals to be wrapped in parentheses
'wrap-regex': 0,
// # Deprecated
// These rules have been deprecated and replaced by newer rules.
// disallow Reassignment of Native Objects
'no-native-reassign': 0,
// disallow negating the left operand in in expressions
'no-negated-in-lhs': 0,
// disallow spacing between function identifiers and their applications
'no-spaced-func': 0,
},
};
// # Plugins
// The following rules are included based on the plugins available.
try {
require('eslint-plugin-filenames');
module.exports.plugins.push('filenames');
// consistent Filenames via regex
module.exports.rules['filenames/match-regex'] = [
2,
// the pattern a file name must match
'^[a-z\-\.]+$',
];
// match exported values
module.exports.rules['filenames/match-exported'] = 0;
// don't allow index.js files
module.exports.rules['filenames/no-index'] = 0;
} catch (e) {
}