lib/provider/service.js

Summary

Maintainability
A
3 hrs
Test Coverage

Function request has 66 lines of code (exceeds 25 allowed). Consider refactoring.
Open

  request(method, path, data, headers) {
    logger(`calling general request helper: start`);

    function _request(sc, path, nsp, method, data, headers, resolve, reject) {
      let realPath = "";
Severity: Major
Found in lib/provider/service.js - About 2 hrs to fix

    Function _request has 8 arguments (exceeds 4 allowed). Consider refactoring.
    Open

        function _request(sc, path, nsp, method, data, headers, resolve, reject) {
    Severity: Major
    Found in lib/provider/service.js - About 1 hr to fix

      unnecessary '.call()'.
      Open

            return this.request.call(this, method, path, data, headers);
      Severity: Minor
      Found in lib/provider/service.js by eslint

      Disallow unnecessary .call() and .apply(). (no-useless-call)

      The function invocation can be written by Function.prototype.call() and Function.prototype.apply(). But Function.prototype.call() and Function.prototype.apply() are slower than the normal function invocation.

      Rule Details

      This rule is aimed to flag usage of Function.prototype.call() and Function.prototype.apply() that can be replaced with the normal function invocation.

      Examples of incorrect code for this rule:

      /*eslint no-useless-call: "error"*/
      
      // These are same as `foo(1, 2, 3);`
      foo.call(undefined, 1, 2, 3);
      foo.apply(undefined, [1, 2, 3]);
      foo.call(null, 1, 2, 3);
      foo.apply(null, [1, 2, 3]);
      
      // These are same as `obj.foo(1, 2, 3);`
      obj.foo.call(obj, 1, 2, 3);
      obj.foo.apply(obj, [1, 2, 3]);

      Examples of correct code for this rule:

      /*eslint no-useless-call: "error"*/
      
      // The `this` binding is different.
      foo.call(obj, 1, 2, 3);
      foo.apply(obj, [1, 2, 3]);
      obj.foo.call(null, 1, 2, 3);
      obj.foo.apply(null, [1, 2, 3]);
      obj.foo.call(otherObj, 1, 2, 3);
      obj.foo.apply(otherObj, [1, 2, 3]);
      
      // The argument list is variadic.
      foo.apply(undefined, args);
      foo.apply(null, args);
      obj.foo.apply(obj, args);

      Known Limitations

      This rule compares code statically to check whether or not thisArg is changed. So if the code about thisArg is a dynamic expression, this rule cannot judge correctly.

      Examples of incorrect code for this rule:

      /*eslint no-useless-call: "error"*/
      
      a[i++].foo.call(a[i++], 1, 2, 3);

      Examples of correct code for this rule:

      /*eslint no-useless-call: "error"*/
      
      a[++i].foo.call(a[i], 1, 2, 3);

      When Not To Use It

      If you don't want to be notified about unnecessary .call() and .apply(), you can safely disable this rule. Source: http://eslint.org/docs/rules/

      TODO found
      Open

        // TODO, implement a stream method
      Severity: Minor
      Found in lib/provider/service.js by fixme

      Move the invocation into the parens that contain the function.
      Open

        Service.prototype[method] = (function(method) {
      Severity: Minor
      Found in lib/provider/service.js by eslint

      Require IIFEs to be Wrapped (wrap-iife)

      You can immediately invoke function expressions, but not function declarations. A common technique to create an immediately-invoked function expression (IIFE) is to wrap a function declaration in parentheses. The opening parentheses causes the contained function to be parsed as an expression, rather than a declaration.

      // function expression could be unwrapped
      var x = function () { return { y: 1 };}();
      
      // function declaration must be wrapped
      function () { /* side effects */ }(); // SyntaxError

      Rule Details

      This rule requires all immediately-invoked function expressions to be wrapped in parentheses.

      Options

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

      String option:

      • "outside" enforces always wrapping the call expression. The default is "outside".
      • "inside" enforces always wrapping the function expression.
      • "any" enforces always wrapping, but allows either style.

      Object option:

      • "functionPrototypeMethods": true additionally enforces wrapping function expressions invoked using .call and .apply. The default is false.

      outside

      Examples of incorrect code for the default "outside" option:

      /*eslint wrap-iife: ["error", "outside"]*/
      
      var x = function () { return { y: 1 };}(); // unwrapped
      var x = (function () { return { y: 1 };})(); // wrapped function expression

      Examples of correct code for the default "outside" option:

      /*eslint wrap-iife: ["error", "outside"]*/
      
      var x = (function () { return { y: 1 };}()); // wrapped call expression

      inside

      Examples of incorrect code for the "inside" option:

      /*eslint wrap-iife: ["error", "inside"]*/
      
      var x = function () { return { y: 1 };}(); // unwrapped
      var x = (function () { return { y: 1 };}()); // wrapped call expression

      Examples of correct code for the "inside" option:

      /*eslint wrap-iife: ["error", "inside"]*/
      
      var x = (function () { return { y: 1 };})(); // wrapped function expression

      any

      Examples of incorrect code for the "any" option:

      /*eslint wrap-iife: ["error", "any"]*/
      
      var x = function () { return { y: 1 };}(); // unwrapped

      Examples of correct code for the "any" option:

      /*eslint wrap-iife: ["error", "any"]*/
      
      var x = (function () { return { y: 1 };}()); // wrapped call expression
      var x = (function () { return { y: 1 };})(); // wrapped function expression

      functionPrototypeMethods

      Examples of incorrect code for this rule with the "inside", { "functionPrototypeMethods": true } options:

      /* eslint wrap-iife: [2, "inside", { functionPrototypeMethods: true }] */
      
      var x = function(){ foo(); }()
      var x = (function(){ foo(); }())
      var x = function(){ foo(); }.call(bar)
      var x = (function(){ foo(); }.call(bar))

      Examples of correct code for this rule with the "inside", { "functionPrototypeMethods": true } options:

      /* eslint wrap-iife: [2, "inside", { functionPrototypeMethods: true }] */
      
      var x = (function(){ foo(); })()
      var x = (function(){ foo(); }).call(bar)

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

      There are no issues that match your filters.

      Category
      Status