Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
48 commits
Select commit Hold shift + click to select a range
e8b9450
chore: wipe for next
kireevmp Dec 29, 2025
ce27423
initial
kireevmp Dec 26, 2025
e4724f2
added: docs
kireevmp Dec 26, 2025
ded6a93
added(docs): changelog
kireevmp Dec 26, 2025
173cb9c
chore: linting
kireevmp Dec 26, 2025
4af66f0
feat: no-watch
kireevmp Dec 27, 2025
d460a42
feat: no-guard
kireevmp Dec 27, 2025
9371f0a
feat: no-forward
kireevmp Dec 28, 2025
3e2e580
docs: rule table
kireevmp Dec 28, 2025
b76ff50
feat: watch src markdown
kireevmp Dec 28, 2025
9d4ca77
fix: handle nested mapping
kireevmp Dec 28, 2025
289e6ec
feat: keep options order
kireevmp Dec 28, 2025
44baa72
feat: no-useless-methods
kireevmp Dec 28, 2025
70d1485
feat: enforce-store-naming-convention
kireevmp Dec 28, 2025
bb54c11
feat: enforce-gate-naming-convention
kireevmp Dec 28, 2025
7bf5023
feat: enforce-effect-naming-convention
kireevmp Dec 28, 2025
f6c72c5
feat: no-patronum-debug
kireevmp Dec 29, 2025
73087ef
feat: strict-effect-handlers
kireevmp Dec 29, 2025
0711236
feat: mandatory-scope-binding
kireevmp Dec 29, 2025
6e2551e
feat: ci lint and test
kireevmp Dec 29, 2025
742fe1a
fix: ci node setup
kireevmp Dec 29, 2025
58ea248
fix: test long timeout in ci
kireevmp Dec 29, 2025
33e0b6c
feat: prefer-useUnit
kireevmp Dec 29, 2025
8e533e5
feat: no-ambiguity-target
kireevmp Dec 29, 2025
75eabae
feat: no-unnecessary-duplication
kireevmp Dec 30, 2025
d6d8814
feat: no-unnecessary-combination
kireevmp Dec 30, 2025
3302422
feat: no-duplicate-on
kireevmp Dec 30, 2025
1d622eb
feat: widen support for late eslint@8.57
kireevmp Dec 30, 2025
3eac557
docs: display presets + installation
kireevmp Dec 30, 2025
45bfe07
refactor: move static values out
kireevmp Dec 30, 2025
b38adc1
docs: rule table extract + instructions
kireevmp Dec 31, 2025
59485a8
chore(enforce-effect-naming-convention): switch regex negation to esq…
kireevmp Jan 3, 2026
07cd373
chore: move regex out of create
kireevmp Jan 4, 2026
f3c8e2f
fix(no-unnecessary-combination): combine with fn
kireevmp Jan 5, 2026
c8f3ce3
test(enforce-store-naming-convention): allow as argument
kireevmp Jan 5, 2026
7b02970
chore: bump dependencies
kireevmp Jan 5, 2026
39a64e1
docs: update readme & docs home
kireevmp Jan 6, 2026
0d35500
feat: no-domain-unit-creators
kireevmp Jan 7, 2026
0c2e67d
test: run & improve coverage
kireevmp Jan 7, 2026
1d99e8b
docs: search & tiny improvements
kireevmp Jan 7, 2026
c0f3e01
feat: no-duplicate-clock-or-source-array-values
kireevmp Jan 9, 2026
042af53
chore: bump deps
kireevmp Jan 9, 2026
b8a8229
docs: add redirects to presets
kireevmp Jan 9, 2026
f43b03b
docs: amend preset redirect
kireevmp Jan 9, 2026
22f5650
docs: added changelog entry
kireevmp Jan 10, 2026
b07c23b
feat: support legacy config
kireevmp Jan 12, 2026
5d62cac
chore: bump deps
kireevmp Jan 13, 2026
fd8e784
feat: add trusted publish workflow
kireevmp Jan 13, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
25 changes: 0 additions & 25 deletions .github/workflows/ci.yml

This file was deleted.

29 changes: 29 additions & 0 deletions .github/workflows/release.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
name: Publish Release

