RocketChat/Rocket.Chat

View on GitHub
packages/eslint-config/style/index.js

Summary

Maintainability
A
0 mins
Test Coverage
module.exports = {
    rules: {
        // enforce line breaks after opening and before closing array brackets
        // https://eslint.org/docs/rules/array-bracket-newline
        // TODO: enable? semver-major
        // 'array-bracket-newline': ['off', 'consistent'], // object option alternative: { multiline: true, minItems: 3 }

        // // enforce line breaks between array elements
        // // https://eslint.org/docs/rules/array-element-newline
        // // TODO: enable? semver-major
        // 'array-element-newline': ['off', { multiline: true, minItems: 3 }],

        // enforce spacing inside array brackets
        'array-bracket-spacing': ['error', 'never'],

        // enforce spacing inside single-line blocks
        // https://eslint.org/docs/rules/block-spacing
        'block-spacing': 'error',

        // enforce one true brace style
        'brace-style': ['error', '1tbs', { allowSingleLine: true }],

        // // require camel case names
        // // TODO: semver-major (eslint 5): add ignoreDestructuring: false option
        // camelcase: ['error', { properties: 'never' }],

        // // enforce or disallow capitalization of the first letter of a comment
        // // https://eslint.org/docs/rules/capitalized-comments
        // 'capitalized-comments': ['off', 'never', {
        //   line: {
        //     ignorePattern: '.*',
        //     ignoreInlineComments: true,
        //     ignoreConsecutiveComments: true,
        //   },
        //   block: {
        //     ignorePattern: '.*',
        //     ignoreInlineComments: true,
        //     ignoreConsecutiveComments: true,
        //   },
        // }],

        // require trailing commas in multiline object literals
        'comma-dangle': ['error', 'always-multiline'],

        // enforce spacing before and after comma
        'comma-spacing': 'error',

        // enforce one true comma style
        'comma-style': 'error',

        // disallow padding inside computed properties
        'computed-property-spacing': ['error', 'never'],

        // // enforces consistent naming when capturing the current execution context
        // 'consistent-this': 'off',

        // enforce newline at the end of file, with no multiple empty lines
        'eol-last': ['error', 'always'],

        // enforce spacing between functions and their invocations
        // https://eslint.org/docs/rules/func-call-spacing
        'func-call-spacing': ['error', 'never'],

        // // requires function names to match the name of the variable or property to which they are
        // // assigned
        // // https://eslint.org/docs/rules/func-name-matching
        // // TODO: semver-major (eslint 5): add considerPropertyDescriptor: true
        // 'func-name-matching': ['off', 'always', {
        //   includeCommonJSModuleExports: false
        // }],

        // // require function expressions to have a name
        // // https://eslint.org/docs/rules/func-names
        // 'func-names': 'warn',

        // // enforces use of function declarations or expressions
        // // https://eslint.org/docs/rules/func-style
        // // TODO: enable
        // 'func-style': ['off', 'expression'],

        // // enforce consistent line breaks inside function parentheses
        // // https://eslint.org/docs/rules/function-paren-newline
        // 'function-paren-newline': ['error', 'consistent'],

        // // Blacklist certain identifiers to prevent them being used
        // // https://eslint.org/docs/rules/id-blacklist
        // 'id-blacklist': 'off',

        // // this option enforces minimum and maximum identifier lengths
        // // (variable names, property names etc.)
        // 'id-length': 'off',

        // // require identifiers to match the provided regular expression
        // 'id-match': 'off',

        // Enforce the location of arrow function bodies with implicit returns
        // https://eslint.org/docs/rules/implicit-arrow-linebreak
        // 'implicit-arrow-linebreak': ['error', 'beside'],

        // this option sets a specific tab width for your code
        // https://eslint.org/docs/rules/indent
        'indent': ['error', 'tab', { SwitchCase: 1 }],

        // // specify whether double or single quotes should be used in JSX attributes
        // // https://eslint.org/docs/rules/jsx-quotes
        // 'jsx-quotes': ['off', 'prefer-double'],

        // enforces spacing between keys and values in object literal properties
        'key-spacing': ['error', { beforeColon: false, afterColon: true }],

        // require a space before & after certain keywords
        'keyword-spacing': 'error',

        // // enforce position of line comments
        // // https://eslint.org/docs/rules/line-comment-position
        // // TODO: enable?
        // 'line-comment-position': ['off', {
        //   position: 'above',
        //   ignorePattern: '',
        //   applyDefaultPatterns: true,
        // }],

        // disallow mixed 'LF' and 'CRLF' as linebreaks
        // https://eslint.org/docs/rules/linebreak-style
        'linebreak-style': ['error', 'unix'],

        // require or disallow an empty line between class members
        // https://eslint.org/docs/rules/lines-between-class-members
        'lines-between-class-members': ['error', 'always', { exceptAfterSingleLine: false }],

        // // enforces empty lines around comments
        // 'lines-around-comment': 'off',

        // require or disallow newlines around directives
        // https://eslint.org/docs/rules/lines-around-directive
        'lines-around-directive': [
            'error',
            {
                before: 'always',
                after: 'always',
            },
        ],

        // specify the maximum depth that blocks can be nested
        'max-depth': ['off', 4],

        // // specify the maximum length of a line in your program
        // // https://eslint.org/docs/rules/max-len
        // 'max-len': ['error', 100, 2, {
        //   ignoreUrls: true,
        //   ignoreComments: false,
        //   ignoreRegExpLiterals: true,
        //   ignoreStrings: true,
        //   ignoreTemplateLiterals: true,
        // }],

        // // specify the max number of lines in a file
        // // https://eslint.org/docs/rules/max-lines
        // 'max-lines': ['off', {
        //   max: 300,
        //   skipBlankLines: true,
        //   skipComments: true
        // }],

        // // enforce a maximum function length
        // // https://eslint.org/docs/rules/max-lines-per-function
        // 'max-lines-per-function': ['off', {
        //   max: 50,
        //   skipBlankLines: true,
        //   skipComments: true,
        //   IIFEs: true,
        // }],

        // // specify the maximum depth callbacks can be nested
        // 'max-nested-callbacks': 'off',

        // // limits the number of parameters that can be used in the function declaration.
        // 'max-params': ['off', 3],

        // // specify the maximum number of statement allowed in a function
        // 'max-statements': ['off', 10],

        // // restrict the number of statements per line
        // // https://eslint.org/docs/rules/max-statements-per-line
        // 'max-statements-per-line': ['off', { max: 1 }],

        // // enforce a particular style for multiline comments
        // // https://eslint.org/docs/rules/multiline-comment-style
        // 'multiline-comment-style': ['off', 'starred-block'],

        // // require multiline ternary
        // // https://eslint.org/docs/rules/multiline-ternary
        // // TODO: enable?
        // 'multiline-ternary': ['off', 'never'],

        // require a capital letter for constructors
        'new-cap': [
            'error',
            {
                capIsNewExceptions: [
                    'Match.Optional',
                    'Match.Maybe',
                    'Match.OneOf',
                    'Match.Where',
                    'Match.ObjectIncluding',
                    'Push.Configure',
                    'SHA256',
                ],
            },
        ],

        // disallow the omission of parentheses when invoking a constructor with no arguments
        // https://eslint.org/docs/rules/new-parens
        'new-parens': 'error',

        // // allow/disallow an empty newline after var statement
        // 'newline-after-var': 'off',

        // // https://eslint.org/docs/rules/newline-before-return
        // 'newline-before-return': 'off',

        // // enforces new line after each method call in the chain to make it
        // // more readable and easy to maintain
        // // https://eslint.org/docs/rules/newline-per-chained-call
        // 'newline-per-chained-call': ['error', { ignoreChainWithDepth: 4 }],

        // disallow use of the Array constructor
        'no-array-constructor': 'error',

        // // disallow use of bitwise operators
        // // https://eslint.org/docs/rules/no-bitwise
        // 'no-bitwise': 'error',

        // // disallow use of the continue statement
        // // https://eslint.org/docs/rules/no-continue
        // 'no-continue': 'error',

        // // disallow comments inline after code
        // 'no-inline-comments': 'off',

        // disallow if as the only statement in an else block
        // https://eslint.org/docs/rules/no-lonely-if
        'no-lonely-if': 'error',

        // disallow un-paren'd mixes of different operators
        // https://eslint.org/docs/rules/no-mixed-operators
        'no-mixed-operators': [
            'error',
            {
                // the list of arthmetic groups disallows mixing `%` and `**`
                // with other arithmetic operators.
                groups: [
                    ['%', '**'],
                    ['%', '+'],
                    ['%', '-'],
                    ['%', '*'],
                    ['%', '/'],
                    ['**', '+'],
                    ['**', '-'],
                    ['**', '*'],
                    ['**', '/'],
                    ['&', '|', '^', '~', '<<', '>>', '>>>'],
                    ['==', '!=', '===', '!==', '>', '>=', '<', '<='],
                    ['&&', '||'],
                    ['in', 'instanceof'],
                ],
                allowSamePrecedence: false,
            },
        ],

        // disallow mixed spaces and tabs for indentation
        'no-mixed-spaces-and-tabs': 'error',

        // disallow use of chained assignment expressions
        // https://eslint.org/docs/rules/no-multi-assign
        'no-multi-assign': ['error'],

        // disallow multiple empty lines and only one newline at the end
        'no-multiple-empty-lines': ['error', { max: 2, maxEOF: 0 }],

        // // disallow negated conditions
        // // https://eslint.org/docs/rules/no-negated-condition
        // 'no-negated-condition': 'off',

        // disallow nested ternary expressions
        'no-nested-ternary': 'error',

        // // disallow use of the Object constructor
        // 'no-new-object': 'error',

        // // disallow use of unary operators, ++ and --
        // // https://eslint.org/docs/rules/no-plusplus
        // 'no-plusplus': 'error',

        // // disallow certain syntax forms
        // // https://eslint.org/docs/rules/no-restricted-syntax
        // 'no-restricted-syntax': [
        //   'error',
        //   {
        //     selector: 'ForInStatement',
        //     message: 'for..in loops iterate over the entire prototype chain, which is virtually never what you want. Use Object.{keys,values,entries}, and iterate over the resulting array.',
        //   },
        //   {
        //     selector: 'ForOfStatement',
        //     message: 'iterators/generators require regenerator-runtime, which is too heavyweight for this guide to allow them. Separately, loops should be avoided in favor of array iterations.',
        //   },
        //   {
        //     selector: 'LabeledStatement',
        //     message: 'Labels are a form of GOTO; using them makes code confusing and hard to maintain and understand.',
        //   },
        //   {
        //     selector: 'WithStatement',
        //     message: '`with` is disallowed in strict mode because it makes code impossible to predict and optimize.',
        //   },
        // ],

        // disallow space between function identifier and application
        'no-spaced-func': 'error',

        // // disallow tab characters entirely
        // 'no-tabs': 'error',

        // // disallow the use of ternary operators
        // 'no-ternary': 'off',

        // disallow trailing whitespace at the end of lines
        'no-trailing-spaces': [
            'error',
            {
                skipBlankLines: false,
                ignoreComments: false,
            },
        ],

        // // disallow dangling underscores in identifiers
        // // https://eslint.org/docs/rules/no-underscore-dangle
        // 'no-underscore-dangle': ['error', {
        //   allow: [],
        //   allowAfterThis: false,
        //   allowAfterSuper: false,
        //   enforceInMethodNames: true,
        // }],

        // disallow the use of Boolean literals in conditional expressions
        // also, prefer `a || b` over `a ? a : b`
        // https://eslint.org/docs/rules/no-unneeded-ternary
        'no-unneeded-ternary': ['error', { defaultAssignment: false }],

        // disallow whitespace before properties
        // https://eslint.org/docs/rules/no-whitespace-before-property
        'no-whitespace-before-property': 'error',

        // // enforce the location of single-line statements
        // // https://eslint.org/docs/rules/nonblock-statement-body-position
        // 'nonblock-statement-body-position': ['error', 'beside', { overrides: {} }],

        // require padding inside curly braces
        'object-curly-spacing': ['error', 'always'],

        // // enforce line breaks between braces
        // // https://eslint.org/docs/rules/object-curly-newline
        // 'object-curly-newline': ['error', {
        //   ObjectExpression: { minProperties: 4, multiline: true, consistent: true },
        //   ObjectPattern: { minProperties: 4, multiline: true, consistent: true },
        //   ImportDeclaration: { minProperties: 4, multiline: true, consistent: true },
        //   ExportDeclaration: { minProperties: 4, multiline: true, consistent: true },
        // }],

        // enforce "same line" or "multiple line" on object properties.
        // https://eslint.org/docs/rules/object-property-newline
        'object-property-newline': [
            'error',
            {
                allowAllPropertiesOnSameLine: true,
            },
        ],

        // allow just one var statement per function
        'one-var': ['error', 'never'],

        // // require a newline around variable declaration
        // // https://eslint.org/docs/rules/one-var-declaration-per-line
        // 'one-var-declaration-per-line': ['error', 'always'],

        // require assignment operator shorthand where possible or prohibit it entirely
        // https://eslint.org/docs/rules/operator-assignment
        'operator-assignment': ['error', 'always'],

        // Requires operator at the beginning of the line in multiline statements
        // https://eslint.org/docs/rules/operator-linebreak
        'operator-linebreak': ['error', 'before', { overrides: { '=': 'none' } }],

        // disallow padding within blocks
        'padded-blocks': ['error', { blocks: 'never', classes: 'never', switches: 'never' }],

        // // Require or disallow padding lines between statements
        // // https://eslint.org/docs/rules/padding-line-between-statements
        // 'padding-line-between-statements': 'off',

        // Prefer use of an object spread over Object.assign
        // https://eslint.org/docs/rules/prefer-object-spread
        // TODO: semver-major (eslint 5): enable
        'prefer-object-spread': 'off',

        // require quotes around object literal property names
        // https://eslint.org/docs/rules/quote-props.html
        'quote-props': ['error', 'as-needed', { keywords: false, unnecessary: true, numbers: false }],

        // specify whether double or single quotes should be used
        'quotes': ['error', 'single', { avoidEscape: true }],

        // // do not require jsdoc
        // // https://eslint.org/docs/rules/require-jsdoc
        // 'require-jsdoc': 'off',

        // require or disallow use of semicolons instead of ASI
        'semi': ['error', 'always'],

        // enforce spacing before and after semicolons
        'semi-spacing': ['error', { before: false, after: true }],

        // Enforce location of semicolons
        // https://eslint.org/docs/rules/semi-style
        'semi-style': ['error', 'last'],

        // // requires object keys to be sorted
        // 'sort-keys': ['off', 'asc', { caseSensitive: false, natural: true }],

        // // sort variables within the same declaration block
        // 'sort-vars': 'off',

        // require or disallow space before blocks
        'space-before-blocks': ['error', 'always'],

        // require or disallow space before function opening parenthesis
        // https://eslint.org/docs/rules/space-before-function-paren
        'space-before-function-paren': ['error', { anonymous: 'never', named: 'never', asyncArrow: 'always' }],

        // require or disallow spaces inside parentheses
        'space-in-parens': ['error', 'never'],

        // require spaces around operators
        'space-infix-ops': 'error',

        // // Require or disallow spaces before/after unary operators
        // // https://eslint.org/docs/rules/space-unary-ops
        // 'space-unary-ops': ['error', {
        //   words: true,
        //   nonwords: false,
        //   overrides: {
        //   },
        // }],

        // require or disallow a space immediately following the // or /* in a comment
        // https://eslint.org/docs/rules/spaced-comment
        'spaced-comment': 'error',

        // Enforce spacing around colons of switch statements
        // https://eslint.org/docs/rules/switch-colon-spacing
        'switch-colon-spacing': ['error', { after: true, before: false }],

        // // Require or disallow spacing between template tags and their literals
        // // https://eslint.org/docs/rules/template-tag-spacing
        // 'template-tag-spacing': ['error', 'never'],

        // // require or disallow the Unicode Byte Order Mark
        // // https://eslint.org/docs/rules/unicode-bom
        // 'unicode-bom': ['error', 'never'],

        // // require regex literals to be wrapped in parentheses
        // 'wrap-regex': 'off'
    },
};