123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701 |
- // 2015 December 1
- // https://github.com/bevry/base
- // http://eslint.org
- /* eslint no-warning-comments: 0 */
- 'use strict'
- const IGNORE = 0, WARN = 1, ERROR = 2, MAX_PARAMS = 4
- module.exports = {
- // parser: 'babel-eslint',
- // ^ the bundled ESLINT parser is now actually quite good, and supports the ecmaFeatures property
- ecmaFeatures: {
- // this property only works with the bundled ESLINT parser, not babel-eslint
- arrowFunctions: true,
- binaryLiterals: true,
- blockBindings: true,
- classes: true,
- defaultParams: true,
- destructuring: true,
- forOf: true,
- generators: true,
- modules: false, // Disabled due to https://twitter.com/balupton/status/671519915795345410
- objectLiteralComputedProperties: true,
- objectLiteralDuplicateProperties: true,
- objectLiteralShorthandMethods: true,
- objectLiteralShorthandProperties: true,
- octalLiterals: true,
- regexUFlag: true,
- regexYFlag: true,
- restParams: true,
- spread: true,
- superInFunctions: true,
- templateStrings: true,
- unicodeCodePointEscapes: true,
- globalReturn: true,
- jsx: true,
- experimentalObjectRestSpread: true
- },
- env: {
- browser: true,
- node: true,
- es6: true,
- commonjs: true,
- amd: true
- },
- rules: {
- // ----------------------------
- // Problems with these rules
- // If we can figure out how to enable the following, that would be great
- // Two spaces after one line if or else:
- // if ( blah ) return
- // Insead of one space:
- // if ( blah ) return
- // No spaces on embedded function:
- // .forEach(function(key, value){
- // instead of:
- // .forEach(function (key, value) {
- // Else and catch statements on the same line as closing brace:
- // } else {
- // } catch (e) {
- // instead of:
- // }
- // else {
- // --------------------------------------
- // Possible Errors
- // The following rules point out areas where you might have made mistakes.
- // ES6 supports dangling commas
- 'comma-dangle': IGNORE,
- // Don't allow assignments in conditional statements (if, while, etc.)
- 'no-cond-assign': [ERROR, 'always'],
- // Warn but don't error about console statements
- 'no-console': WARN,
- // Allow while(true) loops
- 'no-constant-condition': IGNORE,
- // Seems like a good idea to error about this
- 'no-control-regex': ERROR,
- // Warn but don't error about console statements
- 'no-debugger': WARN,
- // Don't allow duplicate arguments in a function, they can cause errors
- 'no-dupe-args': ERROR,
- // Disallow duplicate keys in an object, they can cause errors
- 'no-dupe-keys': ERROR,
- // Disallow duplicate case statements in a switch
- 'no-duplicate-case': ERROR,
- // Disallow empty [] in regular expressions as they cause unexpected behaviour
- 'no-empty-character-class': ERROR,
- // Allow empty block statements, they are useful for clarity
- 'no-empty': IGNORE,
- // Overwriting the exception argument in a catch statement can cause memory leaks in some browsers
- 'no-ex-assign': ERROR,
- // Disallow superflous boolean casts, they offer no value
- 'no-extra-boolean-cast': ERROR,
- // Allow superflous parenthesis as they offer clarity in some cases
- 'no-extra-parens': IGNORE,
- // Disallow superflous semicolons, they offer no value
- 'no-extra-semi': IGNORE,
- // Seems like a good idea to error about this
- 'no-func-assign': ERROR,
- // Seems like a good idea to error about this
- 'no-inner-declarations': ERROR,
- // Seems like a good idea to error about this
- 'no-invalid-regexp': ERROR,
- // Seems like a good idea to error about this
- 'no-irregular-whitespace': ERROR,
- // Seems like a good idea to error about this
- 'no-negated-in-lhs': ERROR,
- // Seems like a good idea to error about this
- 'no-obj-calls': ERROR,
- // Seems like a good idea to error about this
- // Instead of / / used / {ERROR}/ instead
- 'no-regex-spaces': ERROR,
- // Seems like a good idea to error about this
- 'no-sparse-arrays': ERROR,
- // Seems like a good idea to error about this
- 'no-unexpected-multiline': ERROR,
- // Seems like a good idea to error about this
- 'no-unreachable': ERROR,
- // Seems like a good idea to error about this
- 'use-isnan': ERROR,
- // We use YUIdoc, not JSDoc
- 'valid-jsdoc': IGNORE,
- // Seems like a good idea to error about this
- 'valid-typeof': ERROR,
- // --------------------------------------
- // 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.
- // Meh
- 'accessor-pairs': IGNORE,
- // This rule seems buggy
- 'block-scoped-var': IGNORE,
- // Disable complexity checks, they are annoying and not that useful in detecting actual complexity
- 'complexity': IGNORE,
- // We use blank returns for break statements
- 'consistent-return': IGNORE,
- // Always require curly braces unless the statement is all on a single line
- 'curly': [ERROR, 'multi-line'],
- // If we don't have a default cause, it probably means we should throw an error
- 'default-case': ERROR,
- // Dots should be on the newlines
- // chainableThingy
- // .doSomething()
- // .doSomethingElse()
- 'dot-location': [ERROR, 'property'],
- // Use dot notation where possible
- 'dot-notation': ERROR,
- // Unless you are doing == null, then force === to avoid truthy/falsey mistakes
- 'eqeqeq': [ERROR, 'allow-null'],
- // Always use hasOwnProperty when doing for in
- 'guard-for-in': ERROR,
- // Warn about alert statements in our code
- // Use one of the suggested alternatives instead
- // Reasoning is they could be mistaken for left over debugging statements
- 'no-alert': WARN,
- // They are very slow
- 'no-caller': ERROR,
- // Wow...
- 'no-case-declarations': ERROR,
- // Seems like a good idea to error about this
- 'no-div-regex': ERROR,
- // Returns in else statements offer code clarity, so disable this rule
- 'no-else-return': IGNORE,
- // Seems like a good idea to error about this
- 'no-empty-label': ERROR,
- // Seems sensible
- 'no-empty-pattern': ERROR,
- // We know that == null is a null and undefined check
- 'no-eq-null': IGNORE,
- // Eval is slow and unsafe, use vm's instead
- 'no-eval': ERROR,
- // There is never a good reason for this
- 'no-extend-native': ERROR,
- // Don't allow useless binds
- 'no-extra-bind': ERROR,
- // Don't allow switch case statements to follow through, use continue keyword instead
- 'no-fallthrough': ERROR,
- // Use zero when doing decimals, otherwise it is confusing
- 'no-floating-decimal': ERROR,
- // Cleverness is unclear
- 'no-implicit-coercion': ERROR,
- // A sneaky way to do evals
- 'no-implied-eval': ERROR,
- // This throws for a lot of senseless things, like chainy functions
- 'no-invalid-this': IGNORE,
- // Use proper iterators instead
- 'no-iterator': ERROR,
- // We never use this, it seems silly to allow this
- 'no-labels': ERROR,
- // We never use this, it seems silly to allow this
- 'no-lone-blocks': ERROR,
- // Loop functions always cause problems, as the scope isn't clear through iterations
- 'no-loop-func': ERROR,
- // This is a great idea
- // Although ignore -1 and 0 as it is common with indexOf
- 'no-magic-numbers': [WARN, { ignore: [-1, 0] }],
- // We like multi spaces for clarity
- // E.g. We like
- // if ( blah ) return foo
- // Instead of:
- // if ( blah ) return foo
- // @TODO would be great to enforce the above
- 'no-multi-spaces': IGNORE,
- // Use ES6 template strings instead
- 'no-multi-str': ERROR,
- // Would be silly to allow this
- 'no-native-reassign': ERROR,
- // We never use this, it seems silly to allow this
- 'no-new-func': ERROR,
- // We never use this, it seems silly to allow this
- 'no-new-wrappers': ERROR,
- // We never use this, it seems silly to allow this
- 'no-new': ERROR,
- // We never use this, it seems silly to allow this
- 'no-octal-escape': ERROR,
- // We never use this, it seems silly to allow this
- 'no-octal': ERROR,
- // We got to be pretty silly if we don't realise we are doing this
- // As such, take any usage as intentional and aware
- 'no-param-reassign': IGNORE,
- // We use process.env wisely
- 'no-process-env': IGNORE,
- // We never use this, it seems silly to allow this
- 'no-proto': ERROR,
- // We never use this, it seems silly to allow this
- 'no-redeclare': ERROR,
- // We never use this, it seems silly to allow this
- 'no-return-assign': ERROR,
- // We never use this, it seems silly to allow this
- 'no-script-url': ERROR,
- // We never use this, it seems silly to allow this
- 'no-self-compare': ERROR,
- // We never use this, it seems silly to allow this
- 'no-sequences': ERROR,
- // We always want proper error objects as they have stack traces and respond to instanceof Error checks
- 'no-throw-literal': ERROR,
- // We never use this, it seems silly to allow this
- 'no-unused-expressions': ERROR,
- // Seems sensible
- 'no-useless-call': ERROR,
- // Seems sensible
- 'no-useless-concat': ERROR,
- // We never use this, it seems silly to allow this
- 'no-void': ERROR,
- // Warn about todos
- 'no-warning-comments': [WARN, { terms: ['todo', 'fixme'], location: 'anywhere' }],
- // We never use this, it seems silly to allow this
- 'no-with': ERROR,
- // Always specify a radix to avoid errors
- 'radix': ERROR,
- // We appreciate the clarity late defines offer
- 'vars-on-top': IGNORE,
- // Wrap instant called functions in parenthesis for clearer intent
- 'wrap-iife': ERROR,
- // Because we force === and never allow assignments in conditions
- // we have no need for yoda statements, so disable them
- 'yoda': [ERROR, 'never'],
- // --------------------------------------
- // Strict Mode
- // These rules relate to using strict mode.
- // Ensure that use strict is specified to prevent the runtime erorr:
- // SyntaxError: Block-scoped declarations (let, const, function, class) not yet supported outside strict mode
- 'strict': [ERROR, 'global'],
- // --------------------------------------
- // Variables
- // These rules have to do with variable declarations.
- // We don't care
- 'init-declaration': IGNORE,
- // Don't allow the catch method to shadow objects as browsers handle this differently
- // Update: We don't care for IE8
- 'no-catch-shadow': IGNORE,
- // Don't use delete, it disables optimisations
- 'no-delete-var': ERROR,
- // We never use this, it seems silly to allow this
- 'no-label-var': ERROR,
- // We never use this, it seems silly to allow this
- 'no-shadow-restricted-names': ERROR,
- // We use shadowing
- 'no-shadow': IGNORE,
- // Makes sense
- 'no-undef-init': ERROR,
- // Error when an undefined variable is used
- 'no-undef': ERROR,
- // typeof blah === 'undefined' should always be used
- 'no-undefined': ERROR,
- // Warn us when we don't use something
- 'no-unused-vars': WARN,
- // Error when we try and use something before it is defined
- 'no-use-before-define': ERROR,
- // --------------------------------------
- // Node.js and CommonJS
- // These rules are specific to JavaScript running on Node.js or using CommonJS in the browser.
- // Seems to difficult to enforce
- 'callback-return': IGNORE,
- // We use require where it is appropriate to use it
- 'global-require': IGNORE,
- // Force handling of callback errors
- 'handle-callback-err': ERROR,
- // @TODO decide if this is good or not
- 'no-mixed-requires': ERROR,
- // Disallow error prone syntax
- 'no-new-require': ERROR,
- // Always use path.join for windows support
- 'no-path-concat': ERROR,
- // We know what we are doing
- 'no-process-exit': IGNORE,
- // No need to disallow any modules
- 'no-restricted-modules': IGNORE,
- // Sometimes sync methods are useful, so warn but don't error
- 'no-sync': WARN,
- // --------------------------------------
- // Stylistic
- // These rules are purely matters of style and are quite subjective.
- // We don't use spaces with brackets
- 'array-bracket-spacing': [ERROR, 'never'],
- // Disallow or enforce spaces inside of single line blocks
- 'block-spacing': [ERROR, 'always'],
- // Opening brace on same line, closing brace on its own line, except when statement is a single line
- 'brace-style': [ERROR, 'stroustrup', { allowSingleLine: true }],
- // Use camel case
- 'camelcase': ERROR,
- // Require a comma after always
- 'comma-spacing': [ERROR, { before: false, after: true }],
- // Commas go last, we have tooling to detect if we forget a comma
- 'comma-style': [ERROR, 'last'],
- // Require or disallow padding inside computed properties
- 'computed-property-spacing': [ERROR, 'never'],
- // Enabling this was incredibly annoying when doing layers of nesting
- 'consistent-this': IGNORE,
- // Enable to make UNIX people's lives easier
- 'eol-last': ERROR,
- // We like anonymous functions
- 'func-names': IGNORE,
- // Prefer to define functions via variables
- 'func-style': [WARN, 'declaration'],
- // Sometimes short names are appropriate
- 'id-length': IGNORE,
- // Camel case handles this for us
- 'id-match': IGNORE,
- // Use tabs and indent case blocks
- 'indent': [ERROR, 'tab', { SwitchCase: WARN }],
- // Prefer double qoutes for JSX properties: <a b="c" />, <a b='"' />
- 'jsx-quotes': [ERROR, 'prefer-double'],
- // Space after the colon
- 'key-spacing': [ERROR, {
- beforeColon: false,
- afterColon: true
- }],
- // Enforce unix line breaks
- 'linebreak-style': [ERROR, 'unix'],
- // Enforce new lines before block comments
- 'lines-around-comment': [ERROR, { beforeBlockComment: true, allowBlockStart: true }],
- // Disabled to ensure consistency with complexity option
- 'max-depth': IGNORE,
- // We use soft wrap
- 'max-len': IGNORE,
- // We are smart enough to know if this is bad or not
- 'max-nested-callbacks': IGNORE,
- // Sometimes we have no control over this for compat reasons, so just warn
- 'max-params': [WARN, MAX_PARAMS],
- // We should be able to use whatever feels right
- 'max-statements': IGNORE,
- // Constructors should be CamelCase
- 'new-cap': ERROR,
- // Always use parens when instantiating a class
- 'new-parens': ERROR,
- // Too difficult to enforce correctly as too many edge-cases
- 'newline-after-var': IGNORE,
- // Don't use the array constructor when it is not needed
- 'no-array-constructor': ERROR,
- // We never use bitwise, they are too clever
- 'no-bitwise': ERROR,
- // We use continue
- 'no-continue': IGNORE,
- // We like inline comments
- 'no-inline-comments': IGNORE,
- // The code could be optimised if this error occurs
- 'no-lonely-if': ERROR,
- // Don't mix spaces and tabs
- // @TODO maybe [ERROR, 'smart-tabs'] will be better, we will see
- 'no-mixed-spaces-and-tabs': ERROR,
- // We use multiple empty lines for styling
- 'no-multiple-empty-lines': IGNORE,
- // Sometimes it is more understandable with a negated condition
- 'no-negated-condition': IGNORE,
- // Sometimes these are useful
- 'no-nested-ternary': IGNORE,
- // Use {} instead of new Object()
- 'no-new-object': ERROR,
- // We use plus plus
- 'no-plusplus': IGNORE,
- // Handled by other rules
- 'no-restricted-syntax': IGNORE,
- // We never use this, it seems silly to allow this
- 'no-spaced-func': ERROR,
- // Sometimes ternaries are useful
- 'no-ternary': IGNORE,
- // Disallow trailing spaces
- 'no-trailing-spaces': ERROR,
- // Sometimes this is useful when avoiding shadowing
- 'no-underscore-dangle': IGNORE,
- // Sensible
- 'no-unneeded-ternary': ERROR,
- // Desirable, but too many edge cases it turns out where it is actually preferred
- 'object-curly-spacing': IGNORE, // [ERROR, 'always'],
- // We like multiple var statements
- 'one-var': IGNORE,
- // Force use of shorthands when available
- 'operator-assignment': [ERROR, 'always'],
- // Should be before, but not with =, *=, /=, += lines
- // @TODO figure out how to enforce
- 'operator-linebreak': IGNORE,
- // This rule doesn't appear to work correclty
- 'padded-blocks': IGNORE,
- // Seems like a good idea to error about this
- 'quote-props': [ERROR, 'consistent-as-needed'],
- // Use single quotes where escaping isn't needed
- 'quotes': [ERROR, 'single', 'avoid-escape'],
- // We use YUIdoc
- 'require-jsdoc': IGNORE,
- // If semi's are used, then add spacing after
- 'semi-spacing': [ERROR, { before: false, after: true }],
- // Never use semicolons
- 'semi': [ERROR, 'never'],
- // We don't care if our vars are alphabetical
- 'sort-vars': IGNORE,
- // Always force a space after a keyword
- 'space-after-keywords': [ERROR, 'always'],
- // Always force a space before a {
- 'space-before-blocks': [ERROR, 'always'],
- // function () {, get blah () {
- 'space-before-function-paren': [ERROR, 'always'],
- // We do this
- 'space-before-keywords': [ERROR, 'always'],
- // This is for spacing between [], so [ WARN, ERROR, 3 ] which we don't want
- 'space-in-brackets': IGNORE,
- // This is for spacing between (), so doSomething( WARN, ERROR, 3 ) or if ( WARN === 3 )
- // which we want for ifs, but don't want for calls
- 'space-in-parens': IGNORE,
- // We use this
- 'space-infix-ops': ERROR,
- // We use this
- 'space-return-throw-case': ERROR,
- // We use this
- 'space-unary-ops': ERROR,
- // We use this
- // 'spaced-line-comment': ERROR,
- 'spaced-comment': ERROR,
- // We use this
- // @TODO revise this
- 'wrap-regex': ERROR,
- // --------------------------------------
- // ECMAScript 6
- // Sensible to create more informed and clear code
- 'arrow-body-style': [ERROR, 'as-needed'],
- // We do this, no reason why, just what we do
- 'arrow-parens': [ERROR, 'always'],
- // Require consistent spacing for arrow functions
- 'arrow-spacing': ERROR,
- // Makes sense as otherwise runtime error will occur
- 'constructor-super': ERROR,
- // Seems the most consistent location for it
- 'generator-star-spacing': [ERROR, 'before'],
- // Seems sensible
- 'no-arrow-condition': ERROR,
- // Seems sensible
- 'no-class-assign': ERROR,
- // Makes sense as otherwise runtime error will occur
- 'no-const-assign': ERROR,
- // Makes sense as otherwise runtime error will occur
- 'no-dupe-class-members': ERROR,
- // Makes sense as otherwise runtime error will occur
- 'no-this-before-super': ERROR,
- // @TODO This probably should be an error
- // however it is useful for: for ( var key in obj ) {
- // which hopefully is more performant than let (@TODO check if it actually is more performant)
- 'no-var': WARN,
- // Enforce ES6 object shorthand
- 'object-shorthand': ERROR,
- // Better performance when running native
- // but horrible performance if not running native as could fallback to bind
- // https://travis-ci.org/bevry/es6-benchmarks
- 'prefer-arrow-callback': IGNORE,
- // Sure, why not
- 'prefer-const': WARN,
- // Controversial change, but makes sense to move towards to reduce the risk of bad people overwriting apply and call
- // https://github.com/eslint/eslint/issues/ERROR939
- 'prefer-reflect': WARN,
- // Sure, why not
- 'prefer-spread': ERROR,
- // Too annoying to enforce
- 'prefer-template': IGNORE,
- // Makes sense
- 'require-yield': ERROR
- }
- }
|