skeate/Leaflet.timeline

View on GitHub

Showing 26 of 26 total issues

File TimelineSliderControl.ts has 441 lines of code (exceeds 250 allowed). Consider refactoring.
Open

import L from 'leaflet';

interface TimelineSliderControlOptions extends L.ControlOptions {
  /**
   * Minimum time, in ms, for the playback to take. Will almost certainly
Severity: Minor
Found in src/TimelineSliderControl.ts - About 6 hrs to fix

    TimelineSliderControl has 31 functions (exceeds 20 allowed). Consider refactoring.
    Open

    L.TimelineSliderControl = L.Control.extend({
      initialize(options = {}) {
        const defaultOptions: TimelineSliderControlOptions = {
          duration: 10000,
          enableKeyboardControls: false,
    Severity: Minor
    Found in src/TimelineSliderControl.ts - About 3 hrs to fix

      Function _nearestEventTime has a Cognitive Complexity of 12 (exceeds 5 allowed). Consider refactoring.
      Open

        _nearestEventTime(findTime, mode = 1) {
          const times = this._getTimes();
          let retNext = false;
          let lastTime = times[0];
          for (let i = 1; i < times.length; i++) {
      Severity: Minor
      Found in src/TimelineSliderControl.ts - 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 _createDOM has 31 lines of code (exceeds 25 allowed). Consider refactoring.
      Open

        _createDOM() {
          const classes = [
            'leaflet-control-layers',
            'leaflet-control-layers-expanded',
            'leaflet-timeline-control',
      Severity: Minor
      Found in src/TimelineSliderControl.ts - About 1 hr to fix

        Function _makeSlider has 29 lines of code (exceeds 25 allowed). Consider refactoring.
        Open

          _makeSlider(container) {
            const slider = L.DomUtil.create(
              'input',
              'time-slider',
              container
        Severity: Minor
        Found in src/TimelineSliderControl.ts - About 1 hr to fix

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

                  start: (new Date(
                    country.properties.COWSYEAR + '-' +
                    country.properties.COWSMONTH + '-' +
                    country.properties.COWSDAY
                  )).getTime(),
          Severity: Major
          Found in docs/examples/border-parse.js and 1 other location - About 1 hr to fix
          docs/examples/border-parse.js on lines 16..20

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

          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

                  end: (new Date(
                    country.properties.COWEYEAR + '-' +
                    country.properties.COWEMONTH + '-' +
                    country.properties.COWEDAY
                  )).getTime()
          Severity: Major
          Found in docs/examples/border-parse.js and 1 other location - About 1 hr to fix
          docs/examples/border-parse.js on lines 11..15

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

          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

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

            _recalculate() {
              const manualStart = typeof this.options.start !== 'undefined';
              const manualEnd = typeof this.options.end !== 'undefined';
              const duration = this.options.duration;
              let min = Infinity;
          Severity: Minor
          Found in src/TimelineSliderControl.ts - 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

          Missing trailing comma.
          Open

                    country.properties.COWSDAY
          Severity: Minor
          Found in docs/examples/border-parse.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/

          Strings must use singlequote.
          Open

            type: "FeatureCollection",
          Severity: Minor
          Found in docs/examples/border-parse.js by eslint

          enforce the consistent use of either backticks, double, or single quotes (quotes)

          JavaScript allows you to define strings in one of three ways: double quotes, single quotes, and backticks (as of ECMAScript 6). For example:

          /*eslint-env es6*/
          
          var double = "double";
          var single = 'single';
          var backtick = `backtick`;    // ES6 only

          Each of these lines creates a string and, in some cases, can be used interchangeably. The choice of how to define strings in a codebase is a stylistic one outside of template literals (which allow embedded of expressions to be interpreted).

          Many codebases require strings to be defined in a consistent manner.

          Rule Details

          This rule enforces the consistent use of either backticks, double, or single quotes.

          Options

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

          String option:

          • "double" (default) requires the use of double quotes wherever possible
          • "single" requires the use of single quotes wherever possible
          • "backtick" requires the use of backticks wherever possible

          Object option:

