symphonyoss/hubot-symphony

View on GitHub
test/nock-server.js

Summary

Maintainability
D
2 days
Test Coverage

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

  constructor(args: ConstructorArgsType) {
    super();

    this.messages = [];
    this.host = args.host;
Severity: Major
Found in test/nock-server.js - About 1 day to fix

    File nock-server.js has 381 lines of code (exceeds 250 allowed). Consider refactoring.
    Open

    /**
     *    Copyright 2017 Jon Freedman
     *
     *    Licensed under the Apache License, Version 2.0 (the "License");
     *    you may not use this file except in compliance with the License.
    Severity: Minor
    Found in test/nock-server.js - About 5 hrs to fix

      Line 26 exceeds the maximum line length of 120.
      Open

      import type {EchoType, SymphonyMessageV2Type, SymphonyMessageV4Type, RoomInfoType, RoomInfoAlternateType} from '../src/symphony';
      Severity: Minor
      Found in test/nock-server.js by eslint

      enforce a maximum line length (max-len)

      Very long lines of code in any language can be difficult to read. In order to aid in readability and maintainability many coders have developed a convention to limit lines of code to X number of characters (traditionally 80 characters).

      var foo = { "bar": "This is a bar.", "baz": { "qux": "This is a qux" }, "difficult": "to read" }; // very long

      Rule Details

      This rule enforces a maximum line length to increase code readability and maintainability. The length of a line is defined as the number of Unicode characters in the line.

      Options

      This rule has a number or object option:

      • "code" (default 80) enforces a maximum line length
      • "tabWidth" (default 4) specifies the character width for tab characters
      • "comments" enforces a maximum line length for comments; defaults to value of code
      • "ignorePattern" ignores lines matching a regular expression; can only match a single line and need to be double escaped when written in YAML or JSON
      • "ignoreComments": true ignores all trailing comments and comments on their own line
      • "ignoreTrailingComments": true ignores only trailing comments
      • "ignoreUrls": true ignores lines that contain a URL
      • "ignoreStrings": true ignores lines that contain a double-quoted or single-quoted string
      • "ignoreTemplateLiterals": true ignores lines that contain a template literal
      • "ignoreRegExpLiterals": true ignores lines that contain a RegExp literal

      code

      Examples of incorrect code for this rule with the default { "code": 80 } option:

      /*eslint max-len: ["error", 80]*/
      
      var foo = { "bar": "This is a bar.", "baz": { "qux": "This is a qux" }, "difficult": "to read" };

      Examples of correct code for this rule with the default { "code": 80 } option:

      /*eslint max-len: ["error", 80]*/
      
      var foo = {
        "bar": "This is a bar.",
        "baz": { "qux": "This is a qux" },
        "easier": "to read"
      };

      tabWidth

      Examples of incorrect code for this rule with the default { "tabWidth": 4 } option:

      /*eslint max-len: ["error", 80, 4]*/
      
      \t  \t  var foo = { "bar": "This is a bar.", "baz": { "qux": "This is a qux" } };

      Examples of correct code for this rule with the default { "tabWidth": 4 } option:

      /*eslint max-len: ["error", 80, 4]*/
      
      \t  \t  var foo = {
      \t  \t  \t  \t  "bar": "This is a bar.",
      \t  \t  \t  \t  "baz": { "qux": "This is a qux" }
      \t  \t  };

      comments

      Examples of incorrect code for this rule with the { "comments": 65 } option:

      /*eslint max-len: ["error", { "comments": 65 }]*/
      
      /**
       * This is a comment that violates the maximum line length we have specified
      **/

      ignoreComments

      Examples of correct code for this rule with the { "ignoreComments": true } option:

      /*eslint max-len: ["error", { "ignoreComments": true }]*/
      
      /**
       * This is a really really really really really really really really really long comment
      **/

      ignoreTrailingComments

      Examples of correct code for this rule with the { "ignoreTrailingComments": true } option:

      /*eslint max-len: ["error", { "ignoreTrailingComments": true }]*/
      
      var foo = 'bar'; // This is a really really really really really really really long comment

      ignoreUrls

      Examples of correct code for this rule with the { "ignoreUrls": true } option:

      /*eslint max-len: ["error", { "ignoreUrls": true }]*/
      
      var url = 'https://www.example.com/really/really/really/really/really/really/really/long';

      ignoreStrings

      Examples of correct code for this rule with the { "ignoreStrings": true } option:

      /*eslint max-len: ["error", { "ignoreStrings": true }]*/
      
      var longString = 'this is a really really really really really long string!';

      ignoreTemplateLiterals

      Examples of correct code for this rule with the { "ignoreTemplateLiterals": true } option:

      /*eslint max-len: ["error", { "ignoreTemplateLiterals": true }]*/
      
      var longTemplateLiteral = `this is a really really really really really long template literal!`;

      ignoreRegExpLiterals

      Examples of correct code for this rule with the { "ignoreRegExpLiterals": true } option:

      /*eslint max-len: ["error", { "ignoreRegExpLiterals": true }]*/
      
      var longRegExpLiteral = /this is a really really really really really long regular expression!/;

      ignorePattern

      Examples of correct code for this rule with the { "ignorePattern": true } option:

      /*eslint max-len: ["error", { "ignorePattern": "^\\s*var\\s.+=\\s*require\\s*\\(/" }]*/
      
      var dep = require('really/really/really/really/really/really/really/really/long/module');

      Related Rules

      • [complexity](complexity.md)
      • [max-depth](max-depth.md)
      • [max-nested-callbacks](max-nested-callbacks.md)
      • [max-params](max-params.md)
      • [max-statements](max-statements.md) Source: http://eslint.org/docs/rules/

      Unexpected 'this'.
      Open

                const busboy = new Busboy({headers: this.req.headers});
      Severity: Minor
      Found in test/nock-server.js by eslint

      Disallow this keywords outside of classes or class-like objects. (no-invalid-this)

      Under the strict mode, this keywords outside of classes or class-like objects might be undefined and raise a TypeError.

      Rule Details

      This rule aims to flag usage of this keywords outside of classes or class-like objects.

      Basically this rule checks whether or not a function which are containing this keywords is a constructor or a method.

      This rule judges from following conditions whether or not the function is a constructor:

      • The name of the function starts with uppercase.
      • The function is assigned to a variable which starts with an uppercase letter.
      • The function is a constructor of ES2015 Classes.

      This rule judges from following conditions whether or not the function is a method:

      • The function is on an object literal.
      • The function is assigned to a property.
      • The function is a method/getter/setter of ES2015 Classes. (excepts static methods)

      And this rule allows this keywords in functions below:

      • The call/apply/bind method of the function is called directly.
      • The function is a callback of array methods (such as .forEach()) if thisArg is given.
      • The function has @this tag in its JSDoc comment.

      Otherwise are considered problems.

      This rule applies only in strict mode. With "parserOptions": { "sourceType": "module" } in the ESLint configuration, your code is in strict mode even without a "use strict" directive.

      Examples of incorrect code for this rule in strict mode:

      /*eslint no-invalid-this: "error"*/
      /*eslint-env es6*/
      
      "use strict";
      
      this.a = 0;
      baz(() => this);
      
      (function() {
          this.a = 0;
          baz(() => this);
      })();
      
      function foo() {
          this.a = 0;
          baz(() => this);
      }
      
      var foo = function() {
          this.a = 0;
          baz(() => this);
      };
      
      foo(function() {
          this.a = 0;
          baz(() => this);
      });
      
      obj.foo = () => {
          // `this` of arrow functions is the outer scope's.
          this.a = 0;
      };
      
      var obj = {
          aaa: function() {
              return function foo() {
                  // There is in a method `aaa`, but `foo` is not a method.
                  this.a = 0;
                  baz(() => this);
              };
          }
      };
      
      foo.forEach(function() {
          this.a = 0;
          baz(() => this);
      });

      Examples of correct code for this rule in strict mode:

      /*eslint no-invalid-this: "error"*/
      /*eslint-env es6*/
      
      "use strict";
      
      function Foo() {
          // OK, this is in a legacy style constructor.
          this.a = 0;
          baz(() => this);
      }
      
      class Foo {
          constructor() {
              // OK, this is in a constructor.
              this.a = 0;
              baz(() => this);
          }
      }
      
      var obj = {
          foo: function foo() {
              // OK, this is in a method (this function is on object literal).
              this.a = 0;
          }
      };
      
      var obj = {
          foo() {
              // OK, this is in a method (this function is on object literal).
              this.a = 0;
          }
      };
      
      var obj = {
          get foo() {
              // OK, this is in a method (this function is on object literal).
              return this.a;
          }
      };
      
      var obj = Object.create(null, {
          foo: {value: function foo() {
              // OK, this is in a method (this function is on object literal).
              this.a = 0;
          }}
      });
      
      Object.defineProperty(obj, "foo", {
          value: function foo() {
              // OK, this is in a method (this function is on object literal).
              this.a = 0;
          }
      });
      
      Object.defineProperties(obj, {
          foo: {value: function foo() {
              // OK, this is in a method (this function is on object literal).
              this.a = 0;
          }}
      });
      
      function Foo() {
          this.foo = function foo() {
              // OK, this is in a method (this function assigns to a property).
              this.a = 0;
              baz(() => this);
          };
      }
      
      obj.foo = function foo() {
          // OK, this is in a method (this function assigns to a property).
          this.a = 0;
      };
      
      Foo.prototype.foo = function foo() {
          // OK, this is in a method (this function assigns to a property).
          this.a = 0;
      };
      
      class Foo {
          foo() {
              // OK, this is in a method.
              this.a = 0;
              baz(() => this);
          }
      
          static foo() {
              // OK, this is in a method (static methods also have valid this).
              this.a = 0;
              baz(() => this);
          }
      }
      
      var foo = (function foo() {
          // OK, the `bind` method of this function is called directly.
          this.a = 0;
      }).bind(obj);
      
      foo.forEach(function() {
          // OK, `thisArg` of `.forEach()` is given.
          this.a = 0;
          baz(() => this);
      }, thisArg);
      
      /** @this Foo */
      function foo() {
          // OK, this function has a `@this` tag in its JSDoc comment.
          this.a = 0;
      }

      When Not To Use It

      If you don't want to be notified about usage of this keyword outside of classes or class-like objects, you can safely disable this rule. Source: http://eslint.org/docs/rules/

      'SymphonyCreateMessageV4PayloadType' is defined but never used.
      Open

      type SymphonyCreateMessageV4PayloadType = {
      Severity: Minor
      Found in test/nock-server.js by eslint

      Disallow Unused Variables (no-unused-vars)

      Variables that are declared and not used anywhere in the code are most likely an error due to incomplete refactoring. Such variables take up space in the code and can lead to confusion by readers.

      Rule Details

      This rule is aimed at eliminating unused variables, functions, and parameters of functions.

      A variable is considered to be used if any of the following are true:

      • It represents a function that is called (doSomething())
      • It is read (var y = x)
      • It is passed into a function as an argument (doSomething(x))
      • It is read inside of a function that is passed to another function (doSomething(function() { foo(); }))

      A variable is not considered to be used if it is only ever assigned to (var x = 5) or declared.

      Examples of incorrect code for this rule:

      /*eslint no-unused-vars: "error"*/
      /*global some_unused_var*/
      
      // It checks variables you have defined as global
      some_unused_var = 42;
      
      var x;
      
      // Write-only variables are not considered as used.
      var y = 10;
      y = 5;
      
      // A read for a modification of itself is not considered as used.
      var z = 0;
      z = z + 1;
      
      // By default, unused arguments cause warnings.
      (function(foo) {
          return 5;
      })();
      
      // Unused recursive functions also cause warnings.
      function fact(n) {
          if (n < 2) return 1;
          return n * fact(n - 1);
      }
      
      // When a function definition destructures an array, unused entries from the array also cause warnings.
      function getY([x, y]) {
          return y;
      }

      Examples of correct code for this rule:

      /*eslint no-unused-vars: "error"*/
      
      var x = 10;
      alert(x);
      
      // foo is considered used here
      myFunc(function foo() {
          // ...
      }.bind(this));
      
      (function(foo) {
          return foo;
      })();
      
      var myFunc;
      myFunc = setTimeout(function() {
          // myFunc is considered used
          myFunc();
      }, 50);
      
      // Only the second argument from the descructured array is used.
      function getY([, y]) {
          return y;
      }

      exported

      In environments outside of CommonJS or ECMAScript modules, you may use var to create a global variable that may be used by other scripts. You can use the /* exported variableName */ comment block to indicate that this variable is being exported and therefore should not be considered unused.

      Note that /* exported */ has no effect for any of the following:

      • when the environment is node or commonjs
      • when parserOptions.sourceType is module
      • when ecmaFeatures.globalReturn is true

      The line comment // exported variableName will not work as exported is not line-specific.

      Examples of correct code for /* exported variableName */ operation:

      /* exported global_var */
      
      var global_var = 42;

      Options

      This rule takes one argument which can be a string or an object. The string settings are the same as those of the vars property (explained below).

      By default this rule is enabled with all option for variables and after-used for arguments.

      {
          "rules": {
              "no-unused-vars": ["error", { "vars": "all", "args": "after-used", "ignoreRestSiblings": false }]
          }
      }

      vars

      The vars option has two settings:

      • all checks all variables for usage, including those in the global scope. This is the default setting.
      • local checks only that locally-declared variables are used but will allow global variables to be unused.

      vars: local

      Examples of correct code for the { "vars": "local" } option:

      /*eslint no-unused-vars: ["error", { "vars": "local" }]*/
      /*global some_unused_var */
      
      some_unused_var = 42;

      varsIgnorePattern

      The varsIgnorePattern option specifies exceptions not to check for usage: variables whose names match a regexp pattern. For example, variables whose names contain ignored or Ignored.

      Examples of correct code for the { "varsIgnorePattern": "[iI]gnored" } option:

      /*eslint no-unused-vars: ["error", { "varsIgnorePattern": "[iI]gnored" }]*/
      
      var firstVarIgnored = 1;
      var secondVar = 2;
      console.log(secondVar);

      args

      The args option has three settings:

      • after-used - only the last argument must be used. This allows you, for instance, to have two named parameters to a function and as long as you use the second argument, ESLint will not warn you about the first. This is the default setting.
      • all - all named arguments must be used.
      • none - do not check arguments.

      args: after-used

      Examples of incorrect code for the default { "args": "after-used" } option:

      /*eslint no-unused-vars: ["error", { "args": "after-used" }]*/
      
      // 1 error
      // "baz" is defined but never used
      (function(foo, bar, baz) {
          return bar;
      })();

      Examples of correct code for the default { "args": "after-used" } option:

      /*eslint no-unused-vars: ["error", {"args": "after-used"}]*/
      
      (function(foo, bar, baz) {
          return baz;
      })();

      args: all

      Examples of incorrect code for the { "args": "all" } option:

      /*eslint no-unused-vars: ["error", { "args": "all" }]*/
      
      // 2 errors
      // "foo" is defined but never used
      // "baz" is defined but never used
      (function(foo, bar, baz) {
          return bar;
      })();

      args: none

      Examples of correct code for the { "args": "none" } option:

      /*eslint no-unused-vars: ["error", { "args": "none" }]*/
      
      (function(foo, bar, baz) {
          return bar;
      })();

      ignoreRestSiblings

      The ignoreRestSiblings option is a boolean (default: false). Using a Rest Property it is possible to "omit" properties from an object, but by default the sibling properties are marked as "unused". With this option enabled the rest property's siblings are ignored.

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

      /*eslint no-unused-vars: ["error", { "ignoreRestSiblings": true }]*/
      // 'type' is ignored because it has a rest property sibling.
      var { type, ...coords } = data;

      argsIgnorePattern

      The argsIgnorePattern option specifies exceptions not to check for usage: arguments whose names match a regexp pattern. For example, variables whose names begin with an underscore.

      Examples of correct code for the { "argsIgnorePattern": "^_" } option:

      /*eslint no-unused-vars: ["error", { "argsIgnorePattern": "^_" }]*/
      
      function foo(x, _y) {
          return x + 1;
      }
      foo();

      caughtErrors

      The caughtErrors option is used for catch block arguments validation.

      It has two settings:

      • none - do not check error objects. This is the default setting.
      • all - all named arguments must be used.

      caughtErrors: none

      Not specifying this rule is equivalent of assigning it to none.

      Examples of correct code for the { "caughtErrors": "none" } option:

      /*eslint no-unused-vars: ["error", { "caughtErrors": "none" }]*/
      
      try {
          //...
      } catch (err) {
          console.error("errors");
      }

      caughtErrors: all

      Examples of incorrect code for the { "caughtErrors": "all" } option:

      /*eslint no-unused-vars: ["error", { "caughtErrors": "all" }]*/
      
      // 1 error
      // "err" is defined but never used
      try {
          //...
      } catch (err) {
          console.error("errors");
      }

      caughtErrorsIgnorePattern

      The caughtErrorsIgnorePattern option specifies exceptions not to check for usage: catch arguments whose names match a regexp pattern. For example, variables whose names begin with a string 'ignore'.

      Examples of correct code for the { "caughtErrorsIgnorePattern": "^ignore" } option:

      /*eslint no-unused-vars: ["error", { "caughtErrorsIgnorePattern": "^ignore" }]*/
      
      try {
          //...
      } catch (ignoreErr) {
          console.error("errors");
      }

      When Not To Use It

      If you don't want to be notified about unused variables or function arguments, you can safely turn this rule off. Source: http://eslint.org/docs/rules/

      'SymphonyMessageV4Type' is defined but never used.
      Open

      import type {EchoType, SymphonyMessageV2Type, SymphonyMessageV4Type, RoomInfoType, RoomInfoAlternateType} from '../src/symphony';
      Severity: Minor
      Found in test/nock-server.js by eslint

      Disallow Unused Variables (no-unused-vars)

      Variables that are declared and not used anywhere in the code are most likely an error due to incomplete refactoring. Such variables take up space in the code and can lead to confusion by readers.

      Rule Details

      This rule is aimed at eliminating unused variables, functions, and parameters of functions.

      A variable is considered to be used if any of the following are true:

      • It represents a function that is called (doSomething())
      • It is read (var y = x)
      • It is passed into a function as an argument (doSomething(x))
      • It is read inside of a function that is passed to another function (doSomething(function() { foo(); }))

      A variable is not considered to be used if it is only ever assigned to (var x = 5) or declared.

      Examples of incorrect code for this rule:

      /*eslint no-unused-vars: "error"*/
      /*global some_unused_var*/
      
      // It checks variables you have defined as global
      some_unused_var = 42;
      
      var x;
      
      // Write-only variables are not considered as used.
      var y = 10;
      y = 5;
      
      // A read for a modification of itself is not considered as used.
      var z = 0;
      z = z + 1;
      
      // By default, unused arguments cause warnings.
      (function(foo) {
          return 5;
      })();
      
      // Unused recursive functions also cause warnings.
      function fact(n) {
          if (n < 2) return 1;
          return n * fact(n - 1);
      }
      
      // When a function definition destructures an array, unused entries from the array also cause warnings.
      function getY([x, y]) {
          return y;
      }

      Examples of correct code for this rule:

      /*eslint no-unused-vars: "error"*/
      
      var x = 10;
      alert(x);
      
      // foo is considered used here
      myFunc(function foo() {
          // ...
      }.bind(this));
      
      (function(foo) {
          return foo;
      })();
      
      var myFunc;
      myFunc = setTimeout(function() {
          // myFunc is considered used
          myFunc();
      }, 50);
      
      // Only the second argument from the descructured array is used.
      function getY([, y]) {
          return y;
      }

      exported

      In environments outside of CommonJS or ECMAScript modules, you may use var to create a global variable that may be used by other scripts. You can use the /* exported variableName */ comment block to indicate that this variable is being exported and therefore should not be considered unused.

      Note that /* exported */ has no effect for any of the following:

      • when the environment is node or commonjs
      • when parserOptions.sourceType is module
      • when ecmaFeatures.globalReturn is true

      The line comment // exported variableName will not work as exported is not line-specific.

      Examples of correct code for /* exported variableName */ operation:

      /* exported global_var */
      
      var global_var = 42;

      Options

      This rule takes one argument which can be a string or an object. The string settings are the same as those of the vars property (explained below).

      By default this rule is enabled with all option for variables and after-used for arguments.

      {
          "rules": {
              "no-unused-vars": ["error", { "vars": "all", "args": "after-used", "ignoreRestSiblings": false }]
          }
      }

      vars

      The vars option has two settings:

      • all checks all variables for usage, including those in the global scope. This is the default setting.
      • local checks only that locally-declared variables are used but will allow global variables to be unused.

      vars: local

      Examples of correct code for the { "vars": "local" } option:

      /*eslint no-unused-vars: ["error", { "vars": "local" }]*/
      /*global some_unused_var */
      
      some_unused_var = 42;

      varsIgnorePattern

      The varsIgnorePattern option specifies exceptions not to check for usage: variables whose names match a regexp pattern. For example, variables whose names contain ignored or Ignored.

      Examples of correct code for the { "varsIgnorePattern": "[iI]gnored" } option:

      /*eslint no-unused-vars: ["error", { "varsIgnorePattern": "[iI]gnored" }]*/
      
      var firstVarIgnored = 1;
      var secondVar = 2;
      console.log(secondVar);

      args

      The args option has three settings:

      • after-used - only the last argument must be used. This allows you, for instance, to have two named parameters to a function and as long as you use the second argument, ESLint will not warn you about the first. This is the default setting.
      • all - all named arguments must be used.
      • none - do not check arguments.

      args: after-used

      Examples of incorrect code for the default { "args": "after-used" } option:

      /*eslint no-unused-vars: ["error", { "args": "after-used" }]*/
      
      // 1 error
      // "baz" is defined but never used
      (function(foo, bar, baz) {
          return bar;
      })();

      Examples of correct code for the default { "args": "after-used" } option:

      /*eslint no-unused-vars: ["error", {"args": "after-used"}]*/
      
      (function(foo, bar, baz) {
          return baz;
      })();

      args: all

      Examples of incorrect code for the { "args": "all" } option:

      /*eslint no-unused-vars: ["error", { "args": "all" }]*/
      
      // 2 errors
      // "foo" is defined but never used
      // "baz" is defined but never used
      (function(foo, bar, baz) {
          return bar;
      })();

      args: none

      Examples of correct code for the { "args": "none" } option:

      /*eslint no-unused-vars: ["error", { "args": "none" }]*/
      
      (function(foo, bar, baz) {
          return bar;
      })();

      ignoreRestSiblings

      The ignoreRestSiblings option is a boolean (default: false). Using a Rest Property it is possible to "omit" properties from an object, but by default the sibling properties are marked as "unused". With this option enabled the rest property's siblings are ignored.

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

      /*eslint no-unused-vars: ["error", { "ignoreRestSiblings": true }]*/
      // 'type' is ignored because it has a rest property sibling.
      var { type, ...coords } = data;

      argsIgnorePattern

      The argsIgnorePattern option specifies exceptions not to check for usage: arguments whose names match a regexp pattern. For example, variables whose names begin with an underscore.

      Examples of correct code for the { "argsIgnorePattern": "^_" } option:

      /*eslint no-unused-vars: ["error", { "argsIgnorePattern": "^_" }]*/
      
      function foo(x, _y) {
          return x + 1;
      }
      foo();

      caughtErrors

      The caughtErrors option is used for catch block arguments validation.

      It has two settings:

      • none - do not check error objects. This is the default setting.
      • all - all named arguments must be used.

      caughtErrors: none

      Not specifying this rule is equivalent of assigning it to none.

      Examples of correct code for the { "caughtErrors": "none" } option:

      /*eslint no-unused-vars: ["error", { "caughtErrors": "none" }]*/
      
      try {
          //...
      } catch (err) {
          console.error("errors");
      }

      caughtErrors: all

      Examples of incorrect code for the { "caughtErrors": "all" } option:

      /*eslint no-unused-vars: ["error", { "caughtErrors": "all" }]*/
      
      // 1 error
      // "err" is defined but never used
      try {
          //...
      } catch (err) {
          console.error("errors");
      }

      caughtErrorsIgnorePattern

      The caughtErrorsIgnorePattern option specifies exceptions not to check for usage: catch arguments whose names match a regexp pattern. For example, variables whose names begin with a string 'ignore'.

      Examples of correct code for the { "caughtErrorsIgnorePattern": "^ignore" } option:

      /*eslint no-unused-vars: ["error", { "caughtErrorsIgnorePattern": "^ignore" }]*/
      
      try {
          //...
      } catch (ignoreErr) {
          console.error("errors");
      }

      When Not To Use It

      If you don't want to be notified about unused variables or function arguments, you can safely turn this rule off. Source: http://eslint.org/docs/rules/

      Missing trailing comma.
      Open

                  }
      Severity: Minor
      Found in test/nock-server.js by eslint

      require or disallow trailing commas (comma-dangle)

      Trailing commas in object literals are valid according to the ECMAScript 5 (and ECMAScript 3!) spec. However, IE8 (when not in IE8 document mode) and below will throw an error when it encounters trailing commas in JavaScript.

      var foo = {
          bar: "baz",
          qux: "quux",
      };

      Trailing commas simplify adding and removing items to objects and arrays, since only the lines you are modifying must be touched. Another argument in favor of trailing commas is that it improves the clarity of diffs when an item is added or removed from an object or array:

      Less clear:

      var foo = {
      -    bar: "baz",
      -    qux: "quux"
      +    bar: "baz"
       };

      More clear:

      var foo = {
           bar: "baz",
      -    qux: "quux",
       };

      Rule Details

      This rule enforces consistent use of trailing commas in object and array literals.

      Options

      This rule has a string option or an object option:

      {
          "comma-dangle": ["error", "never"],
          // or
          "comma-dangle": ["error", {
              "arrays": "never",
              "objects": "never",
              "imports": "never",
              "exports": "never",
              "functions": "ignore",
          }]
      }
      • "never" (default) disallows trailing commas
      • "always" requires trailing commas
      • "always-multiline" requires trailing commas when the last element or property is in a different line than the closing ] or } and disallows trailing commas when the last element or property is on the same line as the closing ] or }
      • "only-multiline" allows (but does not require) trailing commas when the last element or property is in a different line than the closing ] or } and disallows trailing commas when the last element or property is on the same line as the closing ] or }

      Trailing commas in function declarations and function calls are valid syntax since ECMAScript 2017; however, the string option does not check these situations for backwards compatibility.

      You can also use an object option to configure this rule for each type of syntax. Each of the following options can be set to "never", "always", "always-multiline", "only-multiline", or "ignore". The default for each option is "never" unless otherwise specified.

      • arrays is for array literals and array patterns of destructuring. (e.g. let [a,] = [1,];)
      • objects is for object literals and object patterns of destructuring. (e.g. let {a,} = {a: 1};)
      • imports is for import declarations of ES Modules. (e.g. import {a,} from "foo";)
      • exports is for export declarations of ES Modules. (e.g. export {a,};)
      • functions is for function declarations and function calls. (e.g. (function(a,){ })(b,);)
        functions is set to "ignore" by default for consistency with the string option.

      never

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

      /*eslint comma-dangle: ["error", "never"]*/
      
      var foo = {
          bar: "baz",
          qux: "quux",
      };
      
      var arr = [1,2,];
      
      foo({
        bar: "baz",
        qux: "quux",
      });

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

      /*eslint comma-dangle: ["error", "never"]*/
      
      var foo = {
          bar: "baz",
          qux: "quux"
      };
      
      var arr = [1,2];
      
      foo({
        bar: "baz",
        qux: "quux"
      });

      always

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

      /*eslint comma-dangle: ["error", "always"]*/
      
      var foo = {
          bar: "baz",
          qux: "quux"
      };
      
      var arr = [1,2];
      
      foo({
        bar: "baz",
        qux: "quux"
      });

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

      /*eslint comma-dangle: ["error", "always"]*/
      
      var foo = {
          bar: "baz",
          qux: "quux",
      };
      
      var arr = [1,2,];
      
      foo({
        bar: "baz",
        qux: "quux",
      });

      always-multiline

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

      /*eslint comma-dangle: ["error", "always-multiline"]*/
      
      var foo = {
          bar: "baz",
          qux: "quux"
      };
      
      var foo = { bar: "baz", qux: "quux", };
      
      var arr = [1,2,];
      
      var arr = [1,
          2,];
      
      var arr = [
          1,
          2
      ];
      
      foo({
        bar: "baz",
        qux: "quux"
      });

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

      /*eslint comma-dangle: ["error", "always-multiline"]*/
      
      var foo = {
          bar: "baz",
          qux: "quux",
      };
      
      var foo = {bar: "baz", qux: "quux"};
      var arr = [1,2];
      
      var arr = [1,
          2];
      
      var arr = [
          1,
          2,
      ];
      
      foo({
        bar: "baz",
        qux: "quux",
      });

      only-multiline

      Examples of incorrect code for this rule with the "only-multiline" option:

      /*eslint comma-dangle: ["error", "only-multiline"]*/
      
      var foo = { bar: "baz", qux: "quux", };
      
      var arr = [1,2,];
      
      var arr = [1,
          2,];

      Examples of correct code for this rule with the "only-multiline" option:

      /*eslint comma-dangle: ["error", "only-multiline"]*/
      
      var foo = {
          bar: "baz",
          qux: "quux",
      };
      
      var foo = {
          bar: "baz",
          qux: "quux"
      };
      
      var foo = {bar: "baz", qux: "quux"};
      var arr = [1,2];
      
      var arr = [1,
          2];
      
      var arr = [
          1,
          2,
      ];
      
      var arr = [
          1,
          2
      ];
      
      foo({
        bar: "baz",
        qux: "quux",
      });
      
      foo({
        bar: "baz",
        qux: "quux"
      });

      functions

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

      /*eslint comma-dangle: ["error", {"functions": "never"}]*/
      
      function foo(a, b,) {
      }
      
      foo(a, b,);
      new foo(a, b,);

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

      /*eslint comma-dangle: ["error", {"functions": "never"}]*/
      
      function foo(a, b) {
      }
      
      foo(a, b);
      new foo(a, b);

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

      /*eslint comma-dangle: ["error", {"functions": "always"}]*/
      
      function foo(a, b) {
      }
      
      foo(a, b);
      new foo(a, b);

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

      /*eslint comma-dangle: ["error", {"functions": "always"}]*/
      
      function foo(a, b,) {
      }
      
      foo(a, b,);
      new foo(a, b,);

      When Not To Use It

      You can turn this rule off if you are not concerned with dangling commas. Source: http://eslint.org/docs/rules/

      Missing semicolon.
      Open

              })
      Severity: Minor
      Found in test/nock-server.js by eslint

      require or disallow semicolons instead of ASI (semi)

      JavaScript is unique amongst the C-like languages in that it doesn't require semicolons at the end of each statement. In many cases, the JavaScript engine can determine that a semicolon should be in a certain spot and will automatically add it. This feature is known as automatic semicolon insertion (ASI) and is considered one of the more controversial features of JavaScript. For example, the following lines are both valid:

      var name = "ESLint"
      var website = "eslint.org";

      On the first line, the JavaScript engine will automatically insert a semicolon, so this is not considered a syntax error. The JavaScript engine still knows how to interpret the line and knows that the line end indicates the end of the statement.

      In the debate over ASI, there are generally two schools of thought. The first is that we should treat ASI as if it didn't exist and always include semicolons manually. The rationale is that it's easier to always include semicolons than to try to remember when they are or are not required, and thus decreases the possibility of introducing an error.

      However, the ASI mechanism can sometimes be tricky to people who are using semicolons. For example, consider this code:

      return
      {
          name: "ESLint"
      };

      This may look like a return statement that returns an object literal, however, the JavaScript engine will interpret this code as:

      return;
      {
          name: "ESLint";
      }

      Effectively, a semicolon is inserted after the return statement, causing the code below it (a labeled literal inside a block) to be unreachable. This rule and the [no-unreachable](no-unreachable.md) rule will protect your code from such cases.

      On the other side of the argument are those who says that since semicolons are inserted automatically, they are optional and do not need to be inserted manually. However, the ASI mechanism can also be tricky to people who don't use semicolons. For example, consider this code:

      var globalCounter = { }
      
      (function () {
          var n = 0
          globalCounter.increment = function () {
              return ++n
          }
      })()

      In this example, a semicolon will not be inserted after the first line, causing a run-time error (because an empty object is called as if it's a function). The [no-unexpected-multiline](no-unexpected-multiline.md) rule can protect your code from such cases.

      Although ASI allows for more freedom over your coding style, it can also make your code behave in an unexpected way, whether you use semicolons or not. Therefore, it is best to know when ASI takes place and when it does not, and have ESLint protect your code from these potentially unexpected cases. In short, as once described by Isaac Schlueter, a \n character always ends a statement (just like a semicolon) unless one of the following is true:

      1. The statement has an unclosed paren, array literal, or object literal or ends in some other way that is not a valid way to end a statement. (For instance, ending with . or ,.)
      2. The line is -- or ++ (in which case it will decrement/increment the next token.)
      3. It is a for(), while(), do, if(), or else, and there is no {
      4. The next line starts with [, (, +, *, /, -, ,, ., or some other binary operator that can only be found between two tokens in a single expression.

      Rule Details

      This rule enforces consistent use of semicolons.

      Options

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

      String option:

      • "always" (default) requires semicolons at the end of statements
      • "never" disallows semicolons as the end of statements (except to disambiguate statements beginning with [, (, /, +, or -)

      Object option:

      • "omitLastInOneLineBlock": true ignores the last semicolon in a block in which its braces (and therefore the content of the block) are in the same line

      always

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

      /*eslint semi: ["error", "always"]*/
      
      var name = "ESLint"
      
      object.method = function() {
          // ...
      }

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

      /*eslint semi: "error"*/
      
      var name = "ESLint";
      
      object.method = function() {
          // ...
      };

      never

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

      /*eslint semi: ["error", "never"]*/
      
      var name = "ESLint";
      
      object.method = function() {
          // ...
      };

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

      /*eslint semi: ["error", "never"]*/
      
      var name = "ESLint"
      
      object.method = function() {
          // ...
      }
      
      var name = "ESLint"
      
      ;(function() {
          // ...
      })()

      omitLastInOneLineBlock

      Examples of additional correct code for this rule with the "always", { "omitLastInOneLineBlock": true } options:

      /*eslint semi: ["error", "always", { "omitLastInOneLineBlock": true}] */
      
      if (foo) { bar() }
      
      if (foo) { bar(); baz() }

      When Not To Use It

      If you do not want to enforce semicolon usage (or omission) in any particular way, then you can turn this rule off.

      Further Reading

      Related Rules

      • [no-extra-semi](no-extra-semi.md)
      • [no-unexpected-multiline](no-unexpected-multiline.md)
      • [semi-spacing](semi-spacing.md) Source: http://eslint.org/docs/rules/

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

          const keyAuthScope = nock(kmHost)
          /* eslint-enable no-unused-vars */
            .matchHeader('sessionToken', checkHeaderMissing)
            .matchHeader('keyManagerToken', checkHeaderMissing)
            .post('/keyauth/v1/authenticate')
      Severity: Major
      Found in test/nock-server.js and 1 other location - About 1 hr to fix
      test/nock-server.js on lines 168..176

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

      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

          const authScope = nock(sessionAuthHost)
          /* eslint-enable no-unused-vars */
            .matchHeader('sessionToken', checkHeaderMissing)
            .matchHeader('keyManagerToken', checkHeaderMissing)
            .post('/sessionauth/v1/authenticate')
      Severity: Major
      Found in test/nock-server.js and 1 other location - About 1 hr to fix
      test/nock-server.js on lines 179..187

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

      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

          let botUserObject = {
            id: self.realUserId,
            emailAddress: self.botUserEmail,
            firstName: 'Wolfgang Amadeus',
            lastName: 'Mozart',
      Severity: Minor
      Found in test/nock-server.js and 1 other location - About 55 mins to fix
      test/nock-server.js on lines 114..121

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

      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

          let realUserObject = {
            id: self.realUserId,
            emailAddress: self.realUserEmail,
            firstName: 'John',
            lastName: 'Doe',
      Severity: Minor
      Found in test/nock-server.js and 1 other location - About 55 mins to fix
      test/nock-server.js on lines 128..135

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

      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

      There are no issues that match your filters.

      Category
      Status