75 lines
3.0 KiB
Markdown
75 lines
3.0 KiB
Markdown
# babel-eslint [![Build Status][travis-image]][travis-url]
|
|
|
|
**babel-eslint** allows you to lint **ALL** valid Babel code with the fantastic
|
|
[ESLint](https://github.com/eslint/eslint).
|
|
|
|
`babel-eslint` is successfully linting babel and many other projects.
|
|
|
|
> If there is an issue, first check if it can be reproduced with the regular parser or with the latest versions of `eslint` and `babel-eslint`!
|
|
|
|
For questions and support please visit the [`#linting`](https://babeljs.slack.com/messages/linting/) babel slack channel (sign up [here](https://babel-slack.herokuapp.com))!
|
|
|
|
> Note that the `ecmaFeatures` config property may still be required for ESLint to work properly with features not in ECMAScript 5 by default. Examples are `globalReturn` and `modules`)
|
|
|
|
## Known Issues
|
|
|
|
Flow:
|
|
> Check out [eslint-plugin-flow-vars](https://github.com/zertosh/eslint-plugin-flow-vars): An `eslint` plugin that makes flow type annotations global variables and marks declarations as used. Solves the problem of false positives with `no-undef` and `no-unused-vars`.
|
|
- `no-undef` for global flow types: `ReactElement`, `ReactClass` [#130](https://github.com/babel/babel-eslint/issues/130#issuecomment-111215076)
|
|
- Workaround: define types as globals in `.eslintrc` or define types and import them `import type ReactElement from './types'`
|
|
- `no-unused-vars/no-undef` with Flow declarations (`declare module A {}`) [#132](https://github.com/babel/babel-eslint/issues/132#issuecomment-112815926)
|
|
|
|
Modules/strict mode
|
|
- `no-unused-vars: [2, {vars: local}]` [#136](https://github.com/babel/babel-eslint/issues/136)
|
|
|
|
Please check out [eslint-plugin-react](https://github.com/yannickcr/eslint-plugin-react) for React/JSX issues
|
|
- `no-unused-vars` with jsx
|
|
|
|
Please check out [eslint-plugin-babel](https://github.com/babel/eslint-plugin-babel) for other issues such as (and more):
|
|
- `generator-star` with async/await functions [#78](https://github.com/babel/babel-eslint/issues/78)
|
|
- `object-shorthand` with spread operator [#131](https://github.com/babel/babel-eslint/issues/131)
|
|
|
|
## How does it work?
|
|
|
|
ESLint allows custom parsers. This is great but some of the syntax nodes that Babel supports
|
|
aren't supported by ESLint. When using this plugin, ESLint is monkeypatched and your code is
|
|
transformed into code that ESLint can understand. All location info such as line numbers,
|
|
columns is also retained so you can track down errors with ease.
|
|
|
|
Basically `babel-eslint` exports an [`index.js`](/index.js) that a linter can use.
|
|
It just needs to export a `parse` method that takes in a string of code and outputs an AST.
|
|
|
|
## Usage
|
|
|
|
### Install
|
|
|
|
```sh
|
|
$ npm install eslint@1.x babel-eslint --save-dev
|
|
|
|
$ npm install eslint@2.x babel-eslint@next --save-dev
|
|
```
|
|
|
|
### Setup
|
|
|
|
**.eslintrc**
|
|
|
|
```json
|
|
{
|
|
"parser": "babel-eslint",
|
|
"rules": {
|
|
"strict": 0
|
|
}
|
|
}
|
|
```
|
|
|
|
Check out the [ESLint docs](http://eslint.org/docs/rules/) for all possible rules.
|
|
|
|
### Run
|
|
|
|
```sh
|
|
$ eslint your-files-here
|
|
```
|
|
|
|
[travis-url]: https://travis-ci.org/babel/babel-eslint
|
|
[travis-image]: https://travis-ci.org/babel/babel-eslint.svg?branch=master
|