@u3u/eslint-config
Version:
My ESLint config
178 lines (135 loc) • 4.5 kB
Markdown
# My ESLint config
[![npm version][npm-version-src]][npm-version-href]
[![npm downloads][npm-downloads-src]][npm-downloads-href]
## Features
- Sort object keys
- Sort `export` statements
- Sort destructure keys
- Sort TypeScript `interface`/`enum` keys
- Newline between specific blocks (Make your code look more comfortable)
- Support enable [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint) for `.js` files
- Markdown support
- Warn only (It should be distinguished from other syntax errors)
- **Fixable rules only** (All errors can be automatically fixed without any mental burden)
- ...
> 💡 A unified sorting keys rule can save you time from worrying about the order when writing code, allowing you to focus on development itself. It can also reduce merge conflicts.
## Install
```sh
pnpm add eslint /eslint-config -D
```
## Usage
In your `.eslintrc`
```json
{
"extends": "@u3u"
}
```
Add `lint` script to `package.json`
```json
{
"scripts": {
"lint": "eslint --fix ."
}
}
```
Then you can run `pnpm lint` to fix all errors.
## TypeScript
By default, it reads the `tsconfig.json` file in the project root directory.
You can use the `ESLINT_TSCONFIG` environment variable to specify other configuration files.
In your `.eslintrc.cjs`
```js
process.env.ESLINT_TSCONFIG = 'tsconfig.json'; // Optional
/** @type {import('eslint').Linter.Config} */
module.exports = {
extends: [' '],
};
```
(v2.0.0+) You can also set `process.env.USE_TS_FOR_JS = 'true'` in `.eslintrc.cjs` to enable [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint) for `.js` files, but you need to [include](https://typescript-eslint.io/linting/troubleshooting#i-get-errors-telling-me-eslint-was-configured-to-run--however-that-tsconfig-does-not--none-of-those-tsconfigs-include-this-file) them in `tsconfig.json`, or you can use `@u3u/eslint-config/disable-type-aware` to disable type checking rules.
```js
process.env.USE_TS_FOR_JS = 'true';
/** @type {import('eslint').Linter.Config} */
module.exports = {
extends: [' '],
// If you don't want to include them in `tsconfig.json`, you can also disable type checking rules.
overrides: [
{
extends: ['/eslint-config/disable-type-aware'],
files: ['*.js', '*.jsx', '*.cjs', '*.mjs'],
},
],
};
```
## VS Code Auto fix
In your `.vscode/settings.json`
```json
{
"editor.codeActionsOnSave": {
"source.fixAll.eslint": true
},
"eslint.enable": true,
"eslint.validate": [
"astro",
"javascript",
"javascriptreact",
"json",
"jsonc",
"markdown",
"mdx",
"typescript",
"typescriptreact",
"vue"
]
}
```
## Custom config
The default configuration consists of the following components, which you can freely combine or disable some rules.
```js
/** @type {import('eslint').Linter.Config} */
module.exports = {
extends: [
'/eslint-config/base',
'/eslint-config/import',
'/eslint-config/regexp',
'/eslint-config/unicorn',
'/eslint-config/react', // Enable if `react` is detected as installed.
'/eslint-config/ts', // Enable if `typescript` is detected as installed and `tsconfig.json` exists.
'/eslint-config/vue', // Enable if `vue` is detected as installed.
'/eslint-config/astro', // Enable if `astro` is detected as installed.
'/eslint-config/json',
'/eslint-config/md',
'/eslint-config/mdx',
],
rules: {
// Disable sort rules
'sort-destructure-keys/sort-destructure-keys': 'off',
'sort-exports/sort-exports': 'off',
'sort-keys/sort-keys-fix': 'off',
},
};
```
## Lint Staged
If you want to apply lint and auto-fix before every commit, you can add the following to your `package.json`:
```json
{
"lint-staged": {
"*.{js,jsx,ts,tsx}": ["eslint --fix"]
},
"simple-git-hooks": {
"pre-commit": "npx lint-staged"
}
}
```
then install them
```sh
pnpm add lint-staged simple-git-hooks -D
npx simple-git-hooks
```
## Related
- [u3u/prettier-config](https://github.com/u3u/prettier-config) - My Prettier config
## License
[MIT](./LICENSE) License © 2023 [u3u](https://github.com/u3u)
<!-- Badges -->
[npm-version-src]: https://img.shields.io/npm/v/@u3u/eslint-config
[npm-version-href]: https://npmjs.com/package/@u3u/eslint-config
[npm-downloads-src]: https://img.shields.io/npm/dm/@u3u/eslint-config
[npm-downloads-href]: https://npmjs.com/package/@u3u/eslint-config