The strictest ESLint configuration for modern JavaScript/TypeScript development
-
Strict ESLint rules for
libs-for-dev
repositories
- 🎯 Zero-config setup for common project types
- 🔧 Comprehensive rule sets for JS, TS, Vue, React, and more
- 🎨 Built-in stylistic rules (no Prettier needed)
- 📝 Strict file naming conventions
- ✨ Best practices enforcement
- Node.js >=20
- ESLint >=9.0.0
Install with your favorite package manager:
# npm
npm install --save-dev @libs-for-dev/eslint-rules
# yarn
yarn add -D @libs-for-dev/eslint-rules
# pnpm
pnpm add -D @libs-for-dev/eslint-rules
# bun
bun add -D @libs-for-dev/eslint-rules
This package provides the strictest ESLint rules for next type of files:
- javascript files
**/*.js
,**/*.cjs
,**/*.mjs
rules:- @eslint/js(Common JS rules)
- @eslint-community/eslint-plugin-eslint-comments
-
@stylistic/eslint-plugin(No needed use
prettier
anymore) - eslint-plugin-check-file(Strict rules for files and folders naming)
- eslint-plugin-import-x
- eslint-plugin-jsdoc
- eslint-plugin-n
- eslint-plugin-perfectionist(Best sorting for everything in JS/TS)
-
eslint-plugin-prefer-arrow(No needed use
function
anymore) - eslint-plugin-promise
- eslint-plugin-regexp
- eslint-plugin-unicorn(🦄)
- json
**/*.jsonc
,**/*.json
files(e.g. tsconfig.json, src/some-path/file.json) rules: eslint-plugin-jsonc - markdown
**/*.md
files rules: @eslint/markdown - ignores: common ignore rules for
**/dist/**
,**/node_modules/**
-
package.json
rules: eslint-plugin-package-json +json
rules - react
**/*.jsx
,**/*.tsx
files rules +javascript
:- eslint-plugin-jsx-a11y(Static AST checker for accessibility rules on JSX elements)
- eslint-plugin-react-hooks eslint-plugin-react-perf
- eslint-plugin-react
- svelte
**/*.svelte
files rules: eslint-plugin-svelte +javascript
rules - typescript
**/*.cts
,**/*.mts
,**/*.ts
files rules: typescript-eslint +javascript
rules - vitest
**/*.spec.cts
,**/*.spec.mts
,**/*.spec.ts
,**/*.test.cts
,**/*.test.mts
,**/*.test.ts
files rules: @vitest/eslint-plugin - vue
**/*.vue
files rules +javascript
rules:- eslint-plugin-vue-scoped-css
- eslint-plugin-vue
-
eslint-plugin-vuejs-accessibility(An eslint plugin for checking accessibility rules from within
.vue
files)
Create eslint.config.mjs
in your project root:
import { configs } from '@libs-for-dev/eslint-rules'
export default [
configs.ignores,
configs.javascript,
configs.json,
configs.markdown,
configs.packageJson,
]
import { configs } from '@libs-for-dev/eslint-rules'
export default [
configs.ignores,
configs.typescript,
configs.json,
configs.markdown,
configs.packageJson,
]
import { configs } from '@libs-for-dev/eslint-rules'
export default [
configs.ignores,
configs.typescript, // if using TypeScript
configs.vue,
configs.json,
configs.markdown,
configs.packageJson,
]
import { configs } from '@libs-for-dev/eslint-rules'
export default [
configs.typescript,
configs.vue,
{
files: configs.vue.files,
languageOptions: configs.vue.languageOptions,
plugins: configs.vue.plugins,
rules: {
'vue/block-lang': ['error', { script: { lang: 'js' } }],
},
},
{
plugins: {
...configs.javascript.plugins,
},
rules: {
'check-file/filename-naming-convention': [
'error', { '**/*.vue': 'CAMEL_CASE' },
],
},
},
{
files: ['**/*.test.ts'],
rules: {
'max-lines-per-function': ['error', { max: 80 }],
},
},
{
files: ['/some/specific/folder/*.ts'],
rules: {
'max-lines': 'off',
},
}
]
-
Error Prevention
-
no-unused-vars
- Prevent unused variables -
no-undef
- Prevent usage of undeclared variables -
no-console
- Disallow console.log and similar methods -
no-debugger
- Disallow debugger statements
-
-
Best Practices
-
prefer-arrow
- Enforce using arrow functions -
prefer-const
- Require const declarations for variables that are never reassigned -
no-var
- Prevent usage of var -
promise/catch-or-return
- Enforce handling of Promises rejection
-
-
Formatting
-
@stylistic/indent
- Enforce consistent indentation -
@stylistic/quotes
- Enforce consistent quote style -
@stylistic/semi
- Enforce consistent semicolon usage -
@stylistic/comma-dangle
- Enforce consistent comma style
-
-
Naming Conventions
-
check-file/filename-naming-convention
- Enforce file naming conventions -
check-file/folder-naming-convention
- Enforce folder naming conventions
-
-
Type Safety
@typescript-eslint/strict-boolean-expressions
@typescript-eslint/no-explicit-any
@typescript-eslint/explicit-function-return-type
@typescript-eslint/explicit-member-accessibility
-
Hooks
-
react-hooks/rules-of-hooks
- Enforce Rules of Hooks -
react-hooks/exhaustive-deps
- Verify dependencies array
-
-
Accessibility
-
jsx-a11y/alt-text
- Enforce alt text for images -
jsx-a11y/click-events-have-key-events
- Ensure keyboard accessibility
-
-
Template
-
vue/no-unused-components
- Prevent unused components -
vue/valid-template-root
- Enforce valid template root -
vue/multi-word-component-names
- Enforce multi-word component names
-
-
Accessibility
-
vuejs-accessibility/alt-text
- Enforce alt text for images -
vuejs-accessibility/click-events-have-key-events
- Ensure keyboard accessibility
-
-
Best Practices
-
vitest/expect-expect
- Enforce expecting test results -
vitest/no-disabled-tests
- Disallow disabled tests -
vitest/no-focused-tests
- Disallow focused tests
-
-
JSDoc
-
jsdoc/require-jsdoc
- Require JSDoc comments -
jsdoc/require-param
- Require parameter documentation -
jsdoc/require-returns
- Require return documentation
-
-
Organization
-
import-x/order
- Enforce import order -
import-x/no-duplicates
- Prevent duplicate imports -
perfectionist/sort-imports
- Sort import statements
-
-
React
-
react-perf/jsx-no-new-object-as-prop
- Prevent new objects in props -
react-perf/jsx-no-new-array-as-prop
- Prevent new arrays in props
-
-
Vue
-
vue/no-async-in-computed-properties
- Prevent async computed properties -
vue/no-side-effects-in-computed-properties
- Prevent side effects in computed
-
-
Safety
-
regexp/no-empty-group
- Disallow empty regex groups -
regexp/no-useless-quantifier
- Prevent useless quantifiers
-
-
Maintenance
-
package-json/sort-fields
- Enforce consistent field ordering -
package-json/valid-dependencies
- Ensure valid dependencies
-