Skip to content

ver0-project/eslint-config

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

363 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

@ver0/eslint-config

NPM Version NPM Downloads Dependents (via libraries.io), scoped npm package GitHub Actions Workflow Status


πŸ”¬ A modular ESLint configuration used across all ver0 projects

✨ What's Included

A collection of modular ESLint configs β€” import only what you need and compose them with defineConfig().

  • JavaScript β€” base rules, import sorting, unicorn, promise, ESLint comments
  • TypeScript β€” type-aware linting via XO TypeScript config
  • React β€” JSX, hooks, and import rules
  • Node.js β€” Node globals and eslint-plugin-n rules
  • Browser β€” browser globals and restricted globals
  • JSON β€” .json, .jsonc, .json5 linting
  • Markdown β€” Markdown linting
  • Svelte β€” Svelte component and runes module linting
  • Vitest β€” test file rules
  • Prettier β€” formatting integration

πŸš€ Installation

yarn add -D @ver0/eslint-config eslint

Each config requires its own peer dependencies β€” see Available Configs below.

πŸ“– Usage

Import the configs you need and compose them with defineConfig():

// eslint.config.js
import {defineConfig} from 'eslint/config';
import javascript from '@ver0/eslint-config/javascript.js';
import node from '@ver0/eslint-config/node.js';
import json from '@ver0/eslint-config/json.js';
import markdown from '@ver0/eslint-config/markdown.js';
import prettier from '@ver0/eslint-config/prettier.js';

export default defineConfig(javascript, node, ...json, markdown, prettier);

Note: The JSON config exports an array of 3 configs (JSON, JSONC, JSON5), so spread it with ...json.

πŸ“¦ Available Configs

Each config is a standalone module. Import it to enable, skip it to disable β€” no options object needed. If the required peer dependencies are not installed, you'll get a clear error listing exactly what's missing.

  • JavaScript β€” base rules, import sorting, unicorn, promise, ESLint comments. Always include this one β€” other configs build on top of it.

    yarn add -D @eslint/js @eslint-community/eslint-plugin-eslint-comments eslint-plugin-import eslint-plugin-promise eslint-plugin-unicorn eslint-plugin-no-use-extend-native eslint-config-xo
  • TypeScript β€” type-aware linting rules. Also exports typescriptUnsafe to disable strict type-safety rules.

    yarn add -D eslint-config-xo-typescript typescript
  • React β€” React, JSX, and hooks rules.

    yarn add -D eslint-plugin-import eslint-config-xo-react
  • Node.js β€” Node.js globals and eslint-plugin-n rules.

    yarn add -D globals eslint-plugin-n
  • Browser β€” browser globals and restricted globals (prevents accidental use of confusing browser globals like event, name, etc.).

    yarn add -D globals confusing-browser-globals
  • JSON β€” linting for .json, .jsonc, and .json5 files. Exports an array of 3 configs β€” spread it with ...json in defineConfig().

    yarn add -D @eslint/json
  • Markdown β€” Markdown linting.

    yarn add -D @eslint/markdown
  • Svelte β€” Svelte component and runes module linting via eslint-plugin-svelte. Exports an array of configs β€” spread it with ...svelte in defineConfig().

    yarn add -D eslint-plugin-svelte
  • Vitest β€” rules for test and benchmark files (*.test.*, *.benchmark.*).

    yarn add -D @vitest/eslint-plugin
  • Prettier β€” formatting integration. Include this last so it overrides conflicting rules.

    yarn add -D eslint-plugin-prettier eslint-config-prettier prettier

🌟 Common Configurations

Node.js API project:

// eslint.config.js
import {defineConfig} from 'eslint/config';
import javascript from '@ver0/eslint-config/javascript.js';
import typescript from '@ver0/eslint-config/typescript.js';
import node from '@ver0/eslint-config/node.js';
import json from '@ver0/eslint-config/json.js';
import markdown from '@ver0/eslint-config/markdown.js';
import vitest from '@ver0/eslint-config/vitest.js';
import prettier from '@ver0/eslint-config/prettier.js';

export default defineConfig(javascript, typescript, node, ...json, markdown, vitest, prettier);

React web application:

// eslint.config.js
import {defineConfig} from 'eslint/config';
import javascript from '@ver0/eslint-config/javascript.js';
import typescript from '@ver0/eslint-config/typescript.js';
import react from '@ver0/eslint-config/react.js';
import browser from '@ver0/eslint-config/browser.js';
import json from '@ver0/eslint-config/json.js';
import vitest from '@ver0/eslint-config/vitest.js';
import prettier from '@ver0/eslint-config/prettier.js';

export default defineConfig(javascript, typescript, react, browser, ...json, vitest, prettier);

SvelteKit application:

// eslint.config.js
import {defineConfig} from 'eslint/config';
import javascript from '@ver0/eslint-config/javascript.js';
import typescript from '@ver0/eslint-config/typescript.js';
import svelte from '@ver0/eslint-config/svelte.js';
import browser from '@ver0/eslint-config/browser.js';
import json from '@ver0/eslint-config/json.js';
import vitest from '@ver0/eslint-config/vitest.js';
import prettier from '@ver0/eslint-config/prettier.js';

export default defineConfig(javascript, typescript, ...svelte, browser, ...json, vitest, prettier);

🎨 Prettier Configuration

This package also provides an opinionated default Prettier configuration that you can extend from.

// .prettierrc.js
import ver0Config from '@ver0/eslint-config/.prettierrc.js';

export default {
	...ver0Config,
	// Override any settings if needed
	// printWidth: 100,
};

βš™οΈ EditorConfig

For consistent formatting across different editors, you can copy our .editorconfig that is aligned with our Prettier configuration:

# .editorconfig
[*]
indent_style = tab
tab_width = 2
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
max_line_length = 120

[*.yml]
indent_style = space
indent_size = 2

πŸ› οΈ Troubleshooting

Rules conflicting with your existing setup? You can override specific rules by adding a config after ours:

// eslint.config.js
import {defineConfig} from 'eslint/config';
import javascript from '@ver0/eslint-config/javascript.js';
import node from '@ver0/eslint-config/node.js';
import prettier from '@ver0/eslint-config/prettier.js';

export default defineConfig(javascript, node, prettier, {
	rules: {
		'some-rule': 'off', // Override any rule
	},
});

About

πŸ”¬ ESLint configs used in @ver0-project

Topics

Resources

License

Stars

Watchers

Forks

Contributors