Home

Awesome

eslint-plugin-rxjs

GitHub License NPM version Downloads Build status dependency status devDependency Status peerDependency Status

This package contains a bunch of ESLint rules for RxJS. Essentially, it's a re-implementation of the rules that are in the rxjs-tslint-rules package. (The Angular-specific rules in rxjs-tslint-rules have been re-implemented in eslint-plugin-rxjs-angular.)

Some of the rules are rather opinionated and are not included in the recommended configuration. Developers can decide for themselves whether they want to enable opinionated rules.

Almost all of these rules require the TypeScript parser for ESLint.

Install

Install the ESLint TypeScript parser using npm:

npm install @typescript-eslint/parser --save-dev

Install the package using npm:

npm install eslint-plugin-rxjs --save-dev

Configure the parser and the parserOptions for ESLint. Here, I use a .eslintrc.js file for the configuration:

const { join } = require("path");
module.exports = {
  parser: "@typescript-eslint/parser",
  parserOptions: {
    ecmaVersion: 2019,
    project: join(__dirname, "./tsconfig.json"),
    sourceType: "module"
  },
  plugins: ["rxjs"],
  extends: [],
  rules: {
    "rxjs/no-async-subscribe": "error",
    "rxjs/no-ignored-observable": "error",
    "rxjs/no-ignored-subscription": "error",
    "rxjs/no-nested-subscribe": "error",
    "rxjs/no-unbound-methods": "error",
    "rxjs/throw-error": "error"
  }
};

Or, using the recommended configuration:

const { join } = require("path");
module.exports = {
  parser: "@typescript-eslint/parser",
  parserOptions: {
    ecmaVersion: 2019,
    project: join(__dirname, "./tsconfig.json"),
    sourceType: "module"
  },
  extends: ["plugin:rxjs/recommended"],
};

Rules

The package includes the following rules.

Rules marked with ✅ are recommended and rules marked with 🔧 have fixers.

RuleDescription
ban-observablesForbids the use of banned observables.
ban-operatorsForbids the use of banned operators.
finnishEnforces the use of Finnish notation.
justEnforces the use of a just alias for of.🔧
no-async-subscribeForbids passing async functions to subscribe.
no-compatForbids importation from locations that depend upon rxjs-compat.
no-connectableForbids operators that return connectable observables.
no-createForbids the calling of Observable.create.
no-cyclic-actionForbids effects and epics that re-emit filtered actions.
no-explicit-genericsForbids explicit generic type arguments.
no-exposed-subjectsForbids exposed (i.e. non-private) subjects.
no-finnishForbids the use of Finnish notation.
no-ignored-errorForbids the calling of subscribe without specifying an error handler.
no-ignored-notifierForbids observables not composed from the repeatWhen or retryWhen notifier.
no-ignored-observableForbids the ignoring of observables returned by functions.
no-ignored-replay-bufferForbids using ReplaySubject, publishReplay or shareReplay without specifying the buffer size.
no-ignored-subscribeForbids the calling of subscribe without specifying arguments.
no-ignored-subscriptionForbids ignoring the subscription returned by subscribe.
no-ignored-takewhile-valueForbids ignoring the value within takeWhile.
no-implicit-any-catchLike the no-implicit-any-catch rule in @typescript-eslint/eslint-plugin, but for the catchError operator instead of catch clauses.🔧
no-indexForbids the importation from index modules - for the reason, see this issue.
no-internalForbids the importation of internals.🔧
no-nested-subscribeForbids the calling of subscribe within a subscribe callback.
no-redundant-notifyForbids redundant notifications from completed or errored observables.
no-sharereplayForbids using the shareReplay operator.
no-subclassForbids subclassing RxJS classes.
no-subject-unsubscribeForbids calling the unsubscribe method of a subject instance.
no-subject-valueForbids accessing the value property of a BehaviorSubject instance.
no-subscribe-handlersForbids the passing of handlers to subscribe.
no-topromiseForbids the use of the toPromise method.
no-unbound-methodsForbids the passing of unbound methods.
no-unsafe-catchForbids unsafe catchError usage in effects and epics.
no-unsafe-firstForbids unsafe first/take usage in effects and epics.
no-unsafe-subject-nextForbids unsafe optional next calls.
no-unsafe-switchmapForbids unsafe switchMap usage in effects and epics.
no-unsafe-takeuntilForbids the application of operators after takeUntil.
prefer-observerForbids the passing separate handlers to subscribe and tap.🔧
suffix-subjectsEnforces the use of a suffix in subject identifiers.
throw-errorEnforces the passing of Error values to error notifications.