index.js

Summary

Maintainability
C
7 hrs
Test Coverage

Function start has 83 lines of code (exceeds 25 allowed). Consider refactoring.
Open

  start(app, forConsole) {
    let leaf = this;
    leaf._forConsole = forConsole;

    return new Promise((resolve, reject) => {
Severity: Major
Found in index.js - About 3 hrs to fix

    Function startServer has 44 lines of code (exceeds 25 allowed). Consider refactoring.
    Open

          let serverMw = function* startServer(next) {
            logger("require pmx and initalizing");
            require("pmx").init();
    
            yield * next;
    Severity: Minor
    Found in index.js - About 1 hr to fix

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

        constructor(mod, config) {
          super();
          if (!(this instanceof Leaf)) return new Leaf(mod, config);
          logger(`root pwd is ${pathModule.resolve(".")}`);
      
      
      Severity: Minor
      Found in index.js - About 1 hr to fix

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

          constructor(mod, config) {
            super();
            if (!(this instanceof Leaf)) return new Leaf(mod, config);
            logger(`root pwd is ${pathModule.resolve(".")}`);
        
        
        Severity: Minor
        Found in index.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

        Unexpected require().
        Open

                require("pmx").init();
        Severity: Minor
        Found in index.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 require().
        Open

            if (require("util").isFunction(middleware)) {
        Severity: Minor
        Found in index.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/

        Expected an assignment or function call and instead saw an expression.
        Open

              leaf.bootstrap && leaf.bootstrap();
        Severity: Minor
        Found in 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/

        Return statement should not contain assignment.
        Open

            return this._config = config;
        Severity: Minor
        Found in index.js by eslint

        Disallow Assignment in return Statement (no-return-assign)

        One of the interesting, and sometimes confusing, aspects of JavaScript is that assignment can happen at almost any point. Because of this, an errant equals sign can end up causing assignment when the true intent was to do a comparison. This is especially true when using a return statement. For example:

        function doSomething() {
            return foo = bar + 2;
        }

        It is difficult to tell the intent of the return statement here. It's possible that the function is meant to return the result of bar + 2, but then why is it assigning to foo? It's also possible that the intent was to use a comparison operator such as == and that this code is an error.

        Because of this ambiguity, it's considered a best practice to not use assignment in return statements.

        Rule Details

        This rule aims to eliminate assignments from return statements. As such, it will warn whenever an assignment is found as part of return.

        Options

        The rule takes one option, a string, which must contain one of the following values:

        • except-parens (default): Disallow assignments unless they are enclosed in parentheses.
        • always: Disallow all assignments.

        except-parens

        This is the default option. It disallows assignments unless they are enclosed in parentheses.

        Examples of incorrect code for the default "except-parens" option:

        /*eslint no-return-assign: "error"*/
        
        function doSomething() {
            return foo = bar + 2;
        }
        
        function doSomething() {
            return foo += 2;
        }

        Examples of correct code for the default "except-parens" option:

        /*eslint no-return-assign: "error"*/
        
        function doSomething() {
            return foo == bar + 2;
        }
        
        function doSomething() {
            return foo === bar + 2;
        }
        
        function doSomething() {
            return (foo = bar + 2);
        }

        always

        This option disallows all assignments in return statements. All assignments are treated as problems.

        Examples of incorrect code for the "always" option:

        /*eslint no-return-assign: ["error", "always"]*/
        
        function doSomething() {
            return foo = bar + 2;
        }
        
        function doSomething() {
            return foo += 2;
        }
        
        function doSomething() {
            return (foo = bar + 2);
        }

        Examples of correct code for the "always" option:

        /*eslint no-return-assign: ["error", "always"]*/
        
        function doSomething() {
            return foo == bar + 2;
        }
        
        function doSomething() {
            return foo === bar + 2;
        }

        When Not To Use It

        If you want to allow the use of assignment operators in a return statement, then you can safely disable this rule. Source: http://eslint.org/docs/rules/

        There are no issues that match your filters.

        Category
        Status