faceyspacey/babel-plugin-dual-import

View on GitHub

Showing 10 of 10 total issues

Function exports has 46 lines of code (exceeds 25 allowed). Consider refactoring.
Open

module.exports = function(chunkName) {
  var href = getHref(chunkName)
  if (!href) {
    if (process.env.NODE_ENV === 'development') {
      if (typeof window === 'undefined' || !window.__CSS_CHUNKS__) {
Severity: Minor
Found in importCss.js - About 1 hr to fix

    Function exports has a Cognitive Complexity of 10 (exceeds 5 allowed). Consider refactoring.
    Open

    module.exports = function ({ types: t, template }) {
      const visited = Symbol('visited')
      const importCssId = Symbol('importCssId')
      const loadTemplate = template('Promise.all([IMPORT, IMPORT_CSS(MODULE)]).then(proms => proms[0])')
      const getImportArgPath = p => p.parentPath.get('arguments')[0]
    Severity: Minor
    Found in index.js - About 1 hr 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 exports has a Cognitive Complexity of 8 (exceeds 5 allowed). Consider refactoring.
    Open

    module.exports = function(chunkName) {
      var href = getHref(chunkName)
      if (!href) {
        if (process.env.NODE_ENV === 'development') {
          if (typeof window === 'undefined' || !window.__CSS_CHUNKS__) {
    Severity: Minor
    Found in importCss.js - About 45 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 an assignment or function call and instead saw an expression.
    Open

      output.code /*? */
    Severity: Minor
    Found in __tests__/index.js by eslint

    Disallow Unused Expressions (no-unused-expressions)

    An unused expression which has no effect on the state of the program indicates a logic error.

    For example, n + 1; is not a syntax error, but it might be a typing mistake where a programmer meant an assignment statement n += 1; instead.

    Rule Details

    This rule aims to eliminate unused expressions which have no effect on the state of the program.

    This rule does not apply to function calls or constructor calls with the new operator, because they could have side effects on the state of the program.

    var i = 0;
    function increment() { i += 1; }
    increment(); // return value is unused, but i changed as a side effect
    
    var nThings = 0;
    function Thing() { nThings += 1; }
    new Thing(); // constructed object is unused, but nThings changed as a side effect

    This rule does not apply to directives (which are in the form of literal string expressions such as "use strict"; at the beginning of a script, module, or function).

    Sequence expressions (those using a comma, such as a = 1, b = 2) are always considered unused unless their return value is assigned or used in a condition evaluation, or a function call is made with the sequence expression value.

    Options

    This rule, in its default state, does not require any arguments. If you would like to enable one or more of the following you may pass an object with the options set as follows:

    • allowShortCircuit set to true will allow you to use short circuit evaluations in your expressions (Default: false).
    • allowTernary set to true will enable you to use ternary operators in your expressions similarly to short circuit evaluations (Default: false).
    • allowTaggedTemplates set to true will enable you to use tagged template literals in your expressions (Default: false).

    These options allow unused expressions only if all of the code paths either directly change the state (for example, assignment statement) or could have side effects (for example, function call).

    Examples of incorrect code for the default { "allowShortCircuit": false, "allowTernary": false } options:

    /*eslint no-unused-expressions: "error"*/
    
    0
    
    if(0) 0
    
    {0}
    
    f(0), {}
    
    a && b()
    
    a, b()
    
    c = a, b;
    
    a() && function namedFunctionInExpressionContext () {f();}
    
    (function anIncompleteIIFE () {});
    
    injectGlobal`body{ color: red; }`

    Note that one or more string expression statements (with or without semi-colons) will only be considered as unused if they are not in the beginning of a script, module, or function (alone and uninterrupted by other statements). Otherwise, they will be treated as part of a "directive prologue", a section potentially usable by JavaScript engines. This includes "strict mode" directives.

    "use strict";
    "use asm"
    "use stricter";
    "use babel"
    "any other strings like this in the prologue";

    Examples of correct code for the default { "allowShortCircuit": false, "allowTernary": false } options:

    /*eslint no-unused-expressions: "error"*/
    
    {} // In this context, this is a block statement, not an object literal
    
    {myLabel: someVar} // In this context, this is a block statement with a label and expression, not an object literal
    
    function namedFunctionDeclaration () {}
    
    (function aGenuineIIFE () {}());
    
    f()
    
    a = 0
    
    new C
    
    delete a.b
    
    void a

    allowShortCircuit

    Examples of incorrect code for the { "allowShortCircuit": true } option:

    /*eslint no-unused-expressions: ["error", { "allowShortCircuit": true }]*/
    
    a || b

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

    /*eslint no-unused-expressions: ["error", { "allowShortCircuit": true }]*/
    
    a && b()
    a() || (b = c)

    allowTernary

    Examples of incorrect code for the { "allowTernary": true } option:

    /*eslint no-unused-expressions: ["error", { "allowTernary": true }]*/
    
    a ? b : 0
    a ? b : c()

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

    /*eslint no-unused-expressions: ["error", { "allowTernary": true }]*/
    
    a ? b() : c()
    a ? (b = c) : d()

    allowShortCircuit and allowTernary

    Examples of correct code for the { "allowShortCircuit": true, "allowTernary": true } options:

    /*eslint no-unused-expressions: ["error", { "allowShortCircuit": true, "allowTernary": true }]*/
    
    a ? b() || (c = d) : e()

    allowTaggedTemplates

    Examples of incorrect code for the { "allowTaggedTemplates": true } option:

    /*eslint no-unused-expressions: ["error", { "allowTaggedTemplates": true }]*/
    
    `some untagged template string`;

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

    /*eslint no-unused-expressions: ["error", { "allowTaggedTemplates": true }]*/
    
    tag`some tagged template string`;

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

    Unexpected require().
    Open

          const conf = require('./package.json').jest
    Severity: Minor
    Found in wallaby.js by eslint

    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/

    Unexpected template string expression.
    Open

        'dynamic import (string template)': 'import(`./base/${page}`)',
    Severity: Minor
    Found in __tests__/index.js by eslint

    Disallow template literal placeholder syntax in regular strings (no-template-curly-in-string)

    ECMAScript 6 allows programmers to create strings containing variable or expressions using template literals, instead of string concatenation, by writing expressions like ${variable} between two backtick quotes (`). It can be easy to use the wrong quotes when wanting to use template literals, by writing "${variable}", and end up with the literal value "${variable}" instead of a string containing the value of the injected expressions.

    Rule Details

    This rule aims to warn when a regular string contains what looks like a template literal placeholder. It will warn when it finds a string containing the template literal place holder (${something}) that uses either " or ' for the quotes.

    Examples

    Examples of incorrect code for this rule:

    /*eslint no-template-curly-in-string: "error"*/
    "Hello ${name}!";
    'Hello ${name}!';
    "Time: ${12 * 60 * 60 * 1000}";

    Examples of correct code for this rule:

    /*eslint no-template-curly-in-string: "error"*/
    `Hello ${name}!`;
    `Time: ${12 * 60 * 60 * 1000}`;
    
    templateFunction`Hello ${name}`;

    When Not To Use It

    This rule should not be used in ES3/5 environments. Source: http://eslint.org/docs/rules/

    Unexpected template string expression.
    Open

          'import(`../../base/${page}`)'
    Severity: Minor
    Found in __tests__/index.js by eslint

    Disallow template literal placeholder syntax in regular strings (no-template-curly-in-string)

    ECMAScript 6 allows programmers to create strings containing variable or expressions using template literals, instead of string concatenation, by writing expressions like ${variable} between two backtick quotes (`). It can be easy to use the wrong quotes when wanting to use template literals, by writing "${variable}", and end up with the literal value "${variable}" instead of a string containing the value of the injected expressions.

    Rule Details

    This rule aims to warn when a regular string contains what looks like a template literal placeholder. It will warn when it finds a string containing the template literal place holder (${something}) that uses either " or ' for the quotes.

    Examples

    Examples of incorrect code for this rule:

    /*eslint no-template-curly-in-string: "error"*/
    "Hello ${name}!";
    'Hello ${name}!';
    "Time: ${12 * 60 * 60 * 1000}";

    Examples of correct code for this rule:

    /*eslint no-template-curly-in-string: "error"*/
    `Hello ${name}!`;
    `Time: ${12 * 60 * 60 * 1000}`;
    
    templateFunction`Hello ${name}`;

    When Not To Use It

    This rule should not be used in ES3/5 environments. Source: http://eslint.org/docs/rules/

    Unexpected unnamed function.
    Open

    module.exports = function ({ types: t, template }) {
    Severity: Minor
    Found in index.js by eslint

    Require or disallow named function expressions (func-names)

    A pattern that's becoming more common is to give function expressions names to aid in debugging. For example:

    Foo.prototype.bar = function bar() {};

    Adding the second bar in the above example is optional. If you leave off the function name then when the function throws an exception you are likely to get something similar to anonymous function in the stack trace. If you provide the optional name for a function expression then you will get the name of the function expression in the stack trace.

    Rule Details

    This rule can enforce or disallow the use of named function expressions.

    Options

    This rule has a string option:

    • "always" (default) requires function expressions to have a name
    • "as-needed" requires function expressions to have a name, if the name cannot be assigned automatically in an ES6 environment
    • "never" disallows named function expressions, except in recursive functions, where a name is needed

    always

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

    /*eslint func-names: ["error", "always"]*/
    
    Foo.prototype.bar = function() {};
    
    (function() {
        // ...
    }())

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

    /*eslint func-names: ["error", "always"]*/
    
    Foo.prototype.bar = function bar() {};
    
    (function bar() {
        // ...
    }())

    as-needed

    ECMAScript 6 introduced a name property on all functions. The value of name is determined by evaluating the code around the function to see if a name can be inferred. For example, a function assigned to a variable will automatically have a name property equal to the name of the variable. The value of name is then used in stack traces for easier debugging.

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

    /*eslint func-names: ["error", "as-needed"]*/
    
    Foo.prototype.bar = function() {};
    
    (function() {
        // ...
    }())

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

    /*eslint func-names: ["error", "as-needed"]*/
    
    var bar = function() {};
    
    (function bar() {
        // ...
    }())

    never

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

    /*eslint func-names: ["error", "never"]*/
    
    Foo.prototype.bar = function bar() {};
    
    (function bar() {
        // ...
    }())

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

    /*eslint func-names: ["error", "never"]*/
    
    Foo.prototype.bar = function() {};
    
    (function() {
        // ...
    }())

    Further Reading

    Compatibility

    Unexpected template string expression.
    Open

          'import(`./${page}`)',
    Severity: Minor
    Found in __tests__/index.js by eslint

    Disallow template literal placeholder syntax in regular strings (no-template-curly-in-string)

    ECMAScript 6 allows programmers to create strings containing variable or expressions using template literals, instead of string concatenation, by writing expressions like ${variable} between two backtick quotes (`). It can be easy to use the wrong quotes when wanting to use template literals, by writing "${variable}", and end up with the literal value "${variable}" instead of a string containing the value of the injected expressions.

    Rule Details

    This rule aims to warn when a regular string contains what looks like a template literal placeholder. It will warn when it finds a string containing the template literal place holder (${something}) that uses either " or ' for the quotes.

    Examples

    Examples of incorrect code for this rule:

    /*eslint no-template-curly-in-string: "error"*/
    "Hello ${name}!";
    'Hello ${name}!';
    "Time: ${12 * 60 * 60 * 1000}";

    Examples of correct code for this rule:

    /*eslint no-template-curly-in-string: "error"*/
    `Hello ${name}!`;
    `Time: ${12 * 60 * 60 * 1000}`;
    
    templateFunction`Hello ${name}`;

    When Not To Use It

    This rule should not be used in ES3/5 environments. Source: http://eslint.org/docs/rules/

    Unexpected template string expression.
    Open

      const input = 'import(`../async/${page}`);\n\nimport("../async/Foo.js");\n\nimport(`../async/page`);'
    Severity: Minor
    Found in __tests__/index.js by eslint

    Disallow template literal placeholder syntax in regular strings (no-template-curly-in-string)

    ECMAScript 6 allows programmers to create strings containing variable or expressions using template literals, instead of string concatenation, by writing expressions like ${variable} between two backtick quotes (`). It can be easy to use the wrong quotes when wanting to use template literals, by writing "${variable}", and end up with the literal value "${variable}" instead of a string containing the value of the injected expressions.

    Rule Details

    This rule aims to warn when a regular string contains what looks like a template literal placeholder. It will warn when it finds a string containing the template literal place holder (${something}) that uses either " or ' for the quotes.

    Examples

    Examples of incorrect code for this rule:

    /*eslint no-template-curly-in-string: "error"*/
    "Hello ${name}!";
    'Hello ${name}!';
    "Time: ${12 * 60 * 60 * 1000}";

    Examples of correct code for this rule:

    /*eslint no-template-curly-in-string: "error"*/
    `Hello ${name}!`;
    `Time: ${12 * 60 * 60 * 1000}`;
    
    templateFunction`Hello ${name}`;

    When Not To Use It

    This rule should not be used in ES3/5 environments. Source: http://eslint.org/docs/rules/

    Severity
    Category
    Status
    Source
    Language