Language / Framework: JavaScript
Checks: 190+
Categories: Complexity, Style
Channels: stable: ESLint v3.19.0, eslint-1: ESLint v1.10.3, eslint-2: ESLint v2.10.2, eslint-4: ESLint v4.15.0, eslint-5: ESLint v5.7.0

ESLint offers linting, complexity analysis, and style checking for your modern EcmaScript/JavaScript code.

Enable the Plugin

To enable ESLint analysis, add the following to your .codeclimate.yml configuration file:

plugins: 
  eslint:
    enabled: true

More information about the CLI is available in the README here: https://github.com/codeclimate/codeclimate

ESLint Versions

To use ESLint version 2, 4 or 5 for analysis, specify a channel within your .codeclimate.yml configuration file:

plugins: 
  eslint:
    enabled: true
    channel: "eslint-5"
plugins: 
  eslint:
    enabled: true
    channel: "eslint-4"
plugins: 
  eslint:
    enabled: true
    channel: "eslint-2"

Note:

If no channel is specified, ESLint v3.19.0 is used for analysis.

Configure the Plugin

ESLint requires configuration via a .eslintrc configuration file as detailed in ESLint's documentation.

Adding a .eslintrc.js

You'll need to add a .eslintrc.js (or .eslintrc) config file to your project if it doesn't have one already.

If you have your eslint configuration saved to another file in your repo, you can configure the engine to use that path instead of the default path:

eslint:
  enabled: true
  config:
    config: path/to/.eslintrc

It is important to note that a .eslintrc.js config file is typically required for our ESLint engine to analyze your code.

Extensions

You can configure our ESLint Engine to analyze the file types you’d like by configuring the extensions in your .codeclimate.yml, as shown in the example below:

eslint:
  enabled: true
  config:
    extensions:
    - .es6
    - .js
    - .jsx
    - .mjs

By default, the ESLint engine only analyzes .js files. If you want ESLint to analyze your JSX code and ES6 files, you'll need to specify this in your .codeclimate.yml, as shown in the example above.

Customizing Checks and Thresholds

Users can adjust their ESLint configuration through a variety of means, including:

  • Directly disable a check in their .codeclimate.yml file:
plugins:
  eslint:
    enabled: true
    checks:
      complexity:
        enabled: false
  • Enable and disable rules in your .eslintrc with 0 (disabled), or 2 (enabled - and issue reported as error, required for Code Climate engine to treat it as an issue).
  • Configure tolerance for violations (including complexity) by tuning the threshold in their .eslintrc under the Rule name. For instance:
{
  "env": {
    "node": true
  },
  "rules": {
    "brace-style": [2, "1tbs", { "allowSingleLine": true }],
    "comma-dangle": [2, "never"],
    "comma-style": [2, "first", { exceptions: {ArrayExpression: true, ObjectExpression: true} }],
    "complexity": [2, 6],
    "curly": 2,
    "eqeqeq": [2, "allow-null"],
    "max-statements": [2, 30],
    "no-shadow-restricted-names": 2,
    "no-undef": 2,
    "no-use-before-define": 2,
    "radix": 2,
    "semi": 2,
    "space-infix-ops": 2,
    "strict": 0
  },
  "globals": {
    "AnalysisView": true,
    "PollingView": true,
    "Prism": true,
    "Spinner": true,
    "Timer": true,
    "moment": true
  }
}

Users may also exclude a particular issue found by excluding its fingerprint.

plugins:
  eslint:
    enabled: true
    exclude_fingerprints:
    - c1602d46125c5d6c015c56d6bc5f6b9d

Rules can also be marked at the warning level (1). By default, these will be registered as an error. They can be ignored using the ignore_warnings flag.

plugins:
  eslint:
    enabled: true
    config:
     ignore_warnings: true

Understand the Plugin

A full list of available checks can be found here. Edit your .eslintrc to select rules and tune thresholds that best meet the requirements of your team.

Supported Plugins

For security concerns related to executing code within a docker container, our ESLint engine currently ignores all but a select number of ESLint plugins. Please see the list below of plugins we currently support on all channels:

eslint-5

eslint-4

eslint-3

eslint-1

eslint-2

We hope to build support for additional plugins soon.