Skip to content

JasonWeinzierl/eslint-plugin-rxjs-x

 
 

Repository files navigation

eslint-plugin-rxjs-x

GitHub License NPM version

This ESLint plugin is intended to prevent issues with RxJS.

Most of these rules require TypeScript typed linting and are indicated as such below.

Migrating from eslint-plugin-rxjs

This project is a fork of eslint-plugin-rxjs initially started to support the new ESLint flat config format. There are some breaking changes:

  • The old .eslintrc format is not supported.
    • If you need to continue using this old format, use the original eslint-plugin-rxjs or a different fork.
  • The plugin namespace specified in the recommended config was changed from rxjs to rxjs-x.
    • e.g. In your ESLint config, rxjs/no-subject-value should be renamed to rxjs-x/no-subject-value.
  • The rule rxjs/no-ignored-observable is renamed to rxjs-x/no-floating-observables.

A complete description of all changes are documented in the CHANGELOG file.

Install

See typescript-eslint's Getting Started for a full ESLint setup guide.

Then use the recommended configuration in your eslint.config.mjs and enable typed linting:

// @ts-check
import tseslint from 'typescript-eslint';
import rxjsX from 'eslint-plugin-rxjs-x';

export default tseslint.config({
    extends: [
        ...tseslint.configs.recommended,
        rxjsX.configs.recommended,
    ],
    languageOptions: {
        parserOptions: {
            projectService: true,
        },
    },
});

The above example uses typescript-eslint's built-in config to set up the TypeScript parser for us. Enabling projectService then turns on typed linting. See Linting with Type Information for details.

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 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. ✅ 🔒 💭

About

ESLint v9 rules for RxJS

Resources

License

Stars

Watchers

Forks

Languages

  • TypeScript 99.4%
  • JavaScript 0.6%