lancetw/react-isomorphic-bundle

View on GitHub
src/shared/components/PostComponent.js

Summary

Maintainability
F
1 wk
Test Coverage

File PostComponent.js has 633 lines of code (exceeds 250 allowed). Consider refactoring.
Open

import React, { Component, PropTypes } from 'react'
import ReactDOM from 'react-dom'
import ReactCSSTransitionGroup from 'react-addons-css-transition-group'
import {
  Form,
Severity: Major
Found in src/shared/components/PostComponent.js - About 1 day to fix

    Function render has 219 lines of code (exceeds 25 allowed). Consider refactoring.
    Open

      render () {
        const Translate = require('react-translate-component')
    
        const submitClass = classNames(
          'ui',
    Severity: Major
    Found in src/shared/components/PostComponent.js - About 1 day to fix

      Post has 23 functions (exceeds 20 allowed). Consider refactoring.
      Open

      export default class Post extends Component {
      
        static propTypes = {
          submit: PropTypes.func.isRequired,
          modify: PropTypes.func.isRequired,
      Severity: Minor
      Found in src/shared/components/PostComponent.js - About 2 hrs to fix

        Function constructor has 31 lines of code (exceeds 25 allowed). Consider refactoring.
        Open

          constructor (props) {
            super(props)
        
            this.releaseTimeout = undefined
            this.releaseTimeout1 = undefined
        Severity: Minor
        Found in src/shared/components/PostComponent.js - About 1 hr to fix

          Function initForm has 30 lines of code (exceeds 25 allowed). Consider refactoring.
          Open

            initForm (detail) {
              if (!isEmpty(detail)) {
                const startDate = this.dateToArray(toDate(detail.startDate))
                const endDate = this.dateToArray(toDate(detail.endDate))
                const openDate = this.dateToArray(toDate(detail.openDate))
          Severity: Minor
          Found in src/shared/components/PostComponent.js - About 1 hr to fix

            Function clearFormErrors has a Cognitive Complexity of 6 (exceeds 5 allowed). Consider refactoring.
            Open

              clearFormErrors () {
                const options = clone(this.state.options)
                options.fields = clone(options.fields)
            
                for (const key in options.fields) {
            Severity: Minor
            Found in src/shared/components/PostComponent.js - About 25 mins to fix

            Cognitive Complexity

            Cognitive Complexity is a measure of how difficult a unit of code is to intuitively understand. Unlike Cyclomatic Complexity, which determines how difficult your code will be to test, Cognitive Complexity tells you how difficult your code will be to read and comprehend.

            A method's cognitive complexity is based on a few simple rules:

            • Code is not considered more complex when it uses shorthand that the language provides for collapsing multiple statements into one
            • Code is considered more complex for each "break in the linear flow of the code"
            • Code is considered more complex when "flow breaking structures are nested"

            Further reading

            Function componentWillReceiveProps has a Cognitive Complexity of 6 (exceeds 5 allowed). Consider refactoring.
            Open

              componentWillReceiveProps (nextProps) {
                checkUnauthorized(nextProps.post.errors, this.context.history.replaceState)
            
                if (!this.state.formInited) {
                  const { id } = this.props.params
            Severity: Minor
            Found in src/shared/components/PostComponent.js - About 25 mins to fix

            Cognitive Complexity

            Cognitive Complexity is a measure of how difficult a unit of code is to intuitively understand. Unlike Cyclomatic Complexity, which determines how difficult your code will be to test, Cognitive Complexity tells you how difficult your code will be to read and comprehend.

            A method's cognitive complexity is based on a few simple rules:

            • Code is not considered more complex when it uses shorthand that the language provides for collapsing multiple statements into one
            • Code is considered more complex for each "break in the linear flow of the code"
            • Code is considered more complex when "flow breaking structures are nested"

            Further reading

            Expected 'this' to be used by class method 'dateToArray'.
            Open

              dateToArray (date) {

            Enforce that class methods utilize this (class-methods-use-this)

            If a class method does not use this, it can safely be made a static function.

            It's possible to have a class method which doesn't use this, such as:

            class A {
                constructor() {
                    this.a = "hi";
                }
            
                print() {
                    console.log(this.a);
                }
            
                sayHi() {
                    console.log("hi");
                }
            }
            
            let a = new A();
            a.sayHi(); // => "hi"

            In the example above, the sayHi method doesn't use this, so we can make it a static method:

            class A {
                constructor() {
                    this.a = "hi";
                }
            
                print() {
                    console.log(this.a);
                }
            
                static sayHi() {
                    console.log("hi");
                }
            }
            
            A.sayHi(); // => "hi"

            Also note in the above examples that the code calling the function on an instance of the class (let a = new A(); a.sayHi();) changes to calling it on the class itself (A.sayHi();).

            Rule Details

            This rule is aimed to flag class methods that do not use this.

            Examples of incorrect code for this rule:

            /*eslint class-methods-use-this: "error"*/
            /*eslint-env es6*/
            
            class A {
                foo() {
                    console.log("Hello World");     /*error Expected 'this' to be used by class method 'foo'.*/
                }
            }

            Examples of correct code for this rule:

            /*eslint class-methods-use-this: "error"*/
            /*eslint-env es6*/
            class A {
                foo() {
                    this.bar = "Hello World"; // OK, this is used
                }
            }
            
            class A {
                constructor() {
                    // OK. constructor is exempt
                }
            }
            
            class A {
                static foo() {
                    // OK. static methods aren't expected to use this.
                }
            }

            Options

            Exceptions

            "class-methods-use-this": [<enabled>, { "exceptMethods": [&lt;...exceptions&gt;] }]</enabled>

            The exceptMethods option allows you to pass an array of method names for which you would like to ignore warnings.

            Examples of incorrect code for this rule when used without exceptMethods:

            /*eslint class-methods-use-this: "error"*/
            
            class A {
                foo() {
                }
            }

            Examples of correct code for this rule when used with exceptMethods:

            /*eslint class-methods-use-this: ["error", { "exceptMethods": ["foo"] }] */
            
            class A {
                foo() {
                }
            }

            Source: http://eslint.org/docs/rules/

            Expected 'this' to be used by class method 'renderTips'.
            Open

              renderTips () {

            Enforce that class methods utilize this (class-methods-use-this)

            If a class method does not use this, it can safely be made a static function.

            It's possible to have a class method which doesn't use this, such as:

            class A {
                constructor() {
                    this.a = "hi";
                }
            
                print() {
                    console.log(this.a);
                }
            
                sayHi() {
                    console.log("hi");
                }
            }
            
            let a = new A();
            a.sayHi(); // => "hi"

            In the example above, the sayHi method doesn't use this, so we can make it a static method:

            class A {
                constructor() {
                    this.a = "hi";
                }
            
                print() {
                    console.log(this.a);
                }
            
                static sayHi() {
                    console.log("hi");
                }
            }
            
            A.sayHi(); // => "hi"

            Also note in the above examples that the code calling the function on an instance of the class (let a = new A(); a.sayHi();) changes to calling it on the class itself (A.sayHi();).

            Rule Details

            This rule is aimed to flag class methods that do not use this.

            Examples of incorrect code for this rule:

            /*eslint class-methods-use-this: "error"*/
            /*eslint-env es6*/
            
            class A {
                foo() {
                    console.log("Hello World");     /*error Expected 'this' to be used by class method 'foo'.*/
                }
            }

            Examples of correct code for this rule:

            /*eslint class-methods-use-this: "error"*/
            /*eslint-env es6*/
            class A {
                foo() {
                    this.bar = "Hello World"; // OK, this is used
                }
            }
            
            class A {
                constructor() {
                    // OK. constructor is exempt
                }
            }
            
            class A {
                static foo() {
                    // OK. static methods aren't expected to use this.
                }
            }

            Options

            Exceptions

            "class-methods-use-this": [<enabled>, { "exceptMethods": [&lt;...exceptions&gt;] }]</enabled>

            The exceptMethods option allows you to pass an array of method names for which you would like to ignore warnings.

            Examples of incorrect code for this rule when used without exceptMethods:

            /*eslint class-methods-use-this: "error"*/
            
            class A {
                foo() {
                }
            }

            Examples of correct code for this rule when used with exceptMethods:

            /*eslint class-methods-use-this: ["error", { "exceptMethods": ["foo"] }] */
            
            class A {
                foo() {
                }
            }

            Source: http://eslint.org/docs/rules/

            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.
            Open

                for (const key in options.fields) {

            disallow specified syntax (no-restricted-syntax)

            JavaScript has a lot of language features, and not everyone likes all of them. As a result, some projects choose to disallow the use of certain language features altogether. For instance, you might decide to disallow the use of try-catch or class, or you might decide to disallow the use of the in operator.

            Rather than creating separate rules for every language feature you want to turn off, this rule allows you to configure the syntax elements you want to restrict use of. These elements are represented by their ESTree node types. For example, a function declaration is represented by FunctionDeclaration and the with statement is represented by WithStatement. You may find the full list of AST node names you can use on GitHub and use the online parser to see what type of nodes your code consists of.

            You can also specify [AST selectors](../developer-guide/selectors) to restrict, allowing much more precise control over syntax patterns.

            Rule Details

            This rule disallows specified (that is, user-defined) syntax.

            Options

            This rule takes a list of strings, where each string is an AST selector:

            {
                "rules": {
                    "no-restricted-syntax": ["error", "FunctionExpression", "WithStatement", "BinaryExpression[operator='in']"]
                }
            }

            Alternatively, the rule also accepts objects, where the selector and an optional custom message are specified:

            {
                "rules": {
                    "no-restricted-syntax": [
                        "error",
                        {
                            "selector": "FunctionExpression",
                            "message": "Function expressions are not allowed."
                        },
                        {
                            "selector": "CallExpression[callee.name='setTimeout'][arguments.length!=2]",
                            "message": "setTimeout must always be invoked with two arguments."
                        }
                    ]
                }
            }

            If a custom message is specified with the message property, ESLint will use that message when reporting occurrences of the syntax specified in the selector property.

            The string and object formats can be freely mixed in the configuration as needed.

            Examples of incorrect code for this rule with the "FunctionExpression", "WithStatement", BinaryExpression[operator='in'] options:

            /* eslint no-restricted-syntax: ["error", "FunctionExpression", "WithStatement", "BinaryExpression[operator='in']"] */
            
            with (me) {
                dontMess();
            }
            
            var doSomething = function () {};
            
            foo in bar;

            Examples of correct code for this rule with the "FunctionExpression", "WithStatement", BinaryExpression[operator='in'] options:

            /* eslint no-restricted-syntax: ["error", "FunctionExpression", "WithStatement", "BinaryExpression[operator='in']"] */
            
            me.dontMess();
            
            function doSomething() {};
            
            foo instanceof bar;

            When Not To Use It

            If you don't want to restrict your code from using any JavaScript features or syntax, you should not use this rule.

            Related Rules

            • [no-alert](no-alert.md)
            • [no-console](no-console.md)
            • [no-debugger](no-debugger.md)
            • [no-restricted-properties](no-restricted-properties.md) Source: http://eslint.org/docs/rules/

            Unexpected function expression.
            Open

                    errors.map(function (err) {

            Suggest using arrow functions as callbacks. (prefer-arrow-callback)

            Arrow functions are suited to callbacks, because:

            • this keywords in arrow functions bind to the upper scope's.
            • The notation of the arrow function is shorter than function expression's.

            Rule Details

            This rule is aimed to flag usage of function expressions in an argument list.

            The following patterns are considered problems:

            /*eslint prefer-arrow-callback: "error"*/
            
            foo(function(a) { return a; });
            foo(function() { return this.a; }.bind(this));

            The following patterns are not considered problems:

            /*eslint prefer-arrow-callback: "error"*/
            /*eslint-env es6*/
            
            foo(a => a);
            foo(function*() { yield; });
            
            // this is not a callback.
            var foo = function foo(a) { return a; };
            
            // using `this` without `.bind(this)`.
            foo(function() { return this.a; });
            
            // recursively.
            foo(function bar(n) { return n && n + bar(n - 1); });

            Options

            This rule takes one optional argument, an object which is an options object.

            allowNamedFunctions

            This is a boolean option and it is false by default. When set to true, the rule doesn't warn on named functions used as callbacks.

            Examples of correct code for the { "allowNamedFunctions": true } option:

            /*eslint prefer-arrow-callback: ["error", { "allowNamedFunctions": true }]*/
            
            foo(function bar() {});

            allowUnboundThis

            This is a boolean option and it is true by default. When set to false, this option allows the use of this without restriction and checks for dynamically assigned this values such as when using Array.prototype.map with a context argument. Normally, the rule will flag the use of this whenever a function does not use bind() to specify the value of this constantly.

            Examples of incorrect code for the { "allowUnboundThis": false } option:

            /*eslint prefer-arrow-callback: ["error", { "allowUnboundThis": false }]*/
            /*eslint-env es6*/
            
            foo(function() { this.a; });
            
            foo(function() { (() => this); });
            
            someArray.map(function (itm) { return this.doSomething(itm); }, someObject);

            When Not To Use It

            This rule should not be used in ES3/5 environments.

            In ES2015 (ES6) or later, if you don't want to be notified about function expressions in an argument list, you can safely disable this rule. Source: http://eslint.org/docs/rules/

            Unexpected require().
            Open

                const Translate = require('react-translate-component')

            Enforce require() on the top-level module scope (global-require)

            In Node.js, module dependencies are included using the require() function, such as:

            var fs = require("fs");

            While require() may be called anywhere in code, some style guides prescribe that it should be called only in the top level of a module to make it easier to identify dependencies. For instance, it's arguably harder to identify dependencies when they are deeply nested inside of functions and other statements:

            function foo() {
            
                if (condition) {
                    var fs = require("fs");
                }
            }

            Since require() does a synchronous load, it can cause performance problems when used in other locations.

            Further, ES6 modules mandate that import and export statements can only occur in the top level of the module's body.

            Rule Details

            This rule requires all calls to require() to be at the top level of the module, similar to ES6 import and export statements, which also can occur only at the top level.

            Examples of incorrect code for this rule:

            /*eslint global-require: "error"*/
            /*eslint-env es6*/
            
            // calling require() inside of a function is not allowed
            function readFile(filename, callback) {
                var fs = require('fs');
                fs.readFile(filename, callback)
            }
            
            // conditional requires like this are also not allowed
            if (DEBUG) { require('debug'); }
            
            // a require() in a switch statement is also flagged
            switch(x) { case '1': require('1'); break; }
            
            // you may not require() inside an arrow function body
            var getModule = (name) => require(name);
            
            // you may not require() inside of a function body as well
            function getModule(name) { return require(name); }
            
            // you may not require() inside of a try/catch block
            try {
                require(unsafeModule);
            } catch(e) {
                console.log(e);
            }

            Examples of correct code for this rule:

            /*eslint global-require: "error"*/
            
            // all these variations of require() are ok
            require('x');
            var y = require('y');
            var z;
            z = require('z').initialize();
            
            // requiring a module and using it in a function is ok
            var fs = require('fs');
            function readFile(filename, callback) {
                fs.readFile(filename, callback)
            }
            
            // you can use a ternary to determine which module to require
            var logger = DEBUG ? require('dev-logger') : require('logger');
            
            // if you want you can require() at the end of your module
            function doSomethingA() {}
            function doSomethingB() {}
            var x = require("x"),
                z = require("z");

            When Not To Use It

            If you have a module that must be initialized with information that comes from the file-system or if a module is only used in very rare situations and will cause significant overhead to load it may make sense to disable the rule. If you need to require() an optional dependency inside of a try/catch, you can disable this rule for just that dependency using the // eslint-disable-line global-require comment. Source: http://eslint.org/docs/rules/

            Unnecessarily quoted property 'loading' found.
            Open

                  { 'loading': this.state.submited && !this.state.updated }

            require quotes around object literal property names (quote-props)

            Object literal property names can be defined in two ways: using literals or using strings. For example, these two objects are equivalent:

            var object1 = {
                property: true
            };
            
            var object2 = {
                "property": true
            };

            In many cases, it doesn't matter if you choose to use an identifier instead of a string or vice-versa. Even so, you might decide to enforce a consistent style in your code.

            There are, however, some occasions when you must use quotes:

            1. If you are using an ECMAScript 3 JavaScript engine (such as IE8) and you want to use a keyword (such as if) as a property name. This restriction was removed in ECMAScript 5.
            2. You want to use a non-identifier character in your property name, such as having a property with a space like "one two".

            Another example where quotes do matter is when using numeric literals as property keys:

            var object = {
                1e2: 1,
                100: 2
            };

            This may look alright at first sight, but this code in fact throws a syntax error in ECMAScript 5 strict mode. This happens because 1e2 and 100 are coerced into strings before getting used as the property name. Both String(1e2) and String(100) happen to be equal to "100", which causes the "Duplicate data property in object literal not allowed in strict mode" error. Issues like that can be tricky to debug, so some prefer to require quotes around all property names.

            Rule Details

            This rule requires quotes around object literal property names.

            Options

            This rule has two options, a string option and an object option.

            String option:

            • "always" (default) requires quotes around all object literal property names
            • "as-needed" disallows quotes around object literal property names that are not strictly required
            • "consistent" enforces a consistent quote style requires quotes around object literal property names
            • "consistent-as-needed" requires quotes around all object literal property names if any name strictly requires quotes, otherwise disallows quotes around object property names

            Object option:

            • "keywords": true requires quotes around language keywords used as object property names (only applies when using as-needed or consistent-as-needed)
            • "unnecessary": true (default) disallows quotes around object literal property names that are not strictly required (only applies when using as-needed)
            • "unnecessary": false allows quotes around object literal property names that are not strictly required (only applies when using as-needed)
            • "numbers": true requires quotes around numbers used as object property names (only applies when using as-needed)

            always

            Examples of incorrect code for this rule with the default "always" option:

            /*eslint quote-props: ["error", "always"]*/
            
            var object = {
                foo: "bar",
                baz: 42,
                "qux-lorem": true
            };

            Examples of correct code for this rule with the default "always" option:

            /*eslint quote-props: ["error", "always"]*/
            /*eslint-env es6*/
            
            var object1 = {
                "foo": "bar",
                "baz": 42,
                "qux-lorem": true
            };
            
            var object2 = {
                'foo': 'bar',
                'baz': 42,
                'qux-lorem': true
            };
            
            var object3 = {
                foo() {
                    return;
                }
            };

            as-needed

            Examples of incorrect code for this rule with the "as-needed" option:

            /*eslint quote-props: ["error", "as-needed"]*/
            
            var object = {
                "a": 0,
                "0": 0,
                "true": 0,
                "null": 0
            };

            Examples of correct code for this rule with the "as-needed" option:

            /*eslint quote-props: ["error", "as-needed"]*/
            /*eslint-env es6*/
            
            var object1 = {
                "a-b": 0,
                "0x0": 0,
                "1e2": 0
            };
            
            var object2 = {
                foo: 'bar',
                baz: 42,
                true: 0,
                0: 0,
                'qux-lorem': true
            };
            
            var object3 = {
                foo() {
                    return;
                }
            };

            consistent

            Examples of incorrect code for this rule with the "consistent" option:

            /*eslint quote-props: ["error", "consistent"]*/
            
            var object1 = {
                foo: "bar",
                "baz": 42,
                "qux-lorem": true
            };
            
            var object2 = {
                'foo': 'bar',
                baz: 42
            };

            Examples of correct code for this rule with the "consistent" option:

            /*eslint quote-props: ["error", "consistent"]*/
            
            var object1 = {
                "foo": "bar",
                "baz": 42,
                "qux-lorem": true
            };
            
            var object2 = {
                'foo': 'bar',
                'baz': 42
            };
            
            var object3 = {
                foo: 'bar',
                baz: 42
            };

            consistent-as-needed

            Examples of incorrect code for this rule with the "consistent-as-needed" option:

            /*eslint quote-props: ["error", "consistent-as-needed"]*/
            
            var object1 = {
                foo: "bar",
                "baz": 42,
                "qux-lorem": true
            };
            
            var object2 = {
                'foo': 'bar',
                'baz': 42
            };

            Examples of correct code for this rule with the "consistent-as-needed" option:

            /*eslint quote-props: ["error", "consistent-as-needed"]*/
            
            var object1 = {
                "foo": "bar",
                "baz": 42,
                "qux-lorem": true
            };
            
            var object2 = {
                foo: 'bar',
                baz: 42
            };

            keywords

            Examples of additional incorrect code for this rule with the "as-needed", { "keywords": true } options:

            /*eslint quote-props: ["error", "as-needed", { "keywords": true }]*/
            
            var x = {
                while: 1,
                volatile: "foo"
            };

            Examples of additional incorrect code for this rule with the "consistent-as-needed", { "keywords": true } options:

            /*eslint quote-props: ["error", "consistent-as-needed", { "keywords": true }]*/
            
            var x = {
                "prop": 1,
                "bar": "foo"
            };

            unnecessary

            Examples of additional correct code for this rule with the "as-needed", { "unnecessary": false } options:

            /*eslint quote-props: ["error", "as-needed", { "keywords": true, "unnecessary": false }]*/
            
            var x = {
                "while": 1,
                "foo": "bar"  // Would normally have caused a warning
            };

            numbers

            Examples of additional incorrect code for this rule with the "as-needed", { "numbers": true } options:

            /*eslint quote-props: ["error", "as-needed", { "numbers": true }]*/
            
            var x = {
                100: 1
            }

            When Not To Use It

            If you don't care if property names are consistently wrapped in quotes or not, and you don't target legacy ES3 environments, turn this rule off.

            Further Reading

            Unexpected string concatenation.
            Open

                      src = '/uploads/' + name

            Suggest using template literals instead of string concatenation. (prefer-template)

            In ES2015 (ES6), we can use template literals instead of string concatenation.

            var str = "Hello, " + name + "!";
            /*eslint-env es6*/
            
            var str = `Hello, ${name}!`;

            Rule Details

            This rule is aimed to flag usage of + operators with strings.

            Examples

            Examples of incorrect code for this rule:

            /*eslint prefer-template: "error"*/
            
            var str = "Hello, " + name + "!";
            var str = "Time: " + (12 * 60 * 60 * 1000);

            Examples of correct code for this rule:

            /*eslint prefer-template: "error"*/
            /*eslint-env es6*/
            
            var str = "Hello World!";
            var str = `Hello, ${name}!`;
            var str = `Time: ${12 * 60 * 60 * 1000}`;
            
            // This is reported by `no-useless-concat`.
            var str = "Hello, " + "World!";

            When Not To Use It

            This rule should not be used in ES3/5 environments.

            In ES2015 (ES6) or later, if you don't want to be notified about string concatenation, you can safely disable this rule.

            Related Rules

            Expected property shorthand.
            Open

                      startDate: startDate,

            Require Object Literal Shorthand Syntax (object-shorthand)

            EcmaScript 6 provides a concise form for defining object literal methods and properties. This syntax can make defining complex object literals much cleaner.

            Here are a few common examples using the ES5 syntax:

            // properties
            var foo = {
                x: x,
                y: y,
                z: z,
            };
            
            // methods
            var foo = {
                a: function() {},
                b: function() {}
            };

            Now here are ES6 equivalents:

            /*eslint-env es6*/
            
            // properties
            var foo = {x, y, z};
            
            // methods
            var foo = {
                a() {},
                b() {}
            };

            Rule Details

            This rule enforces the use of the shorthand syntax. This applies to all methods (including generators) defined in object literals and any properties defined where the key name matches name of the assigned variable.

            Each of the following properties would warn:

            /*eslint object-shorthand: "error"*/
            /*eslint-env es6*/
            
            var foo = {
                w: function() {},
                x: function *() {},
                [y]: function() {},
                z: z
            };

            In that case the expected syntax would have been:

            /*eslint object-shorthand: "error"*/
            /*eslint-env es6*/
            
            var foo = {
                w() {},
                *x() {},
                [y]() {},
                z
            };

            This rule does not flag arrow functions inside of object literals. The following will not warn:

            /*eslint object-shorthand: "error"*/
            /*eslint-env es6*/
            
            var foo = {
                x: (y) => y
            };

            Options

            The rule takes an option which specifies when it should be applied. It can be set to one of the following values:

            • "always" (default) expects that the shorthand will be used whenever possible.
            • "methods" ensures the method shorthand is used (also applies to generators).
            • "properties" ensures the property shorthand is used (where the key and variable name match).
            • "never" ensures that no property or method shorthand is used in any object literal.
            • "consistent" ensures that either all shorthand or all longform will be used in an object literal.
            • "consistent-as-needed" ensures that either all shorthand or all longform will be used in an object literal, but ensures all shorthand whenever possible.

            You can set the option in configuration like this:

            {
                "object-shorthand": ["error", "always"]
            }

            Additionally, the rule takes an optional object configuration:

            • "avoidQuotes": true indicates that longform syntax is preferred whenever the object key is a string literal (default: false). Note that this option can only be enabled when the string option is set to "always", "methods", or "properties".
            • "ignoreConstructors": true can be used to prevent the rule from reporting errors for constructor functions. (By default, the rule treats constructors the same way as other functions.) Note that this option can only be enabled when the string option is set to "always" or "methods".
            • "avoidExplicitReturnArrows": true indicates that methods are preferred over explicit-return arrow functions for function properties. (By default, the rule allows either of these.) Note that this option can only be enabled when the string option is set to "always" or "methods".

            avoidQuotes

            {
                "object-shorthand": ["error", "always", { "avoidQuotes": true }]
            }

            Example of incorrect code for this rule with the "always", { "avoidQuotes": true } option:

            /*eslint object-shorthand: ["error", "always", { "avoidQuotes": true }]*/
            /*eslint-env es6*/
            
            var foo = {
                "bar-baz"() {}
            };

            Example of correct code for this rule with the "always", { "avoidQuotes": true } option:

            /*eslint object-shorthand: ["error", "always", { "avoidQuotes": true }]*/
            /*eslint-env es6*/
            
            var foo = {
                "bar-baz": function() {},
                "qux": qux
            };

            ignoreConstructors

            {
                "object-shorthand": ["error", "always", { "ignoreConstructors": true }]
            }

            Example of correct code for this rule with the "always", { "ignoreConstructors": true } option:

            /*eslint object-shorthand: ["error", "always", { "ignoreConstructors": true }]*/
            /*eslint-env es6*/
            
            var foo = {
                ConstructorFunction: function() {}
            };

            avoidExplicitReturnArrows

            {
                "object-shorthand": ["error", "always", { "avoidExplicitReturnArrows": true }]
            }

            Example of incorrect code for this rule with the "always", { "avoidExplicitReturnArrows": true } option:

            /*eslint object-shorthand: ["error", "always", { "avoidExplicitReturnArrows": true }]*/
            /*eslint-env es6*/
            
            var foo = {
              foo: (bar, baz) => {
                return bar + baz;
              },
            
              qux: (foobar) => {
                return foobar * 2;
              }
            };

            Example of correct code for this rule with the "always", { "avoidExplicitReturnArrows": true } option:

            /*eslint object-shorthand: ["error", "always", { "avoidExplicitReturnArrows": true }]*/
            /*eslint-env es6*/
            
            var foo = {
              foo(bar, baz) {
                return bar + baz;
              },
            
              qux: foobar => foobar * 2
            };

            Example of incorrect code for this rule with the "consistent" option:

            /*eslint object-shorthand: [2, "consistent"]*/
            /*eslint-env es6*/
            
            var foo = {
                a,
                b: "foo",
            };

            Examples of correct code for this rule with the "consistent" option:

            /*eslint object-shorthand: [2, "consistent"]*/
            /*eslint-env es6*/
            
            var foo = {
                a: a,
                b: "foo"
            };
            
            var bar = {
                a,
                b,
            };

            Example of incorrect code with the "consistent-as-needed" option, which is very similar to "consistent":

            /*eslint object-shorthand: [2, "consistent-as-needed"]*/
            /*eslint-env es6*/
            
            var foo = {
                a: a,
                b: b,
            };

            When Not To Use It

            Anyone not yet in an ES6 environment would not want to apply this rule. Others may find the terseness of the shorthand syntax harder to read and may not want to encourage it with this rule.

            Further Reading

            Object initializer - MDN Source: http://eslint.org/docs/rules/

            Unexpected string concatenation.
            Open

                history.pushState({ the: 'state' }, pathname + '?tab=' + index)

            Suggest using template literals instead of string concatenation. (prefer-template)

            In ES2015 (ES6), we can use template literals instead of string concatenation.

            var str = "Hello, " + name + "!";
            /*eslint-env es6*/
            
            var str = `Hello, ${name}!`;

            Rule Details

            This rule is aimed to flag usage of + operators with strings.

            Examples

            Examples of incorrect code for this rule:

            /*eslint prefer-template: "error"*/
            
            var str = "Hello, " + name + "!";
            var str = "Time: " + (12 * 60 * 60 * 1000);

            Examples of correct code for this rule:

            /*eslint prefer-template: "error"*/
            /*eslint-env es6*/
            
            var str = "Hello World!";
            var str = `Hello, ${name}!`;
            var str = `Time: ${12 * 60 * 60 * 1000}`;
            
            // This is reported by `no-useless-concat`.
            var str = "Hello, " + "World!";

            When Not To Use It

            This rule should not be used in ES3/5 environments.

            In ES2015 (ES6) or later, if you don't want to be notified about string concatenation, you can safely disable this rule.

            Related Rules

            There should be no spaces inside this paren.
            Open

                    </div> )

            Disallow or enforce spaces inside of parentheses (space-in-parens)

            Some style guides require or disallow spaces inside of parentheses:

            foo( 'bar' );
            var x = ( 1 + 2 ) * 3;
            
            foo('bar');
            var x = (1 + 2) * 3;

            Rule Details

            This rule will enforce consistency of spacing directly inside of parentheses, by disallowing or requiring one or more spaces to the right of ( and to the left of ). In either case, () will still be allowed.

            Options

            There are two options for this rule:

            • "never" (default) enforces zero spaces inside of parentheses
            • "always" enforces a space inside of parentheses

            Depending on your coding conventions, you can choose either option by specifying it in your configuration:

            "space-in-parens": ["error", "always"]

            "never"

            Examples of incorrect code for this rule with the default "never" option:

            /*eslint space-in-parens: ["error", "never"]*/
            
            foo( 'bar');
            foo('bar' );
            foo( 'bar' );
            
            var foo = ( 1 + 2 ) * 3;
            ( function () { return 'bar'; }() );

            Examples of correct code for this rule with the default "never" option:

            /*eslint space-in-parens: ["error", "never"]*/
            
            foo();
            
            foo('bar');
            
            var foo = (1 + 2) * 3;
            (function () { return 'bar'; }());

            "always"

            Examples of incorrect code for this rule with the "always" option:

            /*eslint space-in-parens: ["error", "always"]*/
            
            foo( 'bar');
            foo('bar' );
            foo('bar');
            
            var foo = (1 + 2) * 3;
            (function () { return 'bar'; }());

            Examples of correct code for this rule with the "always" option:

            /*eslint space-in-parens: ["error", "always"]*/
            
            foo();
            
            foo( 'bar' );
            
            var foo = ( 1 + 2 ) * 3;
            ( function () { return 'bar'; }() );

            Exceptions

            An object literal may be used as a third array item to specify exceptions, with the key "exceptions" and an array as the value. These exceptions work in the context of the first option. That is, if "always" is set to enforce spacing, then any "exception" will disallow spacing. Conversely, if "never" is set to disallow spacing, then any "exception" will enforce spacing.

            The following exceptions are available: ["{}", "[]", "()", "empty"].

            Examples of incorrect code for this rule with the "never", { "exceptions": ["{}"] } option:

            /*eslint space-in-parens: ["error", "never", { "exceptions": ["{}"] }]*/
            
            foo({bar: 'baz'});
            foo(1, {bar: 'baz'});

            Examples of correct code for this rule with the "never", { "exceptions": ["{}"] } option:

            /*eslint space-in-parens: ["error", "never", { "exceptions": ["{}"] }]*/
            
            foo( {bar: 'baz'} );
            foo(1, {bar: 'baz'} );

            Examples of incorrect code for this rule with the "always", { "exceptions": ["{}"] } option:

            /*eslint space-in-parens: ["error", "always", { "exceptions": ["{}"] }]*/
            
            foo( {bar: 'baz'} );
            foo( 1, {bar: 'baz'} );

            Examples of correct code for this rule with the "always", { "exceptions": ["{}"] } option:

            /*eslint space-in-parens: ["error", "always", { "exceptions": ["{}"] }]*/
            
            foo({bar: 'baz'});
            foo( 1, {bar: 'baz'});

            Examples of incorrect code for this rule with the "never", { "exceptions": ["[]"] } option:

            /*eslint space-in-parens: ["error", "never", { "exceptions": ["[]"] }]*/
            
            foo([bar, baz]);
            foo([bar, baz], 1);

            Examples of correct code for this rule with the "never", { "exceptions": ["[]"] } option:

            /*eslint space-in-parens: ["error", "never", { "exceptions": ["[]"] }]*/
            
            foo( [bar, baz] );
            foo( [bar, baz], 1);

            Examples of incorrect code for this rule with the "always", { "exceptions": ["[]"] } option:

            /*eslint space-in-parens: ["error", "always", { "exceptions": ["[]"] }]*/
            
            foo( [bar, baz] );
            foo( [bar, baz], 1 );

            Examples of correct code for this rule with the "always", { "exceptions": ["[]"] } option:

            /*eslint space-in-parens: ["error", "always", { "exceptions": ["[]"] }]*/
            
            foo([bar, baz]);
            foo([bar, baz], 1 );

            Examples of incorrect code for this rule with the "never", { "exceptions": ["()"] }] option:

            /*eslint space-in-parens: ["error", "never", { "exceptions": ["()"] }]*/
            
            foo((1 + 2));
            foo((1 + 2), 1);

            Examples of correct code for this rule with the "never", { "exceptions": ["()"] }] option:

            /*eslint space-in-parens: ["error", "never", { "exceptions": ["()"] }]*/
            
            foo( (1 + 2) );
            foo( (1 + 2), 1);

            Examples of incorrect code for this rule with the "always", { "exceptions": ["()"] }] option:

            /*eslint space-in-parens: ["error", "always", { "exceptions": ["()"] }]*/
            
            foo( ( 1 + 2 ) );
            foo( ( 1 + 2 ), 1 );

            Examples of correct code for this rule with the "always", { "exceptions": ["()"] }] option:

            /*eslint space-in-parens: ["error", "always", { "exceptions": ["()"] }]*/
            
            foo(( 1 + 2 ));
            foo(( 1 + 2 ), 1 );

            The "empty" exception concerns empty parentheses, and works the same way as the other exceptions, inverting the first option.

            Example of incorrect code for this rule with the "never", { "exceptions": ["empty"] }] option:

            /*eslint space-in-parens: ["error", "never", { "exceptions": ["empty"] }]*/
            
            foo();

            Example of correct code for this rule with the "never", { "exceptions": ["empty"] }] option:

            /*eslint space-in-parens: ["error", "never", { "exceptions": ["empty"] }]*/
            
            foo( );

            Example of incorrect code for this rule with the "always", { "exceptions": ["empty"] }] option:

            /*eslint space-in-parens: ["error", "always", { "exceptions": ["empty"] }]*/
            
            foo( );

            Example of correct code for this rule with the "always", { "exceptions": ["empty"] }] option:

            /*eslint space-in-parens: ["error", "always", { "exceptions": ["empty"] }]*/
            
            foo();

            You can include multiple entries in the "exceptions" array.

            Examples of incorrect code for this rule with the "always", { "exceptions": ["{}", "[]"] }] option:

            /*eslint space-in-parens: ["error", "always", { "exceptions": ["{}", "[]"] }]*/
            
            bar( {bar:'baz'} );
            baz( 1, [1,2] );
            foo( {bar: 'baz'}, [1, 2] );

            Examples of correct code for this rule with the "always", { "exceptions": ["{}", "[]"] }] option:

            /*eslint space-in-parens: ["error", "always", { "exceptions": ["{}", "[]"] }]*/
            
            bar({bar:'baz'});
            baz( 1, [1,2]);
            foo({bar: 'baz'}, [1, 2]);

            When Not To Use It

            You can turn this rule off if you are not concerned with the consistency of spacing between parentheses.

            Related Rules

            Expected property shorthand.
            Open

                      endDate: endDate,

            Require Object Literal Shorthand Syntax (object-shorthand)

            EcmaScript 6 provides a concise form for defining object literal methods and properties. This syntax can make defining complex object literals much cleaner.

            Here are a few common examples using the ES5 syntax:

            // properties
            var foo = {
                x: x,
                y: y,
                z: z,
            };
            
            // methods
            var foo = {
                a: function() {},
                b: function() {}
            };

            Now here are ES6 equivalents:

            /*eslint-env es6*/
            
            // properties
            var foo = {x, y, z};
            
            // methods
            var foo = {
                a() {},
                b() {}
            };

            Rule Details

            This rule enforces the use of the shorthand syntax. This applies to all methods (including generators) defined in object literals and any properties defined where the key name matches name of the assigned variable.

            Each of the following properties would warn:

            /*eslint object-shorthand: "error"*/
            /*eslint-env es6*/
            
            var foo = {
                w: function() {},
                x: function *() {},
                [y]: function() {},
                z: z
            };

            In that case the expected syntax would have been:

            /*eslint object-shorthand: "error"*/
            /*eslint-env es6*/
            
            var foo = {
                w() {},
                *x() {},
                [y]() {},
                z
            };

            This rule does not flag arrow functions inside of object literals. The following will not warn:

            /*eslint object-shorthand: "error"*/
            /*eslint-env es6*/
            
            var foo = {
                x: (y) => y
            };

            Options

            The rule takes an option which specifies when it should be applied. It can be set to one of the following values:

            • "always" (default) expects that the shorthand will be used whenever possible.
            • "methods" ensures the method shorthand is used (also applies to generators).
            • "properties" ensures the property shorthand is used (where the key and variable name match).
            • "never" ensures that no property or method shorthand is used in any object literal.
            • "consistent" ensures that either all shorthand or all longform will be used in an object literal.
            • "consistent-as-needed" ensures that either all shorthand or all longform will be used in an object literal, but ensures all shorthand whenever possible.

            You can set the option in configuration like this:

            {
                "object-shorthand": ["error", "always"]
            }

            Additionally, the rule takes an optional object configuration:

            • "avoidQuotes": true indicates that longform syntax is preferred whenever the object key is a string literal (default: false). Note that this option can only be enabled when the string option is set to "always", "methods", or "properties".
            • "ignoreConstructors": true can be used to prevent the rule from reporting errors for constructor functions. (By default, the rule treats constructors the same way as other functions.) Note that this option can only be enabled when the string option is set to "always" or "methods".
            • "avoidExplicitReturnArrows": true indicates that methods are preferred over explicit-return arrow functions for function properties. (By default, the rule allows either of these.) Note that this option can only be enabled when the string option is set to "always" or "methods".

            avoidQuotes

            {
                "object-shorthand": ["error", "always", { "avoidQuotes": true }]
            }

            Example of incorrect code for this rule with the "always", { "avoidQuotes": true } option:

            /*eslint object-shorthand: ["error", "always", { "avoidQuotes": true }]*/
            /*eslint-env es6*/
            
            var foo = {
                "bar-baz"() {}
            };

            Example of correct code for this rule with the "always", { "avoidQuotes": true } option:

            /*eslint object-shorthand: ["error", "always", { "avoidQuotes": true }]*/
            /*eslint-env es6*/
            
            var foo = {
                "bar-baz": function() {},
                "qux": qux
            };

            ignoreConstructors

            {
                "object-shorthand": ["error", "always", { "ignoreConstructors": true }]
            }

            Example of correct code for this rule with the "always", { "ignoreConstructors": true } option:

            /*eslint object-shorthand: ["error", "always", { "ignoreConstructors": true }]*/
            /*eslint-env es6*/
            
            var foo = {
                ConstructorFunction: function() {}
            };

            avoidExplicitReturnArrows

            {
                "object-shorthand": ["error", "always", { "avoidExplicitReturnArrows": true }]
            }

            Example of incorrect code for this rule with the "always", { "avoidExplicitReturnArrows": true } option:

            /*eslint object-shorthand: ["error", "always", { "avoidExplicitReturnArrows": true }]*/
            /*eslint-env es6*/
            
            var foo = {
              foo: (bar, baz) => {
                return bar + baz;
              },
            
              qux: (foobar) => {
                return foobar * 2;
              }
            };

            Example of correct code for this rule with the "always", { "avoidExplicitReturnArrows": true } option:

            /*eslint object-shorthand: ["error", "always", { "avoidExplicitReturnArrows": true }]*/
            /*eslint-env es6*/
            
            var foo = {
              foo(bar, baz) {
                return bar + baz;
              },
            
              qux: foobar => foobar * 2
            };

            Example of incorrect code for this rule with the "consistent" option:

            /*eslint object-shorthand: [2, "consistent"]*/
            /*eslint-env es6*/
            
            var foo = {
                a,
                b: "foo",
            };

            Examples of correct code for this rule with the "consistent" option:

            /*eslint object-shorthand: [2, "consistent"]*/
            /*eslint-env es6*/
            
            var foo = {
                a: a,
                b: "foo"
            };
            
            var bar = {
                a,
                b,
            };

            Example of incorrect code with the "consistent-as-needed" option, which is very similar to "consistent":

            /*eslint object-shorthand: [2, "consistent-as-needed"]*/
            /*eslint-env es6*/
            
            var foo = {
                a: a,
                b: b,
            };

            When Not To Use It

            Anyone not yet in an ES6 environment would not want to apply this rule. Others may find the terseness of the shorthand syntax harder to read and may not want to encourage it with this rule.

            Further Reading

            Object initializer - MDN Source: http://eslint.org/docs/rules/

            Unnecessarily quoted property 'disabled' found.
            Open

                  { 'disabled': this.props.disableSubmit }

            require quotes around object literal property names (quote-props)

            Object literal property names can be defined in two ways: using literals or using strings. For example, these two objects are equivalent:

            var object1 = {
                property: true
            };
            
            var object2 = {
                "property": true
            };

            In many cases, it doesn't matter if you choose to use an identifier instead of a string or vice-versa. Even so, you might decide to enforce a consistent style in your code.

            There are, however, some occasions when you must use quotes:

            1. If you are using an ECMAScript 3 JavaScript engine (such as IE8) and you want to use a keyword (such as if) as a property name. This restriction was removed in ECMAScript 5.
            2. You want to use a non-identifier character in your property name, such as having a property with a space like "one two".

            Another example where quotes do matter is when using numeric literals as property keys:

            var object = {
                1e2: 1,
                100: 2
            };

            This may look alright at first sight, but this code in fact throws a syntax error in ECMAScript 5 strict mode. This happens because 1e2 and 100 are coerced into strings before getting used as the property name. Both String(1e2) and String(100) happen to be equal to "100", which causes the "Duplicate data property in object literal not allowed in strict mode" error. Issues like that can be tricky to debug, so some prefer to require quotes around all property names.

            Rule Details

            This rule requires quotes around object literal property names.

            Options

            This rule has two options, a string option and an object option.

            String option:

            • "always" (default) requires quotes around all object literal property names
            • "as-needed" disallows quotes around object literal property names that are not strictly required
            • "consistent" enforces a consistent quote style requires quotes around object literal property names
            • "consistent-as-needed" requires quotes around all object literal property names if any name strictly requires quotes, otherwise disallows quotes around object property names

            Object option:

            • "keywords": true requires quotes around language keywords used as object property names (only applies when using as-needed or consistent-as-needed)
            • "unnecessary": true (default) disallows quotes around object literal property names that are not strictly required (only applies when using as-needed)
            • "unnecessary": false allows quotes around object literal property names that are not strictly required (only applies when using as-needed)
            • "numbers": true requires quotes around numbers used as object property names (only applies when using as-needed)

            always

            Examples of incorrect code for this rule with the default "always" option:

            /*eslint quote-props: ["error", "always"]*/
            
            var object = {
                foo: "bar",
                baz: 42,
                "qux-lorem": true
            };

            Examples of correct code for this rule with the default "always" option:

            /*eslint quote-props: ["error", "always"]*/
            /*eslint-env es6*/
            
            var object1 = {
                "foo": "bar",
                "baz": 42,
                "qux-lorem": true
            };
            
            var object2 = {
                'foo': 'bar',
                'baz': 42,
                'qux-lorem': true
            };
            
            var object3 = {
                foo() {
                    return;
                }
            };

            as-needed

            Examples of incorrect code for this rule with the "as-needed" option:

            /*eslint quote-props: ["error", "as-needed"]*/
            
            var object = {
                "a": 0,
                "0": 0,
                "true": 0,
                "null": 0
            };

            Examples of correct code for this rule with the "as-needed" option:

            /*eslint quote-props: ["error", "as-needed"]*/
            /*eslint-env es6*/
            
            var object1 = {
                "a-b": 0,
                "0x0": 0,
                "1e2": 0
            };
            
            var object2 = {
                foo: 'bar',
                baz: 42,
                true: 0,
                0: 0,
                'qux-lorem': true
            };
            
            var object3 = {
                foo() {
                    return;
                }
            };

            consistent

            Examples of incorrect code for this rule with the "consistent" option:

            /*eslint quote-props: ["error", "consistent"]*/
            
            var object1 = {
                foo: "bar",
                "baz": 42,
                "qux-lorem": true
            };
            
            var object2 = {
                'foo': 'bar',
                baz: 42
            };

            Examples of correct code for this rule with the "consistent" option:

            /*eslint quote-props: ["error", "consistent"]*/
            
            var object1 = {
                "foo": "bar",
                "baz": 42,
                "qux-lorem": true
            };
            
            var object2 = {
                'foo': 'bar',
                'baz': 42
            };
            
            var object3 = {
                foo: 'bar',
                baz: 42
            };

            consistent-as-needed

            Examples of incorrect code for this rule with the "consistent-as-needed" option:

            /*eslint quote-props: ["error", "consistent-as-needed"]*/
            
            var object1 = {
                foo: "bar",
                "baz": 42,
                "qux-lorem": true
            };
            
            var object2 = {
                'foo': 'bar',
                'baz': 42
            };

            Examples of correct code for this rule with the "consistent-as-needed" option:

            /*eslint quote-props: ["error", "consistent-as-needed"]*/
            
            var object1 = {
                "foo": "bar",
                "baz": 42,
                "qux-lorem": true
            };
            
            var object2 = {
                foo: 'bar',
                baz: 42
            };

            keywords

            Examples of additional incorrect code for this rule with the "as-needed", { "keywords": true } options:

            /*eslint quote-props: ["error", "as-needed", { "keywords": true }]*/
            
            var x = {
                while: 1,
                volatile: "foo"
            };

            Examples of additional incorrect code for this rule with the "consistent-as-needed", { "keywords": true } options:

            /*eslint quote-props: ["error", "consistent-as-needed", { "keywords": true }]*/
            
            var x = {
                "prop": 1,
                "bar": "foo"
            };

            unnecessary

            Examples of additional correct code for this rule with the "as-needed", { "unnecessary": false } options:

            /*eslint quote-props: ["error", "as-needed", { "keywords": true, "unnecessary": false }]*/
            
            var x = {
                "while": 1,
                "foo": "bar"  // Would normally have caused a warning
            };

            numbers

            Examples of additional incorrect code for this rule with the "as-needed", { "numbers": true } options:

            /*eslint quote-props: ["error", "as-needed", { "numbers": true }]*/
            
            var x = {
                100: 1
            }

            When Not To Use It

            If you don't care if property names are consistently wrapped in quotes or not, and you don't target legacy ES3 environments, turn this rule off.

            Further Reading

            Unnecessarily quoted property 'error' found.
            Open

                  { 'error': !!this.state.placeError }

            require quotes around object literal property names (quote-props)

            Object literal property names can be defined in two ways: using literals or using strings. For example, these two objects are equivalent:

            var object1 = {
                property: true
            };
            
            var object2 = {
                "property": true
            };

            In many cases, it doesn't matter if you choose to use an identifier instead of a string or vice-versa. Even so, you might decide to enforce a consistent style in your code.

            There are, however, some occasions when you must use quotes:

            1. If you are using an ECMAScript 3 JavaScript engine (such as IE8) and you want to use a keyword (such as if) as a property name. This restriction was removed in ECMAScript 5.
            2. You want to use a non-identifier character in your property name, such as having a property with a space like "one two".

            Another example where quotes do matter is when using numeric literals as property keys:

            var object = {
                1e2: 1,
                100: 2
            };

            This may look alright at first sight, but this code in fact throws a syntax error in ECMAScript 5 strict mode. This happens because 1e2 and 100 are coerced into strings before getting used as the property name. Both String(1e2) and String(100) happen to be equal to "100", which causes the "Duplicate data property in object literal not allowed in strict mode" error. Issues like that can be tricky to debug, so some prefer to require quotes around all property names.

            Rule Details

            This rule requires quotes around object literal property names.

            Options

            This rule has two options, a string option and an object option.

            String option:

            • "always" (default) requires quotes around all object literal property names
            • "as-needed" disallows quotes around object literal property names that are not strictly required
            • "consistent" enforces a consistent quote style requires quotes around object literal property names
            • "consistent-as-needed" requires quotes around all object literal property names if any name strictly requires quotes, otherwise disallows quotes around object property names

            Object option:

            • "keywords": true requires quotes around language keywords used as object property names (only applies when using as-needed or consistent-as-needed)
            • "unnecessary": true (default) disallows quotes around object literal property names that are not strictly required (only applies when using as-needed)
            • "unnecessary": false allows quotes around object literal property names that are not strictly required (only applies when using as-needed)
            • "numbers": true requires quotes around numbers used as object property names (only applies when using as-needed)

            always

            Examples of incorrect code for this rule with the default "always" option:

            /*eslint quote-props: ["error", "always"]*/
            
            var object = {
                foo: "bar",
                baz: 42,
                "qux-lorem": true
            };

            Examples of correct code for this rule with the default "always" option:

            /*eslint quote-props: ["error", "always"]*/
            /*eslint-env es6*/
            
            var object1 = {
                "foo": "bar",
                "baz": 42,
                "qux-lorem": true
            };
            
            var object2 = {
                'foo': 'bar',
                'baz': 42,
                'qux-lorem': true
            };
            
            var object3 = {
                foo() {
                    return;
                }
            };

            as-needed

            Examples of incorrect code for this rule with the "as-needed" option:

            /*eslint quote-props: ["error", "as-needed"]*/
            
            var object = {
                "a": 0,
                "0": 0,
                "true": 0,
                "null": 0
            };

            Examples of correct code for this rule with the "as-needed" option:

            /*eslint quote-props: ["error", "as-needed"]*/
            /*eslint-env es6*/
            
            var object1 = {
                "a-b": 0,
                "0x0": 0,
                "1e2": 0
            };
            
            var object2 = {
                foo: 'bar',
                baz: 42,
                true: 0,
                0: 0,
                'qux-lorem': true
            };
            
            var object3 = {
                foo() {
                    return;
                }
            };

            consistent

            Examples of incorrect code for this rule with the "consistent" option:

            /*eslint quote-props: ["error", "consistent"]*/
            
            var object1 = {
                foo: "bar",
                "baz": 42,
                "qux-lorem": true
            };
            
            var object2 = {
                'foo': 'bar',
                baz: 42
            };

            Examples of correct code for this rule with the "consistent" option:

            /*eslint quote-props: ["error", "consistent"]*/
            
            var object1 = {
                "foo": "bar",
                "baz": 42,
                "qux-lorem": true
            };
            
            var object2 = {
                'foo': 'bar',
                'baz': 42
            };
            
            var object3 = {
                foo: 'bar',
                baz: 42
            };

            consistent-as-needed

            Examples of incorrect code for this rule with the "consistent-as-needed" option:

            /*eslint quote-props: ["error", "consistent-as-needed"]*/
            
            var object1 = {
                foo: "bar",
                "baz": 42,
                "qux-lorem": true
            };
            
            var object2 = {
                'foo': 'bar',
                'baz': 42
            };

            Examples of correct code for this rule with the "consistent-as-needed" option:

            /*eslint quote-props: ["error", "consistent-as-needed"]*/
            
            var object1 = {
                "foo": "bar",
                "baz": 42,
                "qux-lorem": true
            };
            
            var object2 = {
                foo: 'bar',
                baz: 42
            };

            keywords

            Examples of additional incorrect code for this rule with the "as-needed", { "keywords": true } options:

            /*eslint quote-props: ["error", "as-needed", { "keywords": true }]*/
            
            var x = {
                while: 1,
                volatile: "foo"
            };

            Examples of additional incorrect code for this rule with the "consistent-as-needed", { "keywords": true } options:

            /*eslint quote-props: ["error", "consistent-as-needed", { "keywords": true }]*/
            
            var x = {
                "prop": 1,
                "bar": "foo"
            };

            unnecessary

            Examples of additional correct code for this rule with the "as-needed", { "unnecessary": false } options:

            /*eslint quote-props: ["error", "as-needed", { "keywords": true, "unnecessary": false }]*/
            
            var x = {
                "while": 1,
                "foo": "bar"  // Would normally have caused a warning
            };

            numbers

            Examples of additional incorrect code for this rule with the "as-needed", { "numbers": true } options:

            /*eslint quote-props: ["error", "as-needed", { "numbers": true }]*/
            
            var x = {
                100: 1
            }

            When Not To Use It

            If you don't care if property names are consistently wrapped in quotes or not, and you don't target legacy ES3 environments, turn this rule off.

            Further Reading

            There should be no spaces inside this paren.
            Open

                  </div> )

            Disallow or enforce spaces inside of parentheses (space-in-parens)

            Some style guides require or disallow spaces inside of parentheses:

            foo( 'bar' );
            var x = ( 1 + 2 ) * 3;
            
            foo('bar');
            var x = (1 + 2) * 3;

            Rule Details

            This rule will enforce consistency of spacing directly inside of parentheses, by disallowing or requiring one or more spaces to the right of ( and to the left of ). In either case, () will still be allowed.

            Options

            There are two options for this rule:

            • "never" (default) enforces zero spaces inside of parentheses
            • "always" enforces a space inside of parentheses

            Depending on your coding conventions, you can choose either option by specifying it in your configuration:

            "space-in-parens": ["error", "always"]

            "never"

            Examples of incorrect code for this rule with the default "never" option:

            /*eslint space-in-parens: ["error", "never"]*/
            
            foo( 'bar');
            foo('bar' );
            foo( 'bar' );
            
            var foo = ( 1 + 2 ) * 3;
            ( function () { return 'bar'; }() );

            Examples of correct code for this rule with the default "never" option:

            /*eslint space-in-parens: ["error", "never"]*/
            
            foo();
            
            foo('bar');
            
            var foo = (1 + 2) * 3;
            (function () { return 'bar'; }());

            "always"

            Examples of incorrect code for this rule with the "always" option:

            /*eslint space-in-parens: ["error", "always"]*/
            
            foo( 'bar');
            foo('bar' );
            foo('bar');
            
            var foo = (1 + 2) * 3;
            (function () { return 'bar'; }());

            Examples of correct code for this rule with the "always" option:

            /*eslint space-in-parens: ["error", "always"]*/
            
            foo();
            
            foo( 'bar' );
            
            var foo = ( 1 + 2 ) * 3;
            ( function () { return 'bar'; }() );

            Exceptions

            An object literal may be used as a third array item to specify exceptions, with the key "exceptions" and an array as the value. These exceptions work in the context of the first option. That is, if "always" is set to enforce spacing, then any "exception" will disallow spacing. Conversely, if "never" is set to disallow spacing, then any "exception" will enforce spacing.

            The following exceptions are available: ["{}", "[]", "()", "empty"].

            Examples of incorrect code for this rule with the "never", { "exceptions": ["{}"] } option:

            /*eslint space-in-parens: ["error", "never", { "exceptions": ["{}"] }]*/
            
            foo({bar: 'baz'});
            foo(1, {bar: 'baz'});

            Examples of correct code for this rule with the "never", { "exceptions": ["{}"] } option:

            /*eslint space-in-parens: ["error", "never", { "exceptions": ["{}"] }]*/
            
            foo( {bar: 'baz'} );
            foo(1, {bar: 'baz'} );

            Examples of incorrect code for this rule with the "always", { "exceptions": ["{}"] } option:

            /*eslint space-in-parens: ["error", "always", { "exceptions": ["{}"] }]*/
            
            foo( {bar: 'baz'} );
            foo( 1, {bar: 'baz'} );

            Examples of correct code for this rule with the "always", { "exceptions": ["{}"] } option:

            /*eslint space-in-parens: ["error", "always", { "exceptions": ["{}"] }]*/
            
            foo({bar: 'baz'});
            foo( 1, {bar: 'baz'});

            Examples of incorrect code for this rule with the "never", { "exceptions": ["[]"] } option:

            /*eslint space-in-parens: ["error", "never", { "exceptions": ["[]"] }]*/
            
            foo([bar, baz]);
            foo([bar, baz], 1);

            Examples of correct code for this rule with the "never", { "exceptions": ["[]"] } option:

            /*eslint space-in-parens: ["error", "never", { "exceptions": ["[]"] }]*/
            
            foo( [bar, baz] );
            foo( [bar, baz], 1);

            Examples of incorrect code for this rule with the "always", { "exceptions": ["[]"] } option:

            /*eslint space-in-parens: ["error", "always", { "exceptions": ["[]"] }]*/
            
            foo( [bar, baz] );
            foo( [bar, baz], 1 );

            Examples of correct code for this rule with the "always", { "exceptions": ["[]"] } option:

            /*eslint space-in-parens: ["error", "always", { "exceptions": ["[]"] }]*/
            
            foo([bar, baz]);
            foo([bar, baz], 1 );

            Examples of incorrect code for this rule with the "never", { "exceptions": ["()"] }] option:

            /*eslint space-in-parens: ["error", "never", { "exceptions": ["()"] }]*/
            
            foo((1 + 2));
            foo((1 + 2), 1);

            Examples of correct code for this rule with the "never", { "exceptions": ["()"] }] option:

            /*eslint space-in-parens: ["error", "never", { "exceptions": ["()"] }]*/
            
            foo( (1 + 2) );
            foo( (1 + 2), 1);

            Examples of incorrect code for this rule with the "always", { "exceptions": ["()"] }] option:

            /*eslint space-in-parens: ["error", "always", { "exceptions": ["()"] }]*/
            
            foo( ( 1 + 2 ) );
            foo( ( 1 + 2 ), 1 );

            Examples of correct code for this rule with the "always", { "exceptions": ["()"] }] option:

            /*eslint space-in-parens: ["error", "always", { "exceptions": ["()"] }]*/
            
            foo(( 1 + 2 ));
            foo(( 1 + 2 ), 1 );

            The "empty" exception concerns empty parentheses, and works the same way as the other exceptions, inverting the first option.

            Example of incorrect code for this rule with the "never", { "exceptions": ["empty"] }] option:

            /*eslint space-in-parens: ["error", "never", { "exceptions": ["empty"] }]*/
            
            foo();

            Example of correct code for this rule with the "never", { "exceptions": ["empty"] }] option:

            /*eslint space-in-parens: ["error", "never", { "exceptions": ["empty"] }]*/
            
            foo( );

            Example of incorrect code for this rule with the "always", { "exceptions": ["empty"] }] option:

            /*eslint space-in-parens: ["error", "always", { "exceptions": ["empty"] }]*/
            
            foo( );

            Example of correct code for this rule with the "always", { "exceptions": ["empty"] }] option:

            /*eslint space-in-parens: ["error", "always", { "exceptions": ["empty"] }]*/
            
            foo();

            You can include multiple entries in the "exceptions" array.

            Examples of incorrect code for this rule with the "always", { "exceptions": ["{}", "[]"] }] option:

            /*eslint space-in-parens: ["error", "always", { "exceptions": ["{}", "[]"] }]*/
            
            bar( {bar:'baz'} );
            baz( 1, [1,2] );
            foo( {bar: 'baz'}, [1, 2] );

            Examples of correct code for this rule with the "always", { "exceptions": ["{}", "[]"] }] option:

            /*eslint space-in-parens: ["error", "always", { "exceptions": ["{}", "[]"] }]*/
            
            bar({bar:'baz'});
            baz( 1, [1,2]);
            foo({bar: 'baz'}, [1, 2]);

            When Not To Use It

            You can turn this rule off if you are not concerned with the consistency of spacing between parentheses.

            Related Rules

            Unexpected require().
            Open

                const Translate = require('react-translate-component')

            Enforce require() on the top-level module scope (global-require)

            In Node.js, module dependencies are included using the require() function, such as:

            var fs = require("fs");

            While require() may be called anywhere in code, some style guides prescribe that it should be called only in the top level of a module to make it easier to identify dependencies. For instance, it's arguably harder to identify dependencies when they are deeply nested inside of functions and other statements:

            function foo() {
            
                if (condition) {
                    var fs = require("fs");
                }
            }

            Since require() does a synchronous load, it can cause performance problems when used in other locations.

            Further, ES6 modules mandate that import and export statements can only occur in the top level of the module's body.

            Rule Details

            This rule requires all calls to require() to be at the top level of the module, similar to ES6 import and export statements, which also can occur only at the top level.

            Examples of incorrect code for this rule:

            /*eslint global-require: "error"*/
            /*eslint-env es6*/
            
            // calling require() inside of a function is not allowed
            function readFile(filename, callback) {
                var fs = require('fs');
                fs.readFile(filename, callback)
            }
            
            // conditional requires like this are also not allowed
            if (DEBUG) { require('debug'); }
            
            // a require() in a switch statement is also flagged
            switch(x) { case '1': require('1'); break; }
            
            // you may not require() inside an arrow function body
            var getModule = (name) => require(name);
            
            // you may not require() inside of a function body as well
            function getModule(name) { return require(name); }
            
            // you may not require() inside of a try/catch block
            try {
                require(unsafeModule);
            } catch(e) {
                console.log(e);
            }

            Examples of correct code for this rule:

            /*eslint global-require: "error"*/
            
            // all these variations of require() are ok
            require('x');
            var y = require('y');
            var z;
            z = require('z').initialize();
            
            // requiring a module and using it in a function is ok
            var fs = require('fs');
            function readFile(filename, callback) {
                fs.readFile(filename, callback)
            }
            
            // you can use a ternary to determine which module to require
            var logger = DEBUG ? require('dev-logger') : require('logger');
            
            // if you want you can require() at the end of your module
            function doSomethingA() {}
            function doSomethingB() {}
            var x = require("x"),
                z = require("z");

            When Not To Use It

            If you have a module that must be initialized with information that comes from the file-system or if a module is only used in very rare situations and will cause significant overhead to load it may make sense to disable the rule. If you need to require() an optional dependency inside of a try/catch, you can disable this rule for just that dependency using the // eslint-disable-line global-require comment. Source: http://eslint.org/docs/rules/

            Expected property shorthand.
            Open

                      openDate: openDate,

            Require Object Literal Shorthand Syntax (object-shorthand)

            EcmaScript 6 provides a concise form for defining object literal methods and properties. This syntax can make defining complex object literals much cleaner.

            Here are a few common examples using the ES5 syntax:

            // properties
            var foo = {
                x: x,
                y: y,
                z: z,
            };
            
            // methods
            var foo = {
                a: function() {},
                b: function() {}
            };

            Now here are ES6 equivalents:

            /*eslint-env es6*/
            
            // properties
            var foo = {x, y, z};
            
            // methods
            var foo = {
                a() {},
                b() {}
            };

            Rule Details

            This rule enforces the use of the shorthand syntax. This applies to all methods (including generators) defined in object literals and any properties defined where the key name matches name of the assigned variable.

            Each of the following properties would warn:

            /*eslint object-shorthand: "error"*/
            /*eslint-env es6*/
            
            var foo = {
                w: function() {},
                x: function *() {},
                [y]: function() {},
                z: z
            };

            In that case the expected syntax would have been:

            /*eslint object-shorthand: "error"*/
            /*eslint-env es6*/
            
            var foo = {
                w() {},
                *x() {},
                [y]() {},
                z
            };

            This rule does not flag arrow functions inside of object literals. The following will not warn:

            /*eslint object-shorthand: "error"*/
            /*eslint-env es6*/
            
            var foo = {
                x: (y) => y
            };

            Options

            The rule takes an option which specifies when it should be applied. It can be set to one of the following values:

            • "always" (default) expects that the shorthand will be used whenever possible.
            • "methods" ensures the method shorthand is used (also applies to generators).
            • "properties" ensures the property shorthand is used (where the key and variable name match).
            • "never" ensures that no property or method shorthand is used in any object literal.
            • "consistent" ensures that either all shorthand or all longform will be used in an object literal.
            • "consistent-as-needed" ensures that either all shorthand or all longform will be used in an object literal, but ensures all shorthand whenever possible.

            You can set the option in configuration like this:

            {
                "object-shorthand": ["error", "always"]
            }

            Additionally, the rule takes an optional object configuration:

            • "avoidQuotes": true indicates that longform syntax is preferred whenever the object key is a string literal (default: false). Note that this option can only be enabled when the string option is set to "always", "methods", or "properties".
            • "ignoreConstructors": true can be used to prevent the rule from reporting errors for constructor functions. (By default, the rule treats constructors the same way as other functions.) Note that this option can only be enabled when the string option is set to "always" or "methods".
            • "avoidExplicitReturnArrows": true indicates that methods are preferred over explicit-return arrow functions for function properties. (By default, the rule allows either of these.) Note that this option can only be enabled when the string option is set to "always" or "methods".

            avoidQuotes

            {
                "object-shorthand": ["error", "always", { "avoidQuotes": true }]
            }

            Example of incorrect code for this rule with the "always", { "avoidQuotes": true } option:

            /*eslint object-shorthand: ["error", "always", { "avoidQuotes": true }]*/
            /*eslint-env es6*/
            
            var foo = {
                "bar-baz"() {}
            };

            Example of correct code for this rule with the "always", { "avoidQuotes": true } option:

            /*eslint object-shorthand: ["error", "always", { "avoidQuotes": true }]*/
            /*eslint-env es6*/
            
            var foo = {
                "bar-baz": function() {},
                "qux": qux
            };

            ignoreConstructors

            {
                "object-shorthand": ["error", "always", { "ignoreConstructors": true }]
            }

            Example of correct code for this rule with the "always", { "ignoreConstructors": true } option:

            /*eslint object-shorthand: ["error", "always", { "ignoreConstructors": true }]*/
            /*eslint-env es6*/
            
            var foo = {
                ConstructorFunction: function() {}
            };

            avoidExplicitReturnArrows

            {
                "object-shorthand": ["error", "always", { "avoidExplicitReturnArrows": true }]
            }

            Example of incorrect code for this rule with the "always", { "avoidExplicitReturnArrows": true } option:

            /*eslint object-shorthand: ["error", "always", { "avoidExplicitReturnArrows": true }]*/
            /*eslint-env es6*/
            
            var foo = {
              foo: (bar, baz) => {
                return bar + baz;
              },
            
              qux: (foobar) => {
                return foobar * 2;
              }
            };

            Example of correct code for this rule with the "always", { "avoidExplicitReturnArrows": true } option:

            /*eslint object-shorthand: ["error", "always", { "avoidExplicitReturnArrows": true }]*/
            /*eslint-env es6*/
            
            var foo = {
              foo(bar, baz) {
                return bar + baz;
              },
            
              qux: foobar => foobar * 2
            };

            Example of incorrect code for this rule with the "consistent" option:

            /*eslint object-shorthand: [2, "consistent"]*/
            /*eslint-env es6*/
            
            var foo = {
                a,
                b: "foo",
            };

            Examples of correct code for this rule with the "consistent" option:

            /*eslint object-shorthand: [2, "consistent"]*/
            /*eslint-env es6*/
            
            var foo = {
                a: a,
                b: "foo"
            };
            
            var bar = {
                a,
                b,
            };

            Example of incorrect code with the "consistent-as-needed" option, which is very similar to "consistent":

            /*eslint object-shorthand: [2, "consistent-as-needed"]*/
            /*eslint-env es6*/
            
            var foo = {
                a: a,
                b: b,
            };

            When Not To Use It

            Anyone not yet in an ES6 environment would not want to apply this rule. Others may find the terseness of the shorthand syntax harder to read and may not want to encourage it with this rule.

            Further Reading

            Object initializer - MDN Source: http://eslint.org/docs/rules/

            Expected property shorthand.
            Open

                      closeDate: closeDate,

            Require Object Literal Shorthand Syntax (object-shorthand)

            EcmaScript 6 provides a concise form for defining object literal methods and properties. This syntax can make defining complex object literals much cleaner.

            Here are a few common examples using the ES5 syntax:

            // properties
            var foo = {
                x: x,
                y: y,
                z: z,
            };
            
            // methods
            var foo = {
                a: function() {},
                b: function() {}
            };

            Now here are ES6 equivalents:

            /*eslint-env es6*/
            
            // properties
            var foo = {x, y, z};
            
            // methods
            var foo = {
                a() {},
                b() {}
            };

            Rule Details

            This rule enforces the use of the shorthand syntax. This applies to all methods (including generators) defined in object literals and any properties defined where the key name matches name of the assigned variable.

            Each of the following properties would warn:

            /*eslint object-shorthand: "error"*/
            /*eslint-env es6*/
            
            var foo = {
                w: function() {},
                x: function *() {},
                [y]: function() {},
                z: z
            };

            In that case the expected syntax would have been:

            /*eslint object-shorthand: "error"*/
            /*eslint-env es6*/
            
            var foo = {
                w() {},
                *x() {},
                [y]() {},
                z
            };

            This rule does not flag arrow functions inside of object literals. The following will not warn:

            /*eslint object-shorthand: "error"*/
            /*eslint-env es6*/
            
            var foo = {
                x: (y) => y
            };

            Options

            The rule takes an option which specifies when it should be applied. It can be set to one of the following values:

            • "always" (default) expects that the shorthand will be used whenever possible.
            • "methods" ensures the method shorthand is used (also applies to generators).
            • "properties" ensures the property shorthand is used (where the key and variable name match).
            • "never" ensures that no property or method shorthand is used in any object literal.
            • "consistent" ensures that either all shorthand or all longform will be used in an object literal.
            • "consistent-as-needed" ensures that either all shorthand or all longform will be used in an object literal, but ensures all shorthand whenever possible.

            You can set the option in configuration like this:

            {
                "object-shorthand": ["error", "always"]
            }

            Additionally, the rule takes an optional object configuration:

            • "avoidQuotes": true indicates that longform syntax is preferred whenever the object key is a string literal (default: false). Note that this option can only be enabled when the string option is set to "always", "methods", or "properties".
            • "ignoreConstructors": true can be used to prevent the rule from reporting errors for constructor functions. (By default, the rule treats constructors the same way as other functions.) Note that this option can only be enabled when the string option is set to "always" or "methods".
            • "avoidExplicitReturnArrows": true indicates that methods are preferred over explicit-return arrow functions for function properties. (By default, the rule allows either of these.) Note that this option can only be enabled when the string option is set to "always" or "methods".

            avoidQuotes

            {
                "object-shorthand": ["error", "always", { "avoidQuotes": true }]
            }

            Example of incorrect code for this rule with the "always", { "avoidQuotes": true } option:

            /*eslint object-shorthand: ["error", "always", { "avoidQuotes": true }]*/
            /*eslint-env es6*/
            
            var foo = {
                "bar-baz"() {}
            };

            Example of correct code for this rule with the "always", { "avoidQuotes": true } option:

            /*eslint object-shorthand: ["error", "always", { "avoidQuotes": true }]*/
            /*eslint-env es6*/
            
            var foo = {
                "bar-baz": function() {},
                "qux": qux
            };

            ignoreConstructors

            {
                "object-shorthand": ["error", "always", { "ignoreConstructors": true }]
            }

            Example of correct code for this rule with the "always", { "ignoreConstructors": true } option:

            /*eslint object-shorthand: ["error", "always", { "ignoreConstructors": true }]*/
            /*eslint-env es6*/
            
            var foo = {
                ConstructorFunction: function() {}
            };

            avoidExplicitReturnArrows

            {
                "object-shorthand": ["error", "always", { "avoidExplicitReturnArrows": true }]
            }

            Example of incorrect code for this rule with the "always", { "avoidExplicitReturnArrows": true } option:

            /*eslint object-shorthand: ["error", "always", { "avoidExplicitReturnArrows": true }]*/
            /*eslint-env es6*/
            
            var foo = {
              foo: (bar, baz) => {
                return bar + baz;
              },
            
              qux: (foobar) => {
                return foobar * 2;
              }
            };

            Example of correct code for this rule with the "always", { "avoidExplicitReturnArrows": true } option:

            /*eslint object-shorthand: ["error", "always", { "avoidExplicitReturnArrows": true }]*/
            /*eslint-env es6*/
            
            var foo = {
              foo(bar, baz) {
                return bar + baz;
              },
            
              qux: foobar => foobar * 2
            };

            Example of incorrect code for this rule with the "consistent" option:

            /*eslint object-shorthand: [2, "consistent"]*/
            /*eslint-env es6*/
            
            var foo = {
                a,
                b: "foo",
            };

            Examples of correct code for this rule with the "consistent" option:

            /*eslint object-shorthand: [2, "consistent"]*/
            /*eslint-env es6*/
            
            var foo = {
                a: a,
                b: "foo"
            };
            
            var bar = {
                a,
                b,
            };

            Example of incorrect code with the "consistent-as-needed" option, which is very similar to "consistent":

            /*eslint object-shorthand: [2, "consistent-as-needed"]*/
            /*eslint-env es6*/
            
            var foo = {
                a: a,
                b: b,
            };

            When Not To Use It

            Anyone not yet in an ES6 environment would not want to apply this rule. Others may find the terseness of the shorthand syntax harder to read and may not want to encourage it with this rule.

            Further Reading

            Object initializer - MDN Source: http://eslint.org/docs/rules/

            Unexpected string concatenation.
            Open

                      this.context.history.replaceState({}, '/w/' + id)

            Suggest using template literals instead of string concatenation. (prefer-template)

            In ES2015 (ES6), we can use template literals instead of string concatenation.

            var str = "Hello, " + name + "!";
            /*eslint-env es6*/
            
            var str = `Hello, ${name}!`;

            Rule Details

            This rule is aimed to flag usage of + operators with strings.

            Examples

            Examples of incorrect code for this rule:

            /*eslint prefer-template: "error"*/
            
            var str = "Hello, " + name + "!";
            var str = "Time: " + (12 * 60 * 60 * 1000);

            Examples of correct code for this rule:

            /*eslint prefer-template: "error"*/
            /*eslint-env es6*/
            
            var str = "Hello World!";
            var str = `Hello, ${name}!`;
            var str = `Time: ${12 * 60 * 60 * 1000}`;
            
            // This is reported by `no-useless-concat`.
            var str = "Hello, " + "World!";

            When Not To Use It

            This rule should not be used in ES3/5 environments.

            In ES2015 (ES6) or later, if you don't want to be notified about string concatenation, you can safely disable this rule.

            Related Rules

            Assignment can be replaced with operator assignment.
            Open

                _date[1] = _date[1] - 1

            require or disallow assignment operator shorthand where possible (operator-assignment)

            JavaScript provides shorthand operators that combine variable assignment and some simple mathematical operations. For example, x = x + 4 can be shortened to x += 4. The supported shorthand forms are as follows:

            Shorthand | Separate
            -----------|------------
             x += y    | x = x + y
             x -= y    | x = x - y
             x *= y    | x = x * y
             x /= y    | x = x / y
             x %= y    | x = x % y
             x <<= y   | x = x << y
             x >>= y   | x = x >> y
             x >>>= y  | x = x >>> y
             x &= y    | x = x & y
             x ^= y    | x = x ^ y
             x |= y    | x = x | y

            Rule Details

            This rule requires or disallows assignment operator shorthand where possible.

            Options

            This rule has a single string option:

            • "always" (default) requires assignment operator shorthand where possible
            • "never" disallows assignment operator shorthand

            always

            Examples of incorrect code for this rule with the default "always" option:

            /*eslint operator-assignment: ["error", "always"]*/
            
            x = x + y;
            x = y * x;
            x[0] = x[0] / y;
            x.y = x.y << z;

            Examples of correct code for this rule with the default "always" option:

            /*eslint operator-assignment: ["error", "always"]*/
            
            x = y;
            x += y;
            x = y * z;
            x = (x * y) * z;
            x[0] /= y;
            x[foo()] = x[foo()] % 2;
            x = y + x; // `+` is not always commutative (e.g. x = "abc")

            never

            Examples of incorrect code for this rule with the "never" option:

            /*eslint operator-assignment: ["error", "never"]*/
            
            x *= y;
            x ^= (y + z) / foo();

            Examples of correct code for this rule with the "never" option:

            /*eslint operator-assignment: ["error", "never"]*/
            
            x = x + y;
            x.y = x.y / a.b;

            When Not To Use It

            Use of operator assignment shorthand is a stylistic choice. Leaving this rule turned off would allow developers to choose which style is more readable on a case-by-case basis. Source: http://eslint.org/docs/rules/

            Unexpected string concatenation.
            Open

                      src = '/images/' + name

            Suggest using template literals instead of string concatenation. (prefer-template)

            In ES2015 (ES6), we can use template literals instead of string concatenation.

            var str = "Hello, " + name + "!";
            /*eslint-env es6*/
            
            var str = `Hello, ${name}!`;

            Rule Details

            This rule is aimed to flag usage of + operators with strings.

            Examples

            Examples of incorrect code for this rule:

            /*eslint prefer-template: "error"*/
            
            var str = "Hello, " + name + "!";
            var str = "Time: " + (12 * 60 * 60 * 1000);

            Examples of correct code for this rule:

            /*eslint prefer-template: "error"*/
            /*eslint-env es6*/
            
            var str = "Hello World!";
            var str = `Hello, ${name}!`;
            var str = `Time: ${12 * 60 * 60 * 1000}`;
            
            // This is reported by `no-useless-concat`.
            var str = "Hello, " + "World!";

            When Not To Use It

            This rule should not be used in ES3/5 environments.

            In ES2015 (ES6) or later, if you don't want to be notified about string concatenation, you can safely disable this rule.

            Related Rules

            Unexpected string concatenation.
            Open

                      src = '/images/' + name

            Suggest using template literals instead of string concatenation. (prefer-template)

            In ES2015 (ES6), we can use template literals instead of string concatenation.

            var str = "Hello, " + name + "!";
            /*eslint-env es6*/
            
            var str = `Hello, ${name}!`;

            Rule Details

            This rule is aimed to flag usage of + operators with strings.

            Examples

            Examples of incorrect code for this rule:

            /*eslint prefer-template: "error"*/
            
            var str = "Hello, " + name + "!";
            var str = "Time: " + (12 * 60 * 60 * 1000);

            Examples of correct code for this rule:

            /*eslint prefer-template: "error"*/
            /*eslint-env es6*/
            
            var str = "Hello World!";
            var str = `Hello, ${name}!`;
            var str = `Time: ${12 * 60 * 60 * 1000}`;
            
            // This is reported by `no-useless-concat`.
            var str = "Hello, " + "World!";

            When Not To Use It

            This rule should not be used in ES3/5 environments.

            In ES2015 (ES6) or later, if you don't want to be notified about string concatenation, you can safely disable this rule.

            Related Rules

            Unexpected string concatenation.
            Open

                      src = '/images/' + name

            Suggest using template literals instead of string concatenation. (prefer-template)

            In ES2015 (ES6), we can use template literals instead of string concatenation.

            var str = "Hello, " + name + "!";
            /*eslint-env es6*/
            
            var str = `Hello, ${name}!`;

            Rule Details

            This rule is aimed to flag usage of + operators with strings.

            Examples

            Examples of incorrect code for this rule:

            /*eslint prefer-template: "error"*/
            
            var str = "Hello, " + name + "!";
            var str = "Time: " + (12 * 60 * 60 * 1000);

            Examples of correct code for this rule:

            /*eslint prefer-template: "error"*/
            /*eslint-env es6*/
            
            var str = "Hello World!";
            var str = `Hello, ${name}!`;
            var str = `Time: ${12 * 60 * 60 * 1000}`;
            
            // This is reported by `no-useless-concat`.
            var str = "Hello, " + "World!";

            When Not To Use It

            This rule should not be used in ES3/5 environments.

            In ES2015 (ES6) or later, if you don't want to be notified about string concatenation, you can safely disable this rule.

            Related Rules

            Expected property shorthand.
            Open

                this.setState({ options: options })

            Require Object Literal Shorthand Syntax (object-shorthand)

            EcmaScript 6 provides a concise form for defining object literal methods and properties. This syntax can make defining complex object literals much cleaner.

            Here are a few common examples using the ES5 syntax:

            // properties
            var foo = {
                x: x,
                y: y,
                z: z,
            };
            
            // methods
            var foo = {
                a: function() {},
                b: function() {}
            };

            Now here are ES6 equivalents:

            /*eslint-env es6*/
            
            // properties
            var foo = {x, y, z};
            
            // methods
            var foo = {
                a() {},
                b() {}
            };

            Rule Details

            This rule enforces the use of the shorthand syntax. This applies to all methods (including generators) defined in object literals and any properties defined where the key name matches name of the assigned variable.

            Each of the following properties would warn:

            /*eslint object-shorthand: "error"*/
            /*eslint-env es6*/
            
            var foo = {
                w: function() {},
                x: function *() {},
                [y]: function() {},
                z: z
            };

            In that case the expected syntax would have been:

            /*eslint object-shorthand: "error"*/
            /*eslint-env es6*/
            
            var foo = {
                w() {},
                *x() {},
                [y]() {},
                z
            };

            This rule does not flag arrow functions inside of object literals. The following will not warn:

            /*eslint object-shorthand: "error"*/
            /*eslint-env es6*/
            
            var foo = {
                x: (y) => y
            };

            Options

            The rule takes an option which specifies when it should be applied. It can be set to one of the following values:

            • "always" (default) expects that the shorthand will be used whenever possible.
            • "methods" ensures the method shorthand is used (also applies to generators).
            • "properties" ensures the property shorthand is used (where the key and variable name match).
            • "never" ensures that no property or method shorthand is used in any object literal.
            • "consistent" ensures that either all shorthand or all longform will be used in an object literal.
            • "consistent-as-needed" ensures that either all shorthand or all longform will be used in an object literal, but ensures all shorthand whenever possible.

            You can set the option in configuration like this:

            {
                "object-shorthand": ["error", "always"]
            }

            Additionally, the rule takes an optional object configuration:

            • "avoidQuotes": true indicates that longform syntax is preferred whenever the object key is a string literal (default: false). Note that this option can only be enabled when the string option is set to "always", "methods", or "properties".
            • "ignoreConstructors": true can be used to prevent the rule from reporting errors for constructor functions. (By default, the rule treats constructors the same way as other functions.) Note that this option can only be enabled when the string option is set to "always" or "methods".
            • "avoidExplicitReturnArrows": true indicates that methods are preferred over explicit-return arrow functions for function properties. (By default, the rule allows either of these.) Note that this option can only be enabled when the string option is set to "always" or "methods".

            avoidQuotes

            {
                "object-shorthand": ["error", "always", { "avoidQuotes": true }]
            }

            Example of incorrect code for this rule with the "always", { "avoidQuotes": true } option:

            /*eslint object-shorthand: ["error", "always", { "avoidQuotes": true }]*/
            /*eslint-env es6*/
            
            var foo = {
                "bar-baz"() {}
            };

            Example of correct code for this rule with the "always", { "avoidQuotes": true } option:

            /*eslint object-shorthand: ["error", "always", { "avoidQuotes": true }]*/
            /*eslint-env es6*/
            
            var foo = {
                "bar-baz": function() {},
                "qux": qux
            };

            ignoreConstructors

            {
                "object-shorthand": ["error", "always", { "ignoreConstructors": true }]
            }

            Example of correct code for this rule with the "always", { "ignoreConstructors": true } option:

            /*eslint object-shorthand: ["error", "always", { "ignoreConstructors": true }]*/
            /*eslint-env es6*/
            
            var foo = {
                ConstructorFunction: function() {}
            };

            avoidExplicitReturnArrows

            {
                "object-shorthand": ["error", "always", { "avoidExplicitReturnArrows": true }]
            }

            Example of incorrect code for this rule with the "always", { "avoidExplicitReturnArrows": true } option:

            /*eslint object-shorthand: ["error", "always", { "avoidExplicitReturnArrows": true }]*/
            /*eslint-env es6*/
            
            var foo = {
              foo: (bar, baz) => {
                return bar + baz;
              },
            
              qux: (foobar) => {
                return foobar * 2;
              }
            };

            Example of correct code for this rule with the "always", { "avoidExplicitReturnArrows": true } option:

            /*eslint object-shorthand: ["error", "always", { "avoidExplicitReturnArrows": true }]*/
            /*eslint-env es6*/
            
            var foo = {
              foo(bar, baz) {
                return bar + baz;
              },
            
              qux: foobar => foobar * 2
            };

            Example of incorrect code for this rule with the "consistent" option:

            /*eslint object-shorthand: [2, "consistent"]*/
            /*eslint-env es6*/
            
            var foo = {
                a,
                b: "foo",
            };

            Examples of correct code for this rule with the "consistent" option:

            /*eslint object-shorthand: [2, "consistent"]*/
            /*eslint-env es6*/
            
            var foo = {
                a: a,
                b: "foo"
            };
            
            var bar = {
                a,
                b,
            };

            Example of incorrect code with the "consistent-as-needed" option, which is very similar to "consistent":

            /*eslint object-shorthand: [2, "consistent-as-needed"]*/
            /*eslint-env es6*/
            
            var foo = {
                a: a,
                b: b,
            };

            When Not To Use It

            Anyone not yet in an ES6 environment would not want to apply this rule. Others may find the terseness of the shorthand syntax harder to read and may not want to encourage it with this rule.

            Further Reading

            Object initializer - MDN Source: http://eslint.org/docs/rules/

            Expected to return a value in function.
            Open

                    errors.map(function (err) {

            Enforces return statements in callbacks of array's methods (array-callback-return)

            Array has several methods for filtering, mapping, and folding. If we forget to write return statement in a callback of those, it's probably a mistake.

            // example: convert ['a', 'b', 'c'] --> {a: 0, b: 1, c: 2}
            var indexMap = myArray.reduce(function(memo, item, index) {
              memo[item] = index;
            }, {}); // Error: cannot set property 'b' of undefined

            This rule enforces usage of return statement in callbacks of array's methods.

            Rule Details

            This rule finds callback functions of the following methods, then checks usage of return statement.

            Examples of incorrect code for this rule:

            /*eslint array-callback-return: "error"*/
            
            var indexMap = myArray.reduce(function(memo, item, index) {
                memo[item] = index;
            }, {});
            
            var foo = Array.from(nodes, function(node) {
                if (node.tagName === "DIV") {
                    return true;
                }
            });
            
            var bar = foo.filter(function(x) {
                if (x) {
                    return true;
                } else {
                    return;
                }
            });

            Examples of correct code for this rule:

            /*eslint array-callback-return: "error"*/
            
            var indexMap = myArray.reduce(function(memo, item, index) {
                memo[item] = index;
                return memo;
            }, {});
            
            var foo = Array.from(nodes, function(node) {
                if (node.tagName === "DIV") {
                    return true;
                }
                return false;
            });
            
            var bar = foo.map(node => node.getAttribute("id"));

            Known Limitations

            This rule checks callback functions of methods with the given names, even if the object which has the method is not an array.

            When Not To Use It

            If you don't want to warn about usage of return statement in callbacks of array's methods, then it's safe to disable this rule. Source: http://eslint.org/docs/rules/

            Unnecessarily quoted property 'error' found.
            Open

                  { 'error': !!this.state.latlngError }

            require quotes around object literal property names (quote-props)

            Object literal property names can be defined in two ways: using literals or using strings. For example, these two objects are equivalent:

            var object1 = {
                property: true
            };
            
            var object2 = {
                "property": true
            };

            In many cases, it doesn't matter if you choose to use an identifier instead of a string or vice-versa. Even so, you might decide to enforce a consistent style in your code.

            There are, however, some occasions when you must use quotes:

            1. If you are using an ECMAScript 3 JavaScript engine (such as IE8) and you want to use a keyword (such as if) as a property name. This restriction was removed in ECMAScript 5.
            2. You want to use a non-identifier character in your property name, such as having a property with a space like "one two".

            Another example where quotes do matter is when using numeric literals as property keys:

            var object = {
                1e2: 1,
                100: 2
            };

            This may look alright at first sight, but this code in fact throws a syntax error in ECMAScript 5 strict mode. This happens because 1e2 and 100 are coerced into strings before getting used as the property name. Both String(1e2) and String(100) happen to be equal to "100", which causes the "Duplicate data property in object literal not allowed in strict mode" error. Issues like that can be tricky to debug, so some prefer to require quotes around all property names.

            Rule Details

            This rule requires quotes around object literal property names.

            Options

            This rule has two options, a string option and an object option.

            String option:

            • "always" (default) requires quotes around all object literal property names
            • "as-needed" disallows quotes around object literal property names that are not strictly required
            • "consistent" enforces a consistent quote style requires quotes around object literal property names
            • "consistent-as-needed" requires quotes around all object literal property names if any name strictly requires quotes, otherwise disallows quotes around object property names

            Object option:

            • "keywords": true requires quotes around language keywords used as object property names (only applies when using as-needed or consistent-as-needed)
            • "unnecessary": true (default) disallows quotes around object literal property names that are not strictly required (only applies when using as-needed)
            • "unnecessary": false allows quotes around object literal property names that are not strictly required (only applies when using as-needed)
            • "numbers": true requires quotes around numbers used as object property names (only applies when using as-needed)

            always

            Examples of incorrect code for this rule with the default "always" option:

            /*eslint quote-props: ["error", "always"]*/
            
            var object = {
                foo: "bar",
                baz: 42,
                "qux-lorem": true
            };

            Examples of correct code for this rule with the default "always" option:

            /*eslint quote-props: ["error", "always"]*/
            /*eslint-env es6*/
            
            var object1 = {
                "foo": "bar",
                "baz": 42,
                "qux-lorem": true
            };
            
            var object2 = {
                'foo': 'bar',
                'baz': 42,
                'qux-lorem': true
            };
            
            var object3 = {
                foo() {
                    return;
                }
            };

            as-needed

            Examples of incorrect code for this rule with the "as-needed" option:

            /*eslint quote-props: ["error", "as-needed"]*/
            
            var object = {
                "a": 0,
                "0": 0,
                "true": 0,
                "null": 0
            };

            Examples of correct code for this rule with the "as-needed" option:

            /*eslint quote-props: ["error", "as-needed"]*/
            /*eslint-env es6*/
            
            var object1 = {
                "a-b": 0,
                "0x0": 0,
                "1e2": 0
            };
            
            var object2 = {
                foo: 'bar',
                baz: 42,
                true: 0,
                0: 0,
                'qux-lorem': true
            };
            
            var object3 = {
                foo() {
                    return;
                }
            };

            consistent

            Examples of incorrect code for this rule with the "consistent" option:

            /*eslint quote-props: ["error", "consistent"]*/
            
            var object1 = {
                foo: "bar",
                "baz": 42,
                "qux-lorem": true
            };
            
            var object2 = {
                'foo': 'bar',
                baz: 42
            };

            Examples of correct code for this rule with the "consistent" option:

            /*eslint quote-props: ["error", "consistent"]*/
            
            var object1 = {
                "foo": "bar",
                "baz": 42,
                "qux-lorem": true
            };
            
            var object2 = {
                'foo': 'bar',
                'baz': 42
            };
            
            var object3 = {
                foo: 'bar',
                baz: 42
            };

            consistent-as-needed

            Examples of incorrect code for this rule with the "consistent-as-needed" option:

            /*eslint quote-props: ["error", "consistent-as-needed"]*/
            
            var object1 = {
                foo: "bar",
                "baz": 42,
                "qux-lorem": true
            };
            
            var object2 = {
                'foo': 'bar',
                'baz': 42
            };

            Examples of correct code for this rule with the "consistent-as-needed" option:

            /*eslint quote-props: ["error", "consistent-as-needed"]*/
            
            var object1 = {
                "foo": "bar",
                "baz": 42,
                "qux-lorem": true
            };
            
            var object2 = {
                foo: 'bar',
                baz: 42
            };

            keywords

            Examples of additional incorrect code for this rule with the "as-needed", { "keywords": true } options:

            /*eslint quote-props: ["error", "as-needed", { "keywords": true }]*/
            
            var x = {
                while: 1,
                volatile: "foo"
            };

            Examples of additional incorrect code for this rule with the "consistent-as-needed", { "keywords": true } options:

            /*eslint quote-props: ["error", "consistent-as-needed", { "keywords": true }]*/
            
            var x = {
                "prop": 1,
                "bar": "foo"
            };

            unnecessary

            Examples of additional correct code for this rule with the "as-needed", { "unnecessary": false } options:

            /*eslint quote-props: ["error", "as-needed", { "keywords": true, "unnecessary": false }]*/
            
            var x = {
                "while": 1,
                "foo": "bar"  // Would normally have caused a warning
            };

            numbers

            Examples of additional incorrect code for this rule with the "as-needed", { "numbers": true } options:

            /*eslint quote-props: ["error", "as-needed", { "numbers": true }]*/
            
            var x = {
                100: 1
            }

            When Not To Use It

            If you don't care if property names are consistently wrapped in quotes or not, and you don't target legacy ES3 environments, turn this rule off.

            Further Reading

            Do not access Object.prototype method 'hasOwnProperty' from target object.
            Open

                    if (options.fields[key].hasOwnProperty('hasError')) {

            Disallow use of Object.prototypes builtins directly (no-prototype-builtins)

            In ECMAScript 5.1, Object.create was added, which enables the creation of objects with a specified [[Prototype]]. Object.create(null) is a common pattern used to create objects that will be used as a Map. This can lead to errors when it is assumed that objects will have properties from Object.prototype. This rule prevents calling Object.prototype methods directly from an object.

            Rule Details

            This rule disallows calling some Object.prototype methods directly on object instances.

            Examples of incorrect code for this rule:

            /*eslint no-prototype-builtins: "error"*/
            
            var hasBarProperty = foo.hasOwnProperty("bar");
            
            var isPrototypeOfBar = foo.isPrototypeOf(bar);
            
            var barIsEnumerable = foo.propertyIsEnumerable("bar");

            Examples of correct code for this rule:

            /*eslint no-prototype-builtins: "error"*/
            
            var hasBarProperty = Object.prototype.hasOwnProperty.call(foo, "bar");
            
            var isPrototypeOfBar = Object.prototype.isPrototypeOf.call(foo, bar);
            
            var barIsEnumerable = {}.propertyIsEnumerable.call(foo, "bar");

            When Not To Use It

            You may want to turn this rule off if you will never use an object that shadows an Object.prototype method or which does not inherit from Object.prototype. Source: http://eslint.org/docs/rules/

            Do not access Object.prototype method 'hasOwnProperty' from target object.
            Open

                  if (options.fields.hasOwnProperty(key)) {

            Disallow use of Object.prototypes builtins directly (no-prototype-builtins)

            In ECMAScript 5.1, Object.create was added, which enables the creation of objects with a specified [[Prototype]]. Object.create(null) is a common pattern used to create objects that will be used as a Map. This can lead to errors when it is assumed that objects will have properties from Object.prototype. This rule prevents calling Object.prototype methods directly from an object.

            Rule Details

            This rule disallows calling some Object.prototype methods directly on object instances.

            Examples of incorrect code for this rule:

            /*eslint no-prototype-builtins: "error"*/
            
            var hasBarProperty = foo.hasOwnProperty("bar");
            
            var isPrototypeOfBar = foo.isPrototypeOf(bar);
            
            var barIsEnumerable = foo.propertyIsEnumerable("bar");

            Examples of correct code for this rule:

            /*eslint no-prototype-builtins: "error"*/
            
            var hasBarProperty = Object.prototype.hasOwnProperty.call(foo, "bar");
            
            var isPrototypeOfBar = Object.prototype.isPrototypeOf.call(foo, bar);
            
            var barIsEnumerable = {}.propertyIsEnumerable.call(foo, "bar");

            When Not To Use It

            You may want to turn this rule off if you will never use an object that shadows an Object.prototype method or which does not inherit from Object.prototype. Source: http://eslint.org/docs/rules/

            Similar blocks of code found in 2 locations. Consider refactoring.
            Open

                      if (options.fields[err.field] !== 'undefined') {
                        if (err.code === 'invalid') {
                          options.fields[err.field] = clone(options.fields[err.field])
                          options.fields[err.field] = {
                            hasError: true, error: err.message
            Severity: Major
            Found in src/shared/components/PostComponent.js and 1 other location - About 7 hrs to fix
            src/shared/components/PostComponent.js on lines 387..399

            Duplicated Code

            Duplicated code can lead to software that is hard to understand and difficult to change. The Don't Repeat Yourself (DRY) principle states:

            Every piece of knowledge must have a single, unambiguous, authoritative representation within a system.

            When you violate DRY, bugs and maintenance problems are sure to follow. Duplicated code has a tendency to both continue to replicate and also to diverge (leaving bugs as two similar implementations differ in subtle ways).

            Tuning

            This issue has a mass of 180.

            We set useful threshold defaults for the languages we support but you may want to adjust these settings based on your project guidelines.

            The threshold configuration represents the minimum mass a code block must have to be analyzed for duplication. The lower the threshold, the more fine-grained the comparison.

            If the engine is too easily reporting duplication, try raising the threshold. If you suspect that the engine isn't catching enough duplication, try lowering the threshold. The best setting tends to differ from language to language.

            See codeclimate-duplication's documentation for more information about tuning the mass threshold in your .codeclimate.yml.

            Refactorings

            Further Reading

            Similar blocks of code found in 2 locations. Consider refactoring.
            Open

                      if (regOptions.fields[err.field] !== 'undefined') {
                        if (err.code === 'invalid') {
                          regOptions.fields[err.field] = clone(regOptions.fields[err.field])
                          regOptions.fields[err.field] = {
                            hasError: true, error: err.message
            Severity: Major
            Found in src/shared/components/PostComponent.js and 1 other location - About 7 hrs to fix
            src/shared/components/PostComponent.js on lines 373..385

            Duplicated Code

            Duplicated code can lead to software that is hard to understand and difficult to change. The Don't Repeat Yourself (DRY) principle states:

            Every piece of knowledge must have a single, unambiguous, authoritative representation within a system.

            When you violate DRY, bugs and maintenance problems are sure to follow. Duplicated code has a tendency to both continue to replicate and also to diverge (leaving bugs as two similar implementations differ in subtle ways).

            Tuning

            This issue has a mass of 180.

            We set useful threshold defaults for the languages we support but you may want to adjust these settings based on your project guidelines.

            The threshold configuration represents the minimum mass a code block must have to be analyzed for duplication. The lower the threshold, the more fine-grained the comparison.

            If the engine is too easily reporting duplication, try raising the threshold. If you suspect that the engine isn't catching enough duplication, try lowering the threshold. The best setting tends to differ from language to language.

            See codeclimate-duplication's documentation for more information about tuning the mass threshold in your .codeclimate.yml.

            Refactorings

            Further Reading

            Identical blocks of code found in 2 locations. Consider refactoring.
            Open

              clearFormErrors () {
                const options = clone(this.state.options)
                options.fields = clone(options.fields)
            
                for (const key in options.fields) {
            Severity: Major
            Found in src/shared/components/PostComponent.js and 1 other location - About 6 hrs to fix
            src/shared/components/SignupComponent.js on lines 102..115

            Duplicated Code

            Duplicated code can lead to software that is hard to understand and difficult to change. The Don't Repeat Yourself (DRY) principle states:

            Every piece of knowledge must have a single, unambiguous, authoritative representation within a system.

            When you violate DRY, bugs and maintenance problems are sure to follow. Duplicated code has a tendency to both continue to replicate and also to diverge (leaving bugs as two similar implementations differ in subtle ways).

            Tuning

            This issue has a mass of 168.

            We set useful threshold defaults for the languages we support but you may want to adjust these settings based on your project guidelines.

            The threshold configuration represents the minimum mass a code block must have to be analyzed for duplication. The lower the threshold, the more fine-grained the comparison.

            If the engine is too easily reporting duplication, try raising the threshold. If you suspect that the engine isn't catching enough duplication, try lowering the threshold. The best setting tends to differ from language to language.

            See codeclimate-duplication's documentation for more information about tuning the mass threshold in your .codeclimate.yml.

            Refactorings

            Further Reading

            Similar blocks of code found in 2 locations. Consider refactoring.
            Open

                if (path[0] === 'startDate') {
                  const newValue = clone(value)
                  const startDate = this.refs.form.getComponent(path).getValue()
                  const endDate = this.refs.form.getComponent(['endDate']).getValue()
                  newValue.endDate = newValue.startDate
            Severity: Major
            Found in src/shared/components/PostComponent.js and 1 other location - About 3 hrs to fix
            src/shared/components/PostComponent.js on lines 231..240

            Duplicated Code

            Duplicated code can lead to software that is hard to understand and difficult to change. The Don't Repeat Yourself (DRY) principle states:

            Every piece of knowledge must have a single, unambiguous, authoritative representation within a system.

            When you violate DRY, bugs and maintenance problems are sure to follow. Duplicated code has a tendency to both continue to replicate and also to diverge (leaving bugs as two similar implementations differ in subtle ways).

            Tuning

            This issue has a mass of 109.

            We set useful threshold defaults for the languages we support but you may want to adjust these settings based on your project guidelines.

            The threshold configuration represents the minimum mass a code block must have to be analyzed for duplication. The lower the threshold, the more fine-grained the comparison.

            If the engine is too easily reporting duplication, try raising the threshold. If you suspect that the engine isn't catching enough duplication, try lowering the threshold. The best setting tends to differ from language to language.

            See codeclimate-duplication's documentation for more information about tuning the mass threshold in your .codeclimate.yml.

            Refactorings

            Further Reading

            Similar blocks of code found in 2 locations. Consider refactoring.
            Open

                if (path[0] === 'openDate') {
                  const newValue = clone(regValue)
                  const openDate = this.refs.regForm.getComponent(path).getValue()
                  const closeDate = this.refs.regForm.getComponent(['closeDate']).getValue()
                  newValue.closeDate = newValue.openDate
            Severity: Major
            Found in src/shared/components/PostComponent.js and 1 other location - About 3 hrs to fix
            src/shared/components/PostComponent.js on lines 215..223

            Duplicated Code

            Duplicated code can lead to software that is hard to understand and difficult to change. The Don't Repeat Yourself (DRY) principle states:

            Every piece of knowledge must have a single, unambiguous, authoritative representation within a system.

            When you violate DRY, bugs and maintenance problems are sure to follow. Duplicated code has a tendency to both continue to replicate and also to diverge (leaving bugs as two similar implementations differ in subtle ways).

            Tuning

            This issue has a mass of 109.

            We set useful threshold defaults for the languages we support but you may want to adjust these settings based on your project guidelines.

            The threshold configuration represents the minimum mass a code block must have to be analyzed for duplication. The lower the threshold, the more fine-grained the comparison.

            If the engine is too easily reporting duplication, try raising the threshold. If you suspect that the engine isn't catching enough duplication, try lowering the threshold. The best setting tends to differ from language to language.

            See codeclimate-duplication's documentation for more information about tuning the mass threshold in your .codeclimate.yml.

            Refactorings

            Further Reading

            Similar blocks of code found in 2 locations. Consider refactoring.
            Open

                            <div className={LatLngInput}>
                              <div className="ui label">
                                <Translate content="post.map.lng" />
                              </div>
                              <input type="text"
            Severity: Major
            Found in src/shared/components/PostComponent.js and 1 other location - About 2 hrs to fix
            src/shared/components/PostComponent.js on lines 664..673

            Duplicated Code

            Duplicated code can lead to software that is hard to understand and difficult to change. The Don't Repeat Yourself (DRY) principle states:

            Every piece of knowledge must have a single, unambiguous, authoritative representation within a system.

            When you violate DRY, bugs and maintenance problems are sure to follow. Duplicated code has a tendency to both continue to replicate and also to diverge (leaving bugs as two similar implementations differ in subtle ways).

            Tuning

            This issue has a mass of 92.

            We set useful threshold defaults for the languages we support but you may want to adjust these settings based on your project guidelines.

            The threshold configuration represents the minimum mass a code block must have to be analyzed for duplication. The lower the threshold, the more fine-grained the comparison.

            If the engine is too easily reporting duplication, try raising the threshold. If you suspect that the engine isn't catching enough duplication, try lowering the threshold. The best setting tends to differ from language to language.

            See codeclimate-duplication's documentation for more information about tuning the mass threshold in your .codeclimate.yml.

            Refactorings

            Further Reading

            Similar blocks of code found in 2 locations. Consider refactoring.
            Open

                            <div className={LatLngInput}>
                              <div className="ui label">
                                <Translate content="post.map.lat" />
                              </div>
                              <input
            Severity: Major
            Found in src/shared/components/PostComponent.js and 1 other location - About 2 hrs to fix
            src/shared/components/PostComponent.js on lines 654..662

            Duplicated Code

            Duplicated code can lead to software that is hard to understand and difficult to change. The Don't Repeat Yourself (DRY) principle states:

            Every piece of knowledge must have a single, unambiguous, authoritative representation within a system.

            When you violate DRY, bugs and maintenance problems are sure to follow. Duplicated code has a tendency to both continue to replicate and also to diverge (leaving bugs as two similar implementations differ in subtle ways).

            Tuning

            This issue has a mass of 92.

            We set useful threshold defaults for the languages we support but you may want to adjust these settings based on your project guidelines.

            The threshold configuration represents the minimum mass a code block must have to be analyzed for duplication. The lower the threshold, the more fine-grained the comparison.

            If the engine is too easily reporting duplication, try raising the threshold. If you suspect that the engine isn't catching enough duplication, try lowering the threshold. The best setting tends to differ from language to language.

            See codeclimate-duplication's documentation for more information about tuning the mass threshold in your .codeclimate.yml.

            Refactorings

            Further Reading

            Similar blocks of code found in 2 locations. Consider refactoring.
            Open

                            <Form
                              ref="form"
                              type={this.state.formType}
                              options={this.state.options}
                              value={this.state.value}
            Severity: Major
            Found in src/shared/components/PostComponent.js and 1 other location - About 1 hr to fix
            src/shared/components/PostComponent.js on lines 600..605

            Duplicated Code

            Duplicated code can lead to software that is hard to understand and difficult to change. The Don't Repeat Yourself (DRY) principle states:

            Every piece of knowledge must have a single, unambiguous, authoritative representation within a system.

            When you violate DRY, bugs and maintenance problems are sure to follow. Duplicated code has a tendency to both continue to replicate and also to diverge (leaving bugs as two similar implementations differ in subtle ways).

            Tuning

            This issue has a mass of 68.

            We set useful threshold defaults for the languages we support but you may want to adjust these settings based on your project guidelines.

            The threshold configuration represents the minimum mass a code block must have to be analyzed for duplication. The lower the threshold, the more fine-grained the comparison.

            If the engine is too easily reporting duplication, try raising the threshold. If you suspect that the engine isn't catching enough duplication, try lowering the threshold. The best setting tends to differ from language to language.

            See codeclimate-duplication's documentation for more information about tuning the mass threshold in your .codeclimate.yml.

            Refactorings

            Further Reading

            Similar blocks of code found in 2 locations. Consider refactoring.
            Open

                            <Form
                              ref="regForm"
                              type={this.state.regFormType}
                              options={this.state.regOptions}
                              value={this.state.regValue}
            Severity: Major
            Found in src/shared/components/PostComponent.js and 1 other location - About 1 hr to fix
            src/shared/components/PostComponent.js on lines 572..577

            Duplicated Code

            Duplicated code can lead to software that is hard to understand and difficult to change. The Don't Repeat Yourself (DRY) principle states:

            Every piece of knowledge must have a single, unambiguous, authoritative representation within a system.

            When you violate DRY, bugs and maintenance problems are sure to follow. Duplicated code has a tendency to both continue to replicate and also to diverge (leaving bugs as two similar implementations differ in subtle ways).

            Tuning

            This issue has a mass of 68.

            We set useful threshold defaults for the languages we support but you may want to adjust these settings based on your project guidelines.

            The threshold configuration represents the minimum mass a code block must have to be analyzed for duplication. The lower the threshold, the more fine-grained the comparison.

            If the engine is too easily reporting duplication, try raising the threshold. If you suspect that the engine isn't catching enough duplication, try lowering the threshold. The best setting tends to differ from language to language.

            See codeclimate-duplication's documentation for more information about tuning the mass threshold in your .codeclimate.yml.

            Refactorings

            Further Reading

            Similar blocks of code found in 2 locations. Consider refactoring.
            Open

                if (this.refs.lat) {
                  ReactDOM.findDOMNode(this.refs.lat).value = nextProps.map.lat
                }
            Severity: Minor
            Found in src/shared/components/PostComponent.js and 1 other location - About 45 mins to fix
            src/shared/components/PostComponent.js on lines 142..144

            Duplicated Code

            Duplicated code can lead to software that is hard to understand and difficult to change. The Don't Repeat Yourself (DRY) principle states:

            Every piece of knowledge must have a single, unambiguous, authoritative representation within a system.

            When you violate DRY, bugs and maintenance problems are sure to follow. Duplicated code has a tendency to both continue to replicate and also to diverge (leaving bugs as two similar implementations differ in subtle ways).

            Tuning

            This issue has a mass of 50.

            We set useful threshold defaults for the languages we support but you may want to adjust these settings based on your project guidelines.

            The threshold configuration represents the minimum mass a code block must have to be analyzed for duplication. The lower the threshold, the more fine-grained the comparison.

            If the engine is too easily reporting duplication, try raising the threshold. If you suspect that the engine isn't catching enough duplication, try lowering the threshold. The best setting tends to differ from language to language.

            See codeclimate-duplication's documentation for more information about tuning the mass threshold in your .codeclimate.yml.

            Refactorings

            Further Reading

            Similar blocks of code found in 2 locations. Consider refactoring.
            Open

                if (this.refs.lng) {
                  ReactDOM.findDOMNode(this.refs.lng).value = nextProps.map.lng
                }
            Severity: Minor
            Found in src/shared/components/PostComponent.js and 1 other location - About 45 mins to fix
            src/shared/components/PostComponent.js on lines 139..141

            Duplicated Code

            Duplicated code can lead to software that is hard to understand and difficult to change. The Don't Repeat Yourself (DRY) principle states:

            Every piece of knowledge must have a single, unambiguous, authoritative representation within a system.

            When you violate DRY, bugs and maintenance problems are sure to follow. Duplicated code has a tendency to both continue to replicate and also to diverge (leaving bugs as two similar implementations differ in subtle ways).

            Tuning

            This issue has a mass of 50.

            We set useful threshold defaults for the languages we support but you may want to adjust these settings based on your project guidelines.

            The threshold configuration represents the minimum mass a code block must have to be analyzed for duplication. The lower the threshold, the more fine-grained the comparison.

            If the engine is too easily reporting duplication, try raising the threshold. If you suspect that the engine isn't catching enough duplication, try lowering the threshold. The best setting tends to differ from language to language.

            See codeclimate-duplication's documentation for more information about tuning the mass threshold in your .codeclimate.yml.

            Refactorings

            Further Reading

            Similar blocks of code found in 2 locations. Consider refactoring.
            Open

                if (this.refs.lng) {
                  ReactDOM.findDOMNode(this.refs.lng).value = centerFixed.lng()
                }
            Severity: Minor
            Found in src/shared/components/PostComponent.js and 1 other location - About 40 mins to fix
            src/shared/components/PostComponent.js on lines 288..290

            Duplicated Code

            Duplicated code can lead to software that is hard to understand and difficult to change. The Don't Repeat Yourself (DRY) principle states:

            Every piece of knowledge must have a single, unambiguous, authoritative representation within a system.

            When you violate DRY, bugs and maintenance problems are sure to follow. Duplicated code has a tendency to both continue to replicate and also to diverge (leaving bugs as two similar implementations differ in subtle ways).

            Tuning

            This issue has a mass of 49.

            We set useful threshold defaults for the languages we support but you may want to adjust these settings based on your project guidelines.

            The threshold configuration represents the minimum mass a code block must have to be analyzed for duplication. The lower the threshold, the more fine-grained the comparison.

            If the engine is too easily reporting duplication, try raising the threshold. If you suspect that the engine isn't catching enough duplication, try lowering the threshold. The best setting tends to differ from language to language.

            See codeclimate-duplication's documentation for more information about tuning the mass threshold in your .codeclimate.yml.

            Refactorings

            Further Reading

            Similar blocks of code found in 2 locations. Consider refactoring.
            Open

                if (this.refs.lat) {
                  ReactDOM.findDOMNode(this.refs.lat).value = centerFixed.lat()
                }
            Severity: Minor
            Found in src/shared/components/PostComponent.js and 1 other location - About 40 mins to fix
            src/shared/components/PostComponent.js on lines 291..293

            Duplicated Code

            Duplicated code can lead to software that is hard to understand and difficult to change. The Don't Repeat Yourself (DRY) principle states:

            Every piece of knowledge must have a single, unambiguous, authoritative representation within a system.

            When you violate DRY, bugs and maintenance problems are sure to follow. Duplicated code has a tendency to both continue to replicate and also to diverge (leaving bugs as two similar implementations differ in subtle ways).

            Tuning

            This issue has a mass of 49.

            We set useful threshold defaults for the languages we support but you may want to adjust these settings based on your project guidelines.

            The threshold configuration represents the minimum mass a code block must have to be analyzed for duplication. The lower the threshold, the more fine-grained the comparison.

            If the engine is too easily reporting duplication, try raising the threshold. If you suspect that the engine isn't catching enough duplication, try lowering the threshold. The best setting tends to differ from language to language.

            See codeclimate-duplication's documentation for more information about tuning the mass threshold in your .codeclimate.yml.

            Refactorings

            Further Reading

            Similar blocks of code found in 3 locations. Consider refactoring.
            Open

                                  <button
                                    className="ui circular yellow icon button"
                                    onClick={this.handleGeo}>
                                    <i className="large location arrow icon"></i>
                                  </button>
            Severity: Minor
            Found in src/shared/components/PostComponent.js and 2 other locations - About 30 mins to fix
            src/client/admin/components/StatisticsComponent.js on lines 71..73
            src/shared/components/ManageComponent.js on lines 197..199

            Duplicated Code

            Duplicated code can lead to software that is hard to understand and difficult to change. The Don't Repeat Yourself (DRY) principle states:

            Every piece of knowledge must have a single, unambiguous, authoritative representation within a system.

            When you violate DRY, bugs and maintenance problems are sure to follow. Duplicated code has a tendency to both continue to replicate and also to diverge (leaving bugs as two similar implementations differ in subtle ways).

            Tuning

            This issue has a mass of 45.

            We set useful threshold defaults for the languages we support but you may want to adjust these settings based on your project guidelines.

            The threshold configuration represents the minimum mass a code block must have to be analyzed for duplication. The lower the threshold, the more fine-grained the comparison.

            If the engine is too easily reporting duplication, try raising the threshold. If you suspect that the engine isn't catching enough duplication, try lowering the threshold. The best setting tends to differ from language to language.

            See codeclimate-duplication's documentation for more information about tuning the mass threshold in your .codeclimate.yml.

            Refactorings

            Further Reading

            Prop type object is forbidden
            Open

                auth: PropTypes.object.isRequired,

            For more information visit Source: http://eslint.org/docs/rules/

            Empty components are self-closing
            Open

                      <div className="ui hidden divider"></div>

            For more information visit Source: http://eslint.org/docs/rules/

            Using string literals in ref attributes is deprecated.
            Open

                                ref="place"

            For more information visit Source: http://eslint.org/docs/rules/

            The closing bracket must be aligned with the line containing the opening tag (expected column 19 on the next line)
            Open

                                defaultValue={this.props.map.lng} />

            For more information visit Source: http://eslint.org/docs/rules/

            Do not use findDOMNode
            Open

                  ReactDOM.findDOMNode(this.refs.lat).value = nextProps.map.lat

            For more information visit Source: http://eslint.org/docs/rules/

            Using this.refs is deprecated.
            Open

                if (this.refs.lng) {

            For more information visit Source: http://eslint.org/docs/rules/

            Do not use findDOMNode
            Open

                  lat: parseFloat(ReactDOM.findDOMNode(this.refs.lat).value.trim()),

            For more information visit Source: http://eslint.org/docs/rules/

            Prop type object is forbidden
            Open

                map: PropTypes.object.isRequired,

            For more information visit Source: http://eslint.org/docs/rules/

            propType "forceRing" is not required, but has no corresponding defaultProp declaration.
            Open

                forceRing: PropTypes.bool

            For more information visit Source: http://eslint.org/docs/rules/

            Do not use findDOMNode
            Open

                  ReactDOM.findDOMNode(this.refs.lng).value = nextProps.map.lng

            For more information visit Source: http://eslint.org/docs/rules/

            Using this.refs is deprecated.
            Open

                  lng: parseFloat(ReactDOM.findDOMNode(this.refs.lng).value.trim())

            For more information visit Source: http://eslint.org/docs/rules/

            Using this.refs is deprecated.
            Open

                  this.refs.regForm.validate()

            For more information visit Source: http://eslint.org/docs/rules/

            Using this.refs is deprecated.
            Open

                  ReactDOM.findDOMNode(this.refs.lng).value = centerFixed.lng()

            For more information visit Source: http://eslint.org/docs/rules/

            Do not use findDOMNode
            Open

                const address = ReactDOM.findDOMNode(this.refs.place).value.trim()

            For more information visit Source: http://eslint.org/docs/rules/

            Using this.refs is deprecated.
            Open

                const address = ReactDOM.findDOMNode(this.refs.place).value.trim()

            For more information visit Source: http://eslint.org/docs/rules/

            Empty components are self-closing
            Open

                    <div className="ui hidden divider"></div>

            For more information visit Source: http://eslint.org/docs/rules/

            Prop type object is forbidden
            Open

                upload: PropTypes.object.isRequired,

            For more information visit Source: http://eslint.org/docs/rules/

            Using this.refs is deprecated.
            Open

                if (this.refs.lat) {

            For more information visit Source: http://eslint.org/docs/rules/

            Do not use findDOMNode
            Open

                  place: ReactDOM.findDOMNode(this.refs.place).value.trim(),

            For more information visit Source: http://eslint.org/docs/rules/

            Using this.refs is deprecated.
            Open

                  place: ReactDOM.findDOMNode(this.refs.place).value.trim(),

            For more information visit Source: http://eslint.org/docs/rules/

            Empty components are self-closing
            Open

                              <i className="add icon"></i>

            For more information visit Source: http://eslint.org/docs/rules/

            The closing bracket must be aligned with the line containing the opening tag (expected column 19 on the next line)
            Open

                                defaultValue={this.props.map.lat} />

            For more information visit Source: http://eslint.org/docs/rules/

            Prop type object is forbidden
            Open

                regOptions: PropTypes.object.isRequired,

            For more information visit Source: http://eslint.org/docs/rules/

            Using this.refs is deprecated.
            Open

                  ReactDOM.findDOMNode(this.refs.lat).value = nextProps.map.lat

            For more information visit Source: http://eslint.org/docs/rules/

            Using this.refs is deprecated.
            Open

                  ReactDOM.findDOMNode(this.refs.lng).value = nextProps.map.lng

            For more information visit Source: http://eslint.org/docs/rules/

            Do not use findDOMNode
            Open

                  ReactDOM.findDOMNode(this.refs.lng).value = centerFixed.lng()

            For more information visit Source: http://eslint.org/docs/rules/

            defaultPropTypes should be placed before constructor
            Open

              static defaultPropTypes = {

            For more information visit Source: http://eslint.org/docs/rules/

            The closing bracket must be aligned with the line containing the opening tag (expected column 17 on the next line)
            Open

                              onChange={this.handleRegChange}/>

            For more information visit Source: http://eslint.org/docs/rules/

            Do not use findDOMNode
            Open

                  ReactDOM.findDOMNode(this.refs.lat).value = centerFixed.lat()

            For more information visit Source: http://eslint.org/docs/rules/

            Using this.refs is deprecated.
            Open

                  const ocname = ReactDOM.findDOMNode(this.refs.ocname).value

            For more information visit Source: http://eslint.org/docs/rules/

            There should be no space after '{'
            Open

                        selectedIndex={ this.state.tabIndex || 0}>

            For more information visit Source: http://eslint.org/docs/rules/

            Using string literals in ref attributes is deprecated.
            Open

                                ref="lng"

            For more information visit Source: http://eslint.org/docs/rules/

            Using this.refs is deprecated.
            Open

                  ReactDOM.findDOMNode(this.refs.lat).value = centerFixed.lat()

            For more information visit Source: http://eslint.org/docs/rules/

            Using string literals in ref attributes is deprecated.
            Open

                        ref="tabs"

            For more information visit Source: http://eslint.org/docs/rules/

            Using string literals in ref attributes is deprecated.
            Open

                                ref="ocname"

            For more information visit Source: http://eslint.org/docs/rules/

            'setImageFileName' PropType is defined but prop is never used
            Open

                setImageFileName: PropTypes.func.isRequired,

            For more information visit Source: http://eslint.org/docs/rules/

            Using this.refs is deprecated.
            Open

                  const openDate = this.refs.regForm.getComponent(path).getValue()

            For more information visit Source: http://eslint.org/docs/rules/

            The closing bracket must be aligned with the line containing the opening tag (expected column 19 on the next line)
            Open

                                } />

            For more information visit Source: http://eslint.org/docs/rules/

            The closing bracket must be aligned with the line containing the opening tag (expected column 23 on the next line)
            Open

                                    onClick={this.handleGeo}>

            For more information visit Source: http://eslint.org/docs/rules/

            Using this.refs is deprecated.
            Open

                  const startDate = this.refs.form.getComponent(path).getValue()

            For more information visit Source: http://eslint.org/docs/rules/

            Using this.refs is deprecated.
            Open

                  const closeDate = this.refs.regForm.getComponent(['closeDate']).getValue()

            For more information visit Source: http://eslint.org/docs/rules/

            A space is required before closing bracket
            Open

                              onChange={this.handleChange}/>

            For more information visit Source: http://eslint.org/docs/rules/

            Using this.refs is deprecated.
            Open

                  const endDate = this.refs.form.getComponent(['endDate']).getValue()

            For more information visit Source: http://eslint.org/docs/rules/

            Prop type object is forbidden
            Open

                post: PropTypes.object.isRequired,

            For more information visit Source: http://eslint.org/docs/rules/

            Using string literals in ref attributes is deprecated.
            Open

                        ref="gmap"

            For more information visit Source: http://eslint.org/docs/rules/

            The closing bracket must be aligned with the line containing the opening tag (expected column 19)
            Open

                                />

            For more information visit Source: http://eslint.org/docs/rules/

            Using string literals in ref attributes is deprecated.
            Open

                              ref="regForm"

            For more information visit Source: http://eslint.org/docs/rules/

            JSX not allowed in files with extension '.js'
            Open

                  <div className="ui small warning message">

            For more information visit Source: http://eslint.org/docs/rules/

            A space is required before closing bracket
            Open

                              onChange={this.handleRegChange}/>

            For more information visit Source: http://eslint.org/docs/rules/

            The closing bracket must be aligned with the line containing the opening tag (expected column 15 on the next line)
            Open

                            onSubmit={this.handleSubmit}>

            For more information visit Source: http://eslint.org/docs/rules/

            The closing bracket must be aligned with the line containing the opening tag (expected column 19 on the next line)
            Open

                                onClick={this.handleSearch}>

            For more information visit Source: http://eslint.org/docs/rules/

            The closing bracket must be aligned with the line containing the opening tag (expected column 17 on the next line)
            Open

                              onChange={this.handleChange}/>

            For more information visit Source: http://eslint.org/docs/rules/

            Empty components are self-closing
            Open

                                    <i className="large location arrow icon"></i>

            For more information visit Source: http://eslint.org/docs/rules/

            The closing bracket must be aligned with the line containing the opening tag (expected column 15 on the next line)
            Open

                            transitionLeaveTimeout={500}>

            For more information visit Source: http://eslint.org/docs/rules/

            Using string literals in ref attributes is deprecated.
            Open

                                ref="lat"

            For more information visit Source: http://eslint.org/docs/rules/

            Prop type object is forbidden
            Open

                params: PropTypes.object,

            For more information visit Source: http://eslint.org/docs/rules/

            propType "params" is not required, but has no corresponding defaultProp declaration.
            Open

                params: PropTypes.object,

            For more information visit Source: http://eslint.org/docs/rules/

            Using this.refs is deprecated.
            Open

                  lat: parseFloat(ReactDOM.findDOMNode(this.refs.lat).value.trim()),

            For more information visit Source: http://eslint.org/docs/rules/

            Using this.refs is deprecated.
            Open

                if (this.refs.lat) {

            For more information visit Source: http://eslint.org/docs/rules/

            Using this.refs is deprecated.
            Open

                if (this.refs.lng) {

            For more information visit Source: http://eslint.org/docs/rules/

            There should be no space after '{'
            Open

                        <TabList selectedIndex={ this.state.tabIndex || 0}>

            For more information visit Source: http://eslint.org/docs/rules/

            Using string literals in ref attributes is deprecated.
            Open

                              ref="form"

            For more information visit Source: http://eslint.org/docs/rules/

            Do not use findDOMNode
            Open

                  lng: parseFloat(ReactDOM.findDOMNode(this.refs.lng).value.trim())

            For more information visit Source: http://eslint.org/docs/rules/

            Using this.refs is deprecated.
            Open

                const value = this.refs.form.getValue()

            For more information visit Source: http://eslint.org/docs/rules/

            The closing bracket must be aligned with the line containing the opening tag (expected column 11 on the next line)
            Open

                        selectedIndex={ this.state.tabIndex || 0}>

            For more information visit Source: http://eslint.org/docs/rules/

            A space is required before closing bracket
            Open

                              onChange={this.handleRegChange}/>

            For more information visit Source: http://eslint.org/docs/rules/

            Do not use findDOMNode
            Open

                  const ocname = ReactDOM.findDOMNode(this.refs.ocname).value

            For more information visit Source: http://eslint.org/docs/rules/

            The closing bracket must be aligned with the line containing the opening tag (expected column 17 on the next line)
            Open

                              disabled={this.state.submited}>

            For more information visit Source: http://eslint.org/docs/rules/

            Property should be placed on a new line
            Open

                              <input type="text"

            For more information visit Source: http://eslint.org/docs/rules/

            Prop type object is forbidden
            Open

                options: PropTypes.object.isRequired,

            For more information visit Source: http://eslint.org/docs/rules/

            A space is required before closing bracket
            Open

                              onChange={this.handleChange}/>

            For more information visit Source: http://eslint.org/docs/rules/

            The closing bracket must be aligned with the line containing the opening tag (expected column 15 on the next line)
            Open

                            onSubmit={this.handleMapSubmit}>

            For more information visit Source: http://eslint.org/docs/rules/

            The closing bracket must be aligned with the line containing the opening tag (expected column 23 on the next line)
            Open

                                    className="ui large orange button">

            For more information visit Source: http://eslint.org/docs/rules/

            There are no issues that match your filters.

            Category
            Status