on:
push:
tags:
- "v*"

permissions:
id-token: write
contents: read

jobs:
release:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v6

- uses: actions/setup-node@v6
with:
registry-url: "https://registry.npmjs.org"
node-version: "25.x"

- uses: pnpm/action-setup@v4
with:
cache: true

- run: pnpm install --frozen-lockfile
- run: pnpm publish
25 changes: 25 additions & 0 deletions .github/workflows/test.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
name: Lint & Test

on: [push]

jobs:
lint-and-test:
runs-on: ubuntu-latest

strategy:
matrix:
node-version: ["20.9", "21.x", "22.x", "24.x"]

steps:
- uses: actions/checkout@v6

- uses: actions/setup-node@v6
with:
node-version: ${{ matrix.node-version }}

- uses: pnpm/action-setup@v4

- run: pnpm install --frozen-lockfile

- run: pnpm lint
- run: pnpm test
153 changes: 147 additions & 6 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,7 +1,148 @@
node_modules
coverage
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
lerna-debug.log*

# Mac OS
.DS_Store
docs/.vitepress/dist
docs/**/__*.md
docs/changelog.md
docs/.vitepress/cache

# Diagnostic reports (https://nodejs.org/api/report.html)
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json

# Runtime data
pids
*.pid
*.seed
*.pid.lock

# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov

# Coverage directory used by tools like istanbul
coverage
*.lcov

# nyc test coverage
.nyc_output

# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
.grunt

# Bower dependency directory (https://bower.io/)
bower_components

# node-waf configuration
.lock-wscript

# Compiled binary addons (https://nodejs.org/api/addons.html)
build/Release

# Dependency directories
node_modules/
jspm_packages/

# Snowpack dependency directory (https://snowpack.dev/)
web_modules/

# TypeScript cache
*.tsbuildinfo

# Optional npm cache directory
.npm

# Optional eslint cache
.eslintcache

# Optional stylelint cache
.stylelintcache

# Optional REPL history
.node_repl_history

# Output of 'npm pack'
*.tgz

# Yarn Integrity file
.yarn-integrity

# dotenv environment variable files
.env
.env.*
!.env.example

# parcel-bundler cache (https://parceljs.org/)
.cache
.parcel-cache

# Next.js build output
.next
out

# Nuxt.js build / generate output
.nuxt
dist
.output

# Gatsby files
.cache/
# Comment in the public line in if your project uses Gatsby and not Next.js
# https://nextjs.org/blog/next-9-1#public-directory-support
# public

# vuepress build output
.vuepress/dist

# vuepress v2.x temp and cache directory
.temp
.cache

# Sveltekit cache directory
.svelte-kit/

# vitepress build output
**/.vitepress/dist

# vitepress cache directory
**/.vitepress/cache

# Docusaurus cache and generated files
.docusaurus

# Serverless directories
.serverless/

# FuseBox cache
.fusebox/

# DynamoDB Local files
.dynamodb/

# Firebase cache directory
.firebase/

# TernJS port file
.tern-port

# Stores VSCode versions used for testing VSCode extensions
.vscode-test

