This ESLint plugin is intended to prevent issues with RxJS.
Most of these rules require TypeScript typed linting and are indicated as such below.
This project started as a fork of eslint-plugin-rxjs
but has since introduced new features which involve breaking changes.
-
Migrate your config from the old
.eslintrcformat toeslint.config.mjs(or similar), and uninstalleslint-plugin-rxjs.- See ESLint's guide here: [https://eslint.org/docs/latest/use/configure/migration-guide].
- If you need to continue using the deprecated format, use the original
eslint-plugin-rxjsor a different fork.
-
Install
eslint-plugin-rxjs-x, and import it into your config.+ import rxjsX from 'eslint-plugin-rxjs-x'; -
If you previously used the
plugin:rxjs/recommendedshared config, addrxjsX.configs.recommendedto yourconfigsblock:configs: { + rxjsX.configs.recommended, },- Note:
eslint-plugin-rxjs-xprovides astrictshared config, so consider usingrxjsX.configs.strictinstead.
- Note:
-
If you previously did not use a shared config, add the plugin to your
pluginsblock with the new namespace:plugins: { + 'rxjs-x': rxjsX, },- Note: this is unnecessary if you are using a shared config.
-
In your
rulesblock, replace the namespacerxjswithrxjs-x:- 'rxjs/no-subject-value': 'error', + 'rxjs-x/no-subject-value': 'error',
-
If you previously used
rxjs/no-ignored-observable, replace it withrxjs-x/no-floating-observables.- 'rxjs/no-ignored-observable': 'error', + 'rxjs-x/no-floating-observables': 'error',
Tip
A complete description of all changes are documented in the CHANGELOG file.
See typescript-eslint's Getting Started for a full ESLint setup guide.
- Enable typed linting.
- See Linting with Type Information for more information.
- Start with the
recommendedshared config in youreslint.config.mjs.
// @ts-check
import { defineConfig } from 'eslint/config';
import tseslint from 'typescript-eslint';
import rxjsX from 'eslint-plugin-rxjs-x';
export default defineConfig({
extends: [
...tseslint.configs.recommended,
rxjsX.configs.recommended,
],
languageOptions: {
parserOptions: {
projectService: true,
},
},
});| Name | |
|---|---|
| ✅ | recommended |
| 🔒 | strict |
The package includes the following rules.
💼 Configurations enabled in.
✅ Set in the recommended configuration.
🔒 Set in the strict configuration.
🔧 Automatically fixable by the --fix CLI option.
💡 Manually fixable by editor suggestions.
💭 Requires type information.
❌ Deprecated.
| Name | Description | 💼 | 🔧 | 💡 | 💭 | ❌ |
|---|---|---|---|---|---|---|
| ban-observables | Disallow banned observable creators. | |||||
| ban-operators | Disallow banned operators. | 💭 | ||||
| finnish | Enforce Finnish notation. | 💭 | ||||
| just | Require the use of just instead of of. |
🔧 | ||||
| macro | Require the use of the RxJS Tools Babel macro. | 🔧 | ❌ | |||
| no-async-subscribe | Disallow passing async functions to subscribe. |
✅ 🔒 | 💭 | |||
| no-compat | Disallow the rxjs-compat package. |
❌ | ||||
| no-connectable | Disallow operators that return connectable observables. | 💭 | ||||
| no-create | Disallow the static Observable.create function. |
✅ 🔒 | 💭 | |||
| no-cyclic-action | Disallow cyclic actions in effects and epics. | 💭 | ||||
| no-explicit-generics | Disallow unnecessary explicit generic type arguments. | |||||
| no-exposed-subjects | Disallow public and protected subjects. | 🔒 | 💭 | |||
| no-finnish | Disallow Finnish notation. | 💭 | ||||
| no-floating-observables | Require Observables to be handled appropriately. | 🔒 | 💭 | |||
| no-ignored-default-value | Disallow using firstValueFrom, lastValueFrom, first, and last without specifying a default value. |
🔒 | 💭 | |||
| no-ignored-error | Disallow calling subscribe without specifying an error handler. |
🔒 | 💭 | |||
| no-ignored-notifier | Disallow observables not composed from the repeatWhen or retryWhen notifier. |
✅ 🔒 | 💭 | |||
| no-ignored-replay-buffer | Disallow using ReplaySubject, publishReplay or shareReplay without specifying the buffer size. |
✅ 🔒 | ||||
| no-ignored-subscribe | Disallow calling subscribe without specifying arguments. |
💭 | ||||
| no-ignored-subscription | Disallow ignoring the subscription returned by subscribe. |
💭 | ||||
| no-ignored-takewhile-value | Disallow ignoring the value within takeWhile. |
✅ 🔒 | ||||
| no-implicit-any-catch | Disallow implicit any error parameters in catchError operators. |
✅ 🔒 | 🔧 | 💡 | 💭 | |
| no-index | Disallow importing index modules. | ✅ 🔒 | ||||
| no-internal | Disallow importing internal modules. | ✅ 🔒 | 🔧 | 💡 | ||
| no-misused-observables | Disallow Observables in places not designed to handle them. | 🔒 | 💭 | |||
| no-nested-subscribe | Disallow calling subscribe within a subscribe callback. |
✅ 🔒 | 💭 | |||
| no-redundant-notify | Disallow sending redundant notifications from completed or errored observables. | ✅ 🔒 | 💭 | |||
| no-sharereplay | Disallow unsafe shareReplay usage. |
✅ 🔒 | ||||
| no-subclass | Disallow subclassing RxJS classes. | 🔒 | 💭 | |||
| no-subject-unsubscribe | Disallow calling the unsubscribe method of subjects. |
✅ 🔒 | 💭 | |||
| no-subject-value | Disallow accessing the value property of a BehaviorSubject instance. |
💭 | ||||
| no-subscribe-handlers | Disallow passing handlers to subscribe. |
💭 | ||||
| no-subscribe-in-pipe | Disallow calling of subscribe within any RxJS operator inside a pipe. |
✅ 🔒 | 💭 | |||
| no-tap | Disallow the tap operator. |
❌ | ||||
| no-topromise | Disallow use of the toPromise method. |
✅ 🔒 | 💡 | 💭 | ||
| no-unbound-methods | Disallow passing unbound methods. | ✅ 🔒 | 💭 | |||
| no-unsafe-catch | Disallow unsafe catchError usage in effects and epics. |
💭 | ||||
| no-unsafe-first | Disallow unsafe first/take usage in effects and epics. |
💭 | ||||
| no-unsafe-subject-next | Disallow unsafe optional next calls. |
✅ 🔒 | 💭 | |||
| no-unsafe-switchmap | Disallow unsafe switchMap usage in effects and epics. |
💭 | ||||
| no-unsafe-takeuntil | Disallow applying operators after takeUntil. |
✅ 🔒 | 💭 | |||
| prefer-observer | Disallow passing separate handlers to subscribe and tap. |
✅ 🔒 | 🔧 | 💡 | 💭 | |
| prefer-root-operators | Disallow importing operators from rxjs/operators. |
✅ 🔒 | 🔧 | 💡 | ||
| suffix-subjects | Enforce the use of a suffix in subject identifiers. | 💭 | ||||
| throw-error | Enforce passing only Error values to throwError or Subject.error. |
✅ 🔒 | 💭 |