ESLint 1.0.0 released

We just pushed ESLint 1.0.0, which is the first major release of ESLint. Over two years ago we started work on ESLint, and since then the project has grown by leaps and bounds. Reaching 1.0.0 status means that we feel this is the stable base from which ESLint will continue to grow in the future.

In this announcement, we are including all changes from each of the release candidates to make it easier to see what changed from the release candidates to now.

As there are a lot of changes, we’ve created a migration guide describing the changes in great detail along with the steps you should take to address them. Not all ESLint users will be affected by the changes, however, the changes are big enough that we recommend everyone read the migration thoroughly.

Highlights

This is a summary of the major changes you need to know about for this version of ESLint.

Installing

Since this is a major release version, you will not automatically be upgraded by npm. You must specify the latest tag when installing:

npm i [email protected] --save-dev

You can also specify the version directly:

npm i [email protected] --save-dev

New Language Features

1.0.0 has been upgraded to the latest version of Espree, which means you now have access to additional language features:

  1. newTarget allows you to use new.target in your code.
  2. experimentalObjectRestSpread allows you to use the experimental object rest/spread in your code.

As special note about object rest/spread: We added this as a result of feedback that this was the only feature missing from ESLint that made many React users switch to babel-eslint. We thought it was silly to require React users to load an entirely separate parser for a single language feature, and since it kept being requested, we decided to add it. Keep in mind that this feature is still experimental and as such, the node types reflect that:

These are non-standard nodes and may change at any time. We therefore recommend that you don’t create rules that used these directly unless you are willing to have those rules break when/if these nodes are standardized.

Keep in mind that this does not mean we will start supporting all experimental features, but we will continue evaluate them on a case-by-case basis.

–reset is now the default

The --reset behavior is now the default behavior for ESLint and the --reset flag has been removed. This means there are no rules on by default in ESLint; you must enable the rules that you want. For more information on this change and how it affects you, please see the migration guide.

Missing rules handled safely

In previous version, a missing rule would immediately cause ESLint to crash and exit. In this version, ESLint will just warn you about the missing rule, and if the rule has been replaced by something else, will tell you what rule to use instead.

Deprecating eslint-tester

The eslint-tester module, which has long been the primary tester for ESLint rules, has now been moved into the eslint module and renamed to RuleTester. This was the result of a difficult relationship between these two modules that created circular dependencies and was causing a lot of problems in rule tests. Moving the tester into the eslint module fixed a lot of those issues. Please see the migration guide for more details.

New Rules

There are several new rules for this release:

Breaking Changes (1.0.0)

Breaking Changes (1.0.0-rc-1)

Features (1.0.0)

Features (1.0.0-rc-2)

Features (1.0.0-rc-1)

Enhancements (1.0.0)

Enhancements (1.0.0-rc-3)

Enhancements (1.0.0-rc-2)

Enhancements (1.0.0-rc-1)

Bug Fixes (1.0.0)

Bug Fixes (1.0.0-rc-3)

Bug Fixes (1.0.0-rc-2)

Bug Fixes (1.0.0-rc-1)

Documentation (1.0.0)

Documentation (1.0.0-rc-3)

Documentation (1.0.0-rc-2)

Documentation (1.0.0-rc-1)

Dependency Upgrades (1.0.0-rc-1)