          • "avoidEscape": true allows strings to use single-quotes or double-quotes so long as the string contains a quote that would have to be escaped otherwise
          • "allowTemplateLiterals": true allows strings to use backticks

          Deprecated: The object property avoid-escape is deprecated; please use the object property avoidEscape instead.

          double

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

          /*eslint quotes: ["error", "double"]*/
          
          var single = 'single';
          var unescaped = 'a string containing "double" quotes';

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

          /*eslint quotes: ["error", "double"]*/
          /*eslint-env es6*/
          
          var double = "double";
          var backtick = `back\ntick`;  // backticks are allowed due to newline
          var backtick = tag`backtick`; // backticks are allowed due to tag

          single

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

          /*eslint quotes: ["error", "single"]*/
          
          var double = "double";
          var unescaped = "a string containing 'single' quotes";

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

          /*eslint quotes: ["error", "single"]*/
          /*eslint-env es6*/
          
          var single = 'single';
          var backtick = `back${x}tick`; // backticks are allowed due to substitution

          backticks

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

          /*eslint quotes: ["error", "backtick"]*/
          
          var single = 'single';
          var double = "double";
          var unescaped = 'a string containing `backticks`';

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

          /*eslint quotes: ["error", "backtick"]*/
          /*eslint-env es6*/
          
          var backtick = `backtick`;

          avoidEscape

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

          /*eslint quotes: ["error", "double", { "avoidEscape": true }]*/
          
          var single = 'a string containing "double" quotes';

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

          /*eslint quotes: ["error", "single", { "avoidEscape": true }]*/
          
          var double = "a string containing 'single' quotes";

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

          /*eslint quotes: ["error", "backtick", { "avoidEscape": true }]*/
          
          var double = "a string containing `backtick` quotes"

          allowTemplateLiterals

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

          /*eslint quotes: ["error", "double", { "allowTemplateLiterals": true }]*/
          
          var double = "double";
          var double = `double`;

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

          /*eslint quotes: ["error", "single", { "allowTemplateLiterals": true }]*/
          
          var single = 'single';
          var single = `single`;

          When Not To Use It

          If you do not need consistency in your string styles, you can safely disable this rule. Source: http://eslint.org/docs/rules/

          Missing trailing comma.
          Open

                geometry: country.geometry
          Severity: Minor
          Found in docs/examples/border-parse.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/

          Unexpected var, use let or const instead.
          Open

          var fs = require('fs');
          Severity: Minor
          Found in docs/examples/border-parse.js by eslint

          require let or const instead of var (no-var)

          ECMAScript 6 allows programmers to create variables with block scope instead of function scope using the let and const keywords. Block scope is common in many other programming languages and helps programmers avoid mistakes such as:

          var count = people.length;
          var enoughFood = count > sandwiches.length;
          
          if (enoughFood) {
              var count = sandwiches.length; // accidentally overriding the count variable
              console.log("We have " + count + " sandwiches for everyone. Plenty for all!");
          }
          
          // our count variable is no longer accurate
          console.log("We have " + count + " people and " + sandwiches.length + " sandwiches!");

          Rule Details

          This rule is aimed at discouraging the use of var and encouraging the use of const or let instead.

          Examples

          Examples of incorrect code for this rule:

          /*eslint no-var: "error"*/
          
          var x = "y";
          var CONFIG = {};

          Examples of correct code for this rule:

          /*eslint no-var: "error"*/
          /*eslint-env es6*/
          
          let x = "y";
          const CONFIG = {};

          When Not To Use It

          In addition to non-ES6 environments, existing JavaScript projects that are beginning to introduce ES6 into their codebase may not want to apply this rule if the cost of migrating from var to let is too costly. Source: http://eslint.org/docs/rules/

          Unexpected string concatenation.
          Open

          fs.writeFile('borders-parsed.jsonp', 'onLoadData(' + JSON.stringify(parsed_data) + ');');
          Severity: Minor
          Found in docs/examples/border-parse.js by eslint

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

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

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

          Rule Details

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

          Examples

          Examples of incorrect code for this rule:

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

          Examples of correct code for this rule:

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

          When Not To Use It

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

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

          Related Rules

          Unexpected string concatenation.
          Open