# yarn v3
.pnp.*
.yarn/*
!.yarn/patches
!.yarn/plugins
!.yarn/releases
!.yarn/sdks
!.yarn/versions

# Vite files
vite.config.js.timestamp-*
vite.config.ts.timestamp-*
.vite/

# Vitepress
.vitepress/dist
.vitepress/cache
8 changes: 0 additions & 8 deletions .npmignore

This file was deleted.

1 change: 0 additions & 1 deletion .nvmrc

This file was deleted.

8 changes: 8 additions & 0 deletions .prettierrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"semi": false,
"quoteProps": "consistent",
"singleQuote": false,
"printWidth": 120,

"plugins": ["prettier-plugin-embed"]
}
29 changes: 29 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,34 @@
# Changelog

## v0.17.0

### Breaking Changes

- Minimum Node.js version is now `^20.9.0 || >=21.1.0` (matches ESLint requirements)
- Supports ESLint `^8.57.0 || ^9.0.0`
- Codebase rewritten in TypeScript; 19 of 20 existing + 1 new rule (re)implemented using modern `@typescript-eslint` APIs
- Now requires type-aware linting with `@typescript-eslint`

### Core Changes

- Native ESLint v9 flat config support via `flatConfigs` (ESLint v8 `.eslintrc` still supported)
- Public TypeScript type definitions (passes `publint` & `attw`)

### Rule Changes

- `no-forward` promoted from `future` to `recommended` preset
- `no-guard` promoted from `future` to `recommended` preset
- `no-domain-unit-creators` added to `future` preset (new rule)
- `prefer-sample-over-forward-with-mapping` removed in favor of `no-forward`
- `enforce-effect-naming-convention` now handles `combine + fn` correctly

### Internal

- Added bundling via `tsdown`
- Replaced Jest with Vitest v4; switched to `@typescript-eslint/rule-tester`
- Documentation upgraded to VitePress v2 with colocated markdown rule documentation
- Fixed `package.json` dependency declarations

## v0.16.0

- Support typescript-eslint@8 ([PR #180](https://github.com/effector/eslint-plugin/pull/170/files)) by @7rulnik
Expand Down
61 changes: 24 additions & 37 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,55 +1,42 @@
# eslint-plugin-effector
<h1 align="center">eslint-plugin-effector</h1>

Enforcing best practices for [Effector](http://effector.dev/). Documentation available at [eslint.effector.dev](https://eslint.effector.dev/).
An ESLint plugin for enforcing best practices for [Effector](https://effector.dev).

> This plugin uses TypeScript for more precise results, but JavaScript is supported too.
For comprehensive documentation, including rules and configuration guides, visit official documentation at [eslint.effector.dev](https://eslint.effector.dev).

## Installation

Install [ESLint](http://eslint.org) and `eslint-plugin-effector`:
First, install [ESLint](https://eslint.org) and the plugin:

### pnpm
```bash
# pnpm
pnpm add --save-dev eslint eslint-plugin-effector

```
$ pnpm install --dev eslint
$ pnpm install --dev eslint-plugin-effector
```

### yarn
# yarn
yarn add --dev eslint eslint-plugin-effector

```
$ yarn add --dev eslint
$ yarn add --dev eslint-plugin-effector
# npm
npm install --save-dev eslint eslint-plugin-effector
```

### npm
## Usage

```
$ npm install --dev eslint
$ npm install --dev eslint-plugin-effector
```
This plugin supports the new [flat config format](https://eslint.org/docs/latest/use/configure/configuration-files) for ESLint. Start by adding the `recommended` preset to your `eslint.config.js`:

## Usage
```js
// eslint.config.js
import effector from "eslint-plugin-effector"

Add `effector` to the plugins section of your `.eslintrc` configuration file. You can omit the `eslint-plugin-` prefix:
export default [
/* ... */

```json
{
"plugins": ["effector"],
"extends": ["plugin:effector/recommended", "plugin:effector/scope"]
}
// Include the recommended preset:
effector.flatConfigs.recommended,
]
```

Read more detailed docs on [eslint.effector.dev](https://eslint.effector.dev/)

## Maintenance
To explore all available presets, refer to the [Rules](https://eslint.effector.dev/rules/) section of the documentation. For more details or legacy config usage, see the [Installation](https://eslint.effector.dev/installation/) section.

### Release flow
### TypeScript Requirement

1. Bump `version` in [package.json](package.json)
2. Fill [CHANGELOG.md](CHANGELOG.md)
3. Commit changes by `git commit -m "Release X.X.X"`
4. Create git tag for release by `git tag -a vX.X.X -m "vX.X.X"`
5. Push changes to remote by `git push --follow-tags`
6. Release package to registry by `pnpm clean-publish`
7. Fill release page with changelog on GitHub
This plugin leverages TypeScript for accurate linting. You must have TypeScript and type-aware linting configured. For setup instructions, please see the [official `typescript-eslint` documentation](https://typescript-eslint.io/getting-started/typed-linting/).
7 changes: 0 additions & 7 deletions config/future.js

This file was deleted.

5 changes: 0 additions & 5 deletions config/patronum.js

This file was deleted.

7 changes: 0 additions & 7 deletions config/react.js

This file was deleted.

Loading