eslint-plugin-rxjs-x
v0.9.4
Published
Modern ESLint plugin for RxJS
Maintainers
Readme
eslint-plugin-rxjs-x
This ESLint plugin is intended to prevent issues with RxJS.
Most of these rules require TypeScript typed linting and are indicated as such below.
Installation Guide (Flat Configuration)
See typescript-eslint's Getting Started for a full ESLint setup guide.
Install
eslint-plugin-rxjs-xusing your preferred package manager.Enable typed linting.
- See Linting with Type Information for more information.
Import this plugin into your config. Add the
rxjsX.configs.recommendedshared config to your configuration like so:// @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, }, }, });
Additionally, consider if the rxjsX.configs.strict shared config is right for your project.
Legacy Migration Guide from eslint-plugin-rxjs
[!TIP] A complete description of all changes from
eslint-plugin-rxjsare documented in the CHANGELOG file.
This project started as a fork of eslint-plugin-rxjs
but is still compatible with the eslintrc configuration format.
[!WARNING] eslintrc compatibility will be removed in v1. Users are highly encouraged to upgrade to ESLint's flat configuration format. See: [https://eslint.org/docs/latest/use/configure/migration-guide]
Install
eslint-plugin-rxjs-xusing your preferred package manager.If you previously used the
plugin:rxjs/recommendedshared config, replace it withplugin:rxjs-x/recommended-legacy:"extends": [ "plugin:@typescript-eslint/recommended", - "plugin:rxjs/recommended", + "plugin:rxjs-x/recommended-legacy", ],If you previously did not use a shared config, then replace the
rxjsplugin to yourpluginsblock:"plugins": [ "@typescript-eslint", - "rxjs", + "rxjs-x", ],- Note: this is unnecessary if you are using the
recommended-legacyshared config.
- Note: this is unnecessary if you are using the
In your
rulesblocks, replace the namespacerxjswithrxjs-xfor all rules:"rules": { - "rxjs/no-subject-value": "error", + "rxjs-x/no-subject-value": "error", },- Note: if your project has inline comments (e.g.
eslint-disable-next-line) referencingrxjsrules, you must update the namespace there too.
- Note: if your project has inline comments (e.g.
If you previously used
rxjs/no-ignored-observable, consider replacing it withrxjs-x/no-floating-observables.no-ignored-observablewill be removed in v1.- 'rxjs/no-ignored-observable': 'error', + 'rxjs-x/no-floating-observables': 'error',
Configs
| | Name |
| :- | :------------ |
| ✅ | recommended |
| 🔒 | strict |
Rules
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 and Subject.create functions. | ✅ 🔒 | | | 💭 | |
| 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-observable | Disallow ignoring of observables returned by functions. | | | | | ❌ |
| 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, subscribe, and tap. | ✅ 🔒 | 🔧 | 💡 | 💭 | |
| 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-sharereplay-before-takeuntil | Disallow using shareReplay({ refCount: false }) before takeUntil. | 🔒 | | | | |
| 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-unnecessary-collection | Disallow unnecessary usage of collection arguments with single values. | 🔒 | | | | |
| 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. | ✅ 🔒 | | 💡 | 💭 | |
