@dfinity/eslint-config-oisy-wallet
Version:
Shared ESLint configurations from the Oisy Wallet team
149 lines (109 loc) • 3.87 kB
Markdown
# 🌟 @dfinity/eslint-config-oisy-wallet
A shareable ESLint configuration library for Oisy Wallet projects, supporting both TypeScript and Svelte.
<div align="center" style="display:flex;flex-direction:column;">
<br/>
[](https://internetcomputer.org)
[](https://github.com/dfinity/eslint-config-oisy-wallet/actions/workflows/checks.yml)
</div>
> [!NOTE]
> This configuration is currently compatible with ESLint 8.
## 🖥️ Installation
```bash
# with npm
npm install --save-dev @dfinity/eslint-config-oisy-wallet
# with pnpm
pnpm add --save-dev @dfinity/eslint-config-oisy-wallet
# with yarn
yarn add -D @dfinity/eslint-config-oisy-wallet
```
## ✍️ Usage
For General Projects (Non-Svelte):
1. Create an ESLint configuration file `.eslintrc.js` in your project root and extend the base configuration:
```javascript
module.exports = {
extends: ["@dfinity/eslint-config-oisy-wallet"],
};
```
For [Svelte](https://svelte.dev/) Projects:
1. Create an `.eslintrc.js` file in your project root and extend the Svelte-specific configuration:
```javascript
module.exports = {
extends: ["@dfinity/eslint-config-oisy-wallet/svelte"],
};
```
For [vitest](https://vitest.dev/) test suites:
1. Create an `.eslintrc.js` file in your project root and extend the vitest-specific configuration:
```javascript
module.exports = {
extends: ["@dfinity/eslint-config-oisy-wallet/vitest"],
};
```
2. If the rules must apply ONLY to test files, they can be configured as:
```javascript
module.exports = {
overrides: [
{
// Specify the test files and/or folders
files: [
"**/*.test.{ts,js}",
"**/*.spec.{ts,js}",
"**/tests/**/*.{ts,js}",
],
extends: ["@dfinity/eslint-config-oisy-wallet/vitest"],
},
],
};
```
Finally, create an `eslint-local-rules.cjs` file at the root of your project containing the following:
```javascript
module.exports = require("@dfinity/eslint-config-oisy-wallet/eslint-local-rules");
```
> [!NOTE]
> This is necessary because the `eslint-plugin-local-rules` plugin we use for custom rules requires a file located at the root and does not offer any customizable location option.
## 🔧 Overriding or Disabling Rules
You can override or disable any of the rules provided by this configuration — including custom **local rules** — just like you would with any ESLint config.
In your `.eslintrc.js`, simply add a `rules` section:
```javascript
module.exports = {
extends: ["@dfinity/eslint-config-oisy-wallet/svelte"],
rules: {
// Disable a built-in rule
"no-console": "off",
// Disable a local custom rule
"local/use-nullish-checks": "off",
// Customize severity or options
"@typescript-eslint/no-unused-vars": ["warn", { argsIgnorePattern: "^_" }],
},
};
```
Note: To override local rules, make sure you have the `eslint-local-rules.cjs` file at the root as described above.
## 🛠️ TypeScript Support
If your project uses TypeScript, make sure you have a `tsconfig.json` file in your project root.
Here's an example `tsconfig.json`:
```json
{
"compilerOptions": {
"strict": true,
"target": "ESNext",
"module": "ESNext",
"moduleResolution": "node",
"esModuleInterop": true,
"skipLibCheck": true
},
"include": ["src/**/*.ts", "*.svelte"],
"exclude": ["node_modules", "dist"]
}
```
## 🔍 Linting Your Project
To lint your project, add the following script to your `package.json`:
```json
{
"scripts": {
"lint": "eslint --max-warnings 0 \"src/**/*\""
}
}
```
Then, run the linting command:
```bash
npm run lint
```