Skip to content

Commit

Permalink
feat: use overrides in eslint (#22)
Browse files Browse the repository at this point in the history
* feat: format with new eslint rules

* feat: update prettier

* feat: add new rule for node-mjs

* feat: update lintstaged

* chore: add eslint-plugin-mdx

* feat: test

* feat: test

* feat: del test case

* feat: add eslint-plugin-mdx

* docs: update

* fix: typo

* docs: update

* feat: update @typescript-eslint/parser parserOption.project
  • Loading branch information
leohxj authored Sep 1, 2019
1 parent 8160925 commit b62d513
Show file tree
Hide file tree
Showing 43 changed files with 1,097 additions and 408 deletions.
4 changes: 4 additions & 0 deletions .eslintignore
Original file line number Diff line number Diff line change
@@ -1 +1,5 @@
# by default, .eslintrc will ignored
!.eslintrc.js

# build assets should not lint
dist/
7 changes: 7 additions & 0 deletions .eslintrc.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
const { babel, typescript } = require('@mjolnir/eslint-config/overrides');

module.exports = {
extends: ['@mjolnir'],
overrides: [babel, typescript],
rules: {},
};
7 changes: 0 additions & 7 deletions .eslintrc.json

This file was deleted.

10 changes: 9 additions & 1 deletion .lintstagedrc
Original file line number Diff line number Diff line change
@@ -1,7 +1,15 @@
{
"$schema": "http://json.schemastore.org/lintstagedrc.schema",
"**/*.{js, ts}": [
"*.{js,ts}": [
"eslint --fix",
"git add"
],
".*rc": [
"prettier --write",
"git add"
],
"*.{html,json,md,mdx,yaml,yml}": [
"prettier --write",
"git add"
]
}
2 changes: 0 additions & 2 deletions babel.config.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
'use strict';

module.exports = api => {
api.cache(false);

Expand Down
2 changes: 0 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,6 @@
"@mjolnir/prettier-config": "link:packages/prettier-config",
"cross-env": "^5.2.0",
"eslint": "^6.1.0",
"eslint-config-prettier": "^6.0.0",
"eslint-plugin-prettier": "^3.1.0",
"husky": "^3.0.4",
"lerna": "^3.15.0",
"lint-staged": "^9.2.4",
Expand Down
2 changes: 0 additions & 2 deletions packages/babel-preset/index.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
'use strict';

const { declare } = require('@babel/helper-plugin-utils');
const env = process.env.NODE_ENV;

Expand Down
144 changes: 104 additions & 40 deletions packages/eslint-config/README.md
Original file line number Diff line number Diff line change
@@ -1,90 +1,154 @@
# @mjolnir/eslint-config

适用于 node/es/ts/react 环境下的 eslint 配置集合。
适用于 web 开发的 eslint 配置集合:

- 内置了对 node, markdown, pretier 的 lint。
- 通过 overrides, 支持 babel/typescript/react/jest/mdx 的 lint.

## 说明
### requirement
- eslint@6

### 包含的插件
- "@typescript-eslint/eslint-plugin": "^1.13.0"
- "@typescript-eslint/parser": "^1.13.0"
- "eslint-plugin-babel": "^5.3.0"
- "eslint-plugin-import": "^2.18.2"
- "eslint-plugin-node": "^9.1.0"
- "eslint-plugin-react": "^7.14.3"
- "eslint-plugin-react-hooks": "^1.7.0"

## requirement

- eslint
- prettier

### dependencies

```
@typescript-eslint/eslint-plugin
@typescript-eslint/parser
babel-eslint
eslint-plugin-babel
eslint-plugin-import
eslint-plugin-jest
eslint-plugin-node
eslint-plugin-react
eslint-plugin-react-hooks
eslint-config-prettier
eslint-plugin-prettier
eslint-plugin-mdx
```

## 安装

`yarn add eslint @mjolnir/eslint-config -D`

or

`npm i eslint @mjolnir/eslint-config -D`

## 配置
### es6 (默认)
```json

### es6/node (默认)

适用于 web 开发, 基于 ES6 Module 模块化方式。

```jsonc
{
"extends": [
"@mjolnir/eslint-config"
]
"extends": ["@mjolnir"] // same as @mjolnir/eslint-config
}
```

### Node.js with commonJS

纯 node 项目, 使用 commonJS 模块化方式。

### Node.js
```json
{
"extends": [
"@mjolnir/eslint-config/node"
]
"extends": ["@mjolnir/eslint-config/node"]
}
```

## overrides 配置

通过提供 `overrides` 的方式,增强对 `babel`, `typescript`, react`,`jest`项目的支持。 配置文件需要使用`.eslintrc.js` 格式。

### recommended

推荐的 override 配置项,包含:

- babel
- typescript
- react
- jest
- mdx

适用于 Jest 项目,处理的文件类型: `**/*.{spec,test}.{js,jsx,ts,tsx}`.

```js
const { recommended } = require('@mjolnir/eslint-config/overrides');
{
...,
"overrides": recommended
}
```

### Babel (ES)
```json

适用 babel 的项目, 处理的文件为: `**/*.{js, jsx}`.

```js
const { babel } = require('@mjolnir/eslint-config/overrides');
{
"extends": [
"@mjolnir/eslint-config/babel"
...,
"overrides": [
babel
]
}
```

### TypeScript
```json

适用 typescript 的项目, 处理的文件为: `**/*.ts?(x)`.

```js
const { typescript } = require('@mjolnir/eslint-config/overrides');
{
"extends": [
"@mjolnir/eslint-config/typescript"
...,
"overrides": [
typescript
]
}
```

### React
```json

适用于 react 项目, 处理的文件为: `**/*.{js,jsx,ts,tsx}`.

```js
const { react } = require('@mjolnir/eslint-config/overrides');
{
"extends": [
"@mjolnir/eslint-config/babel",
"@mjolnir/eslint-config/react"
...,
"overrides": [
react
]
}
```

### React with TypeScript
```json
### Jest

适用于 Jest 项目,处理的文件类型: `**/*.{spec,test}.{js,jsx,ts,tsx}`.

```js
const { jest } = require('@mjolnir/eslint-config/overrides');
{
"extends": [
"@mjolnir/eslint-config/typescript",
"@mjolnir/eslint-config/react"
...,
"overrides": [
jest
]
}
```

### jest 环境
```json
### mdx

适用于 mdx 文件,处理的文件类型: `*.mdx`.

```js
const { mdx } = require('@mjolnir/eslint-config/overrides');
{
"extends": [
"@mjolnir/eslint-config/jest"
...,
"overrides": [
mdx
]
}
```
6 changes: 0 additions & 6 deletions packages/eslint-config/babel.js

This file was deleted.

14 changes: 9 additions & 5 deletions packages/eslint-config/index.js
Original file line number Diff line number Diff line change
@@ -1,20 +1,24 @@
'use strict';

// for es6 env
// for es6 and node env
module.exports = {
root: true, // limit ESLint to a specific project
env: {
node: true,
browser: true,
es6: true, // also enable ecmaVersion: 6
},
parserOptions: {
ecmaVersion: 2018, // same as 9
sourceType: 'module', // ECMAScript module
ecmaFeatures: {
globalReturn: false,
impliedStrict: true,
jsx: true,
},
},
extends: ['./rules', './plugins/import'].map(require.resolve),
extends: [
'./rules',
'./plugins/node-mjs',
'./plugins/import',
'./plugins/markdown',
'./plugins/prettier',
].map(require.resolve),
};
7 changes: 0 additions & 7 deletions packages/eslint-config/jest.js

This file was deleted.

23 changes: 18 additions & 5 deletions packages/eslint-config/node.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,21 @@
'use strict';

// for nodejs env, support es6+ syntax
// for nodejs with commonJS
module.exports = {
root: true, // limit ESLint to a specific project
extends: ['./rules', './plugins/node'].map(require.resolve),
rules: {},
env: {
node: true,
es6: true, // also enable ecmaVersion: 6
},
parserOptions: {
ecmaVersion: 2018, // same as 9
ecmaFeatures: {
globalReturn: true,
impliedStrict: true,
},
},
extends: [
'./rules',
'./plugins/node-cjs',
'./plugins/markdown',
'./plugins/prettier',
].map(require.resolve),
};
5 changes: 5 additions & 0 deletions packages/eslint-config/overrides/babel.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
// for babel env, base on es6 env
module.exports = {
files: ['*.{js,jsx}'],
extends: ['../plugins/babel'].map(require.resolve),
};
14 changes: 14 additions & 0 deletions packages/eslint-config/overrides/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
// TODO: shareable config 里面暂时无法使用 extends , 所以交给项目配置
module.exports = {
typescript: require('./typescript'),
babel: require('./babel'),
jest: require('./jest'),
react: require('./react'),
mdx: require('./mdx'),
recommended: [
require('./typescript'),
require('./babel'),
require('./jest'),
require('./mdx'),
],
};
5 changes: 5 additions & 0 deletions packages/eslint-config/overrides/jest.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
// for jest env
module.exports = {
files: ['*.{spec,test}.{js,jsx,ts,tsx}'],
extends: ['../plugins/jest'].map(require.resolve),
};
9 changes: 9 additions & 0 deletions packages/eslint-config/overrides/mdx.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
// mdx lint jsx in markdown
module.exports = {
files: ['*.mdx'],
extends: [
...['../plugins/react', '../plugins/react-hooks'].map(require.resolve),
'plugin:mdx/recommended',
'plugin:mdx/overrides',
],
};
5 changes: 5 additions & 0 deletions packages/eslint-config/overrides/react.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
// for react env
module.exports = {
files: ['*.{js,jsx,ts,tsx}'],
extends: ['../plugins/react', '../plugins/react-hooks'].map(require.resolve),
};
5 changes: 5 additions & 0 deletions packages/eslint-config/overrides/typescript.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
// for typescript env, base on es6 env
module.exports = {
files: ['*.ts?(x)'],
extends: ['../plugins/typescript'].map(require.resolve),
};
6 changes: 5 additions & 1 deletion packages/eslint-config/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -21,16 +21,20 @@
],
"license": "MIT",
"peerDependencies": {
"eslint": "^6.0.0"
"eslint": "^6.0.0",
"prettier": "^1.17.1"
},
"dependencies": {
"@typescript-eslint/eslint-plugin": "^2.0.0",
"@typescript-eslint/parser": "^2.0.0",
"babel-eslint": "^10.0.2",
"eslint-config-prettier": "^6.1.0",
"eslint-plugin-babel": "^5.3.0",
"eslint-plugin-import": "^2.18.2",
"eslint-plugin-jest": "^22.15.1",
"eslint-plugin-mdx": "^1.4.0",
"eslint-plugin-node": "^9.1.0",
"eslint-plugin-prettier": "^3.1.0",
"eslint-plugin-react": "^7.14.3",
"eslint-plugin-react-hooks": "^2.0.0"
},
Expand Down
Loading

0 comments on commit b62d513

Please sign in to comment.