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.

Migration Guide from eslint-plugin-rxjs

This project started as a fork of eslint-plugin-rxjs but has since introduced new features which involve breaking changes.

  1. Migrate your config from the old .eslintrc format to eslint.config.mjs (or similar), and uninstall eslint-plugin-rxjs.

  2. Install eslint-plugin-rxjs-x, and import it into your config.

    + import rxjsX from 'eslint-plugin-rxjs-x';
  3. If you previously used the plugin:rxjs/recommended shared config, add rxjsX.configs.recommended to your configs block:

    configs: {
    +   rxjsX.configs.recommended,
    },
    • Note: eslint-plugin-rxjs-x provides a strict shared config, so consider using rxjsX.configs.strict instead.
  4. If you previously did not use a shared config, add the plugin to your plugins block with the new namespace:

    plugins: {
    +   'rxjs-x': rxjsX,
    },
    • Note: this is unnecessary if you are using a shared config.
  5. In your rules block, replace the namespace rxjs with rxjs-x:

    -   'rxjs/no-subject-value': 'error',
    +   'rxjs-x/no-subject-value': 'error',
  6. If you previously used rxjs/no-ignored-observable, replace it with rxjs-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.

Installation Guide

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

  1. Enable typed linting.
  2. Start with the recommended shared config in your eslint.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,
        },
    },
});

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

About

ESLint v9 rules for RxJS

Resources

License

Contributing

Stars

Watchers

Forks

Languages

  • TypeScript 99.5%
  • JavaScript 0.5%