                    country.properties.COWSYEAR + '-' +
          Severity: Minor
          Found in docs/examples/border-parse.js by eslint

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

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

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

          Rule Details

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

          Examples

          Examples of incorrect code for this rule:

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

          Examples of correct code for this rule:

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

          When Not To Use It

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

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

          Related Rules

          Unexpected string concatenation.
          Open

                    country.properties.COWEYEAR + '-' +
          Severity: Minor
          Found in docs/examples/border-parse.js by eslint

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

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

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

          Rule Details

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

          Examples

          Examples of incorrect code for this rule:

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

          Examples of correct code for this rule:

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

          When Not To Use It

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

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

          Related Rules

          Missing space before opening brace.
          Open

            features: data.features.map(function(country){
          Severity: Minor
          Found in docs/examples/border-parse.js by eslint

          Require Or Disallow Space Before Blocks (space-before-blocks)

          Consistency is an important part of any style guide. While it is a personal preference where to put the opening brace of blocks, it should be consistent across a whole project. Having an inconsistent style distracts the reader from seeing the important parts of the code.

          Rule Details

          This rule will enforce consistency of spacing before blocks. It is only applied on blocks that don’t begin on a new line.

          • This rule ignores spacing which is between => and a block. The spacing is handled by the arrow-spacing rule.
          • This rule ignores spacing which is between a keyword and a block. The spacing is handled by the keyword-spacing rule.

          Options

          This rule takes one argument. If it is "always" then blocks must always have at least one preceding space. If "never" then all blocks should never have any preceding space. If different spacing is desired for function blocks, keyword blocks and classes, an optional configuration object can be passed as the rule argument to configure the cases separately.

          ( e.g. { "functions": "never", "keywords": "always", "classes": "always" } )

          The default is "always".

          "always"

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

          /*eslint space-before-blocks: "error"*/
          
          if (a){
              b();
          }
          
          function a(){}
          
          for (;;){
              b();
          }
          
          try {} catch(a){}
          
          class Foo{
            constructor(){}
          }

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

          /*eslint space-before-blocks: "error"*/
          
          if (a) {
              b();
          }
          
          if (a) {
              b();
          } else{ /*no error. this is checked by `keyword-spacing` rule.*/
              c();
          }
          
          
          function a() {}
          
          for (;;) {
              b();
          }
          
          try {} catch(a) {}

          "never"

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

          /*eslint space-before-blocks: ["error", "never"]*/
          
          if (a) {
              b();
          }
          
          function a() {}
          
          for (;;) {
              b();
          }
          
          try {} catch(a) {}

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

          /*eslint space-before-blocks: ["error", "never"]*/
          
          if (a){
              b();
          }
          
          function a(){}
          
          for (;;){
              b();
          }
          
          try{} catch(a){}
          
          class Foo{
            constructor(){}
          }

          Examples of incorrect code for this rule when configured { "functions": "never", "keywords": "always", "classes": "never" }:

          /*eslint space-before-blocks: ["error", { "functions": "never", "keywords": "always", "classes": "never" }]*/
          /*eslint-env es6*/
          
          function a() {}
          
          try {} catch(a){}
          
          class Foo{
            constructor() {}
          }

          Examples of correct code for this rule when configured { "functions": "never", "keywords": "always", "classes": "never" }:

          /*eslint space-before-blocks: ["error", { "functions": "never", "keywords": "always", "classes": "never" }]*/
          /*eslint-env es6*/
          
          for (;;) {
            // ...
          }
          
          describe(function(){
            // ...
          });
          
          class Foo {
            constructor(){}
          }

          Examples of incorrect code for this rule when configured { "functions": "always", "keywords": "never", "classes": "never" }:

          /*eslint space-before-blocks: ["error", { "functions": "always", "keywords": "never", "classes": "never" }]*/
          /*eslint-env es6*/
          
          function a(){}
          
          try {} catch(a) {}
          
          class Foo {
            constructor(){}
          }

          Examples of correct code for this rule when configured { "functions": "always", "keywords": "never", "classes": "never" }:

          /*eslint space-before-blocks: ["error", { "functions": "always", "keywords": "never", "classes": "never" }]*/
          /*eslint-env es6*/
          
          if (a){
            b();
          }
          
          var a = function() {}
          
          class Foo{
            constructor() {}
          }

          Examples of incorrect code for this rule when configured { "functions": "never", "keywords": "never", "classes": "always" }:

          /*eslint space-before-blocks: ["error", { "functions": "never", "keywords": "never", "classes": "always" }]*/
          /*eslint-env es6*/
          
          class Foo{
            constructor(){}
          }

          Examples of correct code for this rule when configured { "functions": "never", "keywords": "never", "classes": "always" }:

          /*eslint space-before-blocks: ["error", { "functions": "never", "keywords": "never", "classes": "always" }]*/
          /*eslint-env es6*/
          
          class Foo {
            constructor(){}
          }

          When Not To Use It

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

          Related Rules

          Missing trailing comma.
          Open

                    country.properties.COWEDAY
          Severity: Minor
          Found in docs/examples/border-parse.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/

          Unexpected var, use let or const instead.
          Open

          var parsed_data = {
          Severity: Minor
          Found in docs/examples/border-parse.js by eslint

          require let or const instead of var (no-var)

          ECMAScript 6 allows programmers to create variables with block scope instead of function scope using the let and const keywords. Block scope is common in many other programming languages and helps programmers avoid mistakes such as:

          var count = people.length;
          var enoughFood = count > sandwiches.length;
          
          if (enoughFood) {
              var count = sandwiches.length; // accidentally overriding the count variable
              console.log("We have " + count + " sandwiches for everyone. Plenty for all!");
          }
          
          // our count variable is no longer accurate
          console.log("We have " + count + " people and " + sandwiches.length + " sandwiches!");

          Rule Details

          This rule is aimed at discouraging the use of var and encouraging the use of const or let instead.

          Examples

          Examples of incorrect code for this rule:

          /*eslint no-var: "error"*/
          
          var x = "y";
          var CONFIG = {};

          Examples of correct code for this rule:

          /*eslint no-var: "error"*/
          /*eslint-env es6*/
          
          let x = "y";
          const CONFIG = {};

          When Not To Use It

          In addition to non-ES6 environments, existing JavaScript projects that are beginning to introduce ES6 into their codebase may not want to apply this rule if the cost of migrating from var to let is too costly. Source: http://eslint.org/docs/rules/

          Unexpected function expression.
          Open

            features: data.features.map(function(country){
          Severity: Minor
          Found in docs/examples/border-parse.js by eslint

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

          Arrow functions are suited to callbacks, because:

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

          Rule Details

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

          The following patterns are considered problems:

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

          The following patterns are not considered problems:

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

          Options

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

          allowNamedFunctions

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

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

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

          allowUnboundThis

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

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

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

          When Not To Use It

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

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

          Unexpected var, use let or const instead.
          Open

          var data = require('./borders.json');
          Severity: Minor
          Found in docs/examples/border-parse.js by eslint

          require let or const instead of var (no-var)

          ECMAScript 6 allows programmers to create variables with block scope instead of function scope using the let and const keywords. Block scope is common in many other programming languages and helps programmers avoid mistakes such as:

          var count = people.length;
          var enoughFood = count > sandwiches.length;
          
          if (enoughFood) {
              var count = sandwiches.length; // accidentally overriding the count variable
              console.log("We have " + count + " sandwiches for everyone. Plenty for all!");
          }
          
          // our count variable is no longer accurate
          console.log("We have " + count + " people and " + sandwiches.length + " sandwiches!");

          Rule Details

          This rule is aimed at discouraging the use of var and encouraging the use of const or let instead.

          Examples

          Examples of incorrect code for this rule:

          /*eslint no-var: "error"*/
          
          var x = "y";
          var CONFIG = {};

          Examples of correct code for this rule:

          /*eslint no-var: "error"*/
          /*eslint-env es6*/
          
          let x = "y";
          const CONFIG = {};

          When Not To Use It

          In addition to non-ES6 environments, existing JavaScript projects that are beginning to introduce ES6 into their codebase may not want to apply this rule if the cost of migrating from var to let is too costly. Source: http://eslint.org/docs/rules/

          Severity
          Category
          Status
          Source
          Language