Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/api3dao/eslint-plugin-commons
The standard ESLint rule set for API3 projects
https://github.com/api3dao/eslint-plugin-commons
Last synced: 1 day ago
JSON representation
The standard ESLint rule set for API3 projects
- Host: GitHub
- URL: https://github.com/api3dao/eslint-plugin-commons
- Owner: api3dao
- Created: 2024-05-29T12:43:05.000Z (6 months ago)
- Default Branch: main
- Last Pushed: 2024-10-23T22:50:42.000Z (22 days ago)
- Last Synced: 2024-10-25T04:33:02.404Z (21 days ago)
- Language: JavaScript
- Size: 229 KB
- Stars: 0
- Watchers: 5
- Forks: 0
- Open Issues: 6
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# eslint-plugin-commons
> ESLint configurations used across API3 projects.
The modules consists of multiple ESLint configurations supporting wide variety of targets:
- `universal` - Linting rules for universal (both FE and BE) JS/TS code (with the emphasis on TS).
- `react` - Linting rules for React code.
- `next-js` - Linting rules for Next.js code.
- `jest` - Linting rules for Jest tests. Note, that these rules are only applied for JS/TS files with `*.test.*`
extensions.## Getting started
1. Create an `.eslintrc.js` configuration file in the repo root.
2. Extend the desired configuration(s).
3. Specify the `parserOptions.project` option with the path to the `tsconfig.json` file(s).
4. Install `eslint` (which is a peer dependency of this module) as dev dependencies.For example:
```js
module.exports = {
extends: ['plugin:@api3/eslint-plugin-commons/universal', 'plugin:@api3/eslint-plugin-commons/jest'],
parserOptions: {
// We focus primarily on TS and for that we need to specify the TS configs which is project specific. The following
// is a common monorepo setup (root config and a config for each package).
project: ['./tsconfig.json', './packages/*/tsconfig.json'],
},
};
```If you are using TS, it's possible that ESLint will complain about `.js` files not being present in the project. This
can likely be fixed by adding `"allowJs": true` to the `tsconfig.json` file.### Linting commands
We recommend using the following linting commands inside `package.json` scripts:
```json
{
"eslint:check": "eslint --report-unused-disable-directives --cache --ext js,ts,tsx,jsx . --max-warnings 0",
"eslint:fix": "pnpm run eslint:check --fix"
}
```The `--cache` parameter makes ESLint create a `.eslintcache` file in the root of the project. This file should be put to
`.gitignore`.## Rules
The configurations are a collection of various rulesets and the config is quite strict. In general there are rules that:
- Have a fixer (import ordering)
- Simplify code (combine two nested ifs)
- Make code more consistent (make `return void` pattern be split on two lines)
- Fix outdated stuff (avoid `!` ts operator when not necessary)
- Avoid vulnerabilities and errors (Number.parseInt without radix)Tip: Some rules do have fixer with multiple variants of the fixes. You need to use the IDE to prompt the fixes and
choose the one you want.### Overriding rules
To override a rule, you can use the `rules` section key in your `.eslintrc.js` file. For example:
```js
{
rules: {
'check-file/folder-naming-convention': 'off', // Turns of the kebab-case convention for folder names.
'unicorn/filename-case': 'off' // Turns of the kebab-case convention for filenames.
'import/no-default-export': 'off', // Turns off the rule that disallows default exports.
'import/prefer-default-export': 'error' // Turns on the rule that prefers default exports.
}
}
```## For developers
This sections is intended for developers of this repo.
### Release
1. Run `pnpm version [major|minor|patch]` by choosing the appropriate version bump.
2. Push the changes to the `main`, either directly or via a pull request.
3. The CI will register a new version and handle the release process.