1.3.8 • Published 1 year ago

@rxlint/eslint-plugin v1.3.8

Weekly downloads
-
License
MIT
Repository
github
Last release
1 year ago

@rxlint/eslint-plugin

GitHub License NPM version Downloads GitHub Actions Workflow Status

This package is a fork of the package cartant/eslint-plugin-rxjs with trimmed and updated dependencies to work with both eslint 8 and 9. Angular-specific rules are in @rxlint/eslint-plugin-angular.

Some rules are opinionated and not included in the recommended configuration. Developers can enable them as needed. Most rules require the TypeScript parser for ESLint but there is a config provided to disable those.

Installation

Install the required packages:

npm install --save-dev eslint typescript @typescript-eslint/parser @rxlint/eslint-plugin
# or
yarn add --dev eslint typescript @typescript-eslint/parser @rxlint/eslint-plugin

Configuration

This plugin works with ESLint v8 (eslintrc) and v9 (eslint.config.js) configuration formats.

ESLint v8 Configuration

Add @rxlint/recommended to your extends array:

.eslintrc.js

module.exports = {
  files: ["**/*.ts"],
  extends: [
    "eslint:recommended",
    "plugin:@typescript-eslint/recommended-type-checked",
    "plugin:@typescript-eslint/stylistic-type-checked",
    "plugin:@rxlint/recommended",
  ],
  parser: "@typescript-eslint/parser",
  parserOptions: {
    ecmaVersion: "latest",
    project: true,
    sourceType: "module",
  },
  rules: {
    "@rxlint/no-async-subscribe": "error",
    "@rxlint/no-ignored-observable": "error",
    "@rxlint/no-ignored-subscription": "error",
    "@rxlint/no-nested-subscribe": "error",
    "@rxlint/no-unbound-methods": "error",
    "@rxlint/throw-error": "error",
  },
};

ESLint v9 Configuration

Import the plugin and add it to the extends array:

eslint.config.js

const rxjs = require("@rxlint/eslint-plugin");

module.exports = [
  {
    files: ["**/*.ts"],
    extends: [
      eslint.configs.recommended,
      tseslint.configs.recommendedTypeChecked,
      tseslint.configs.stylisticTypeChecked,
      rxjs.configs.recommendedTypeChecked,
    ],
  },
];

Disable Type-Aware Linting

Use the disable-type-checked config to turn off type-aware linting for specific file subsets.

ESLint v8

Add @rxlint/disable-type-checked-classic to your extends array:

.eslintrc.js

module.exports = {
  files: ['**/*.{config,test,spec}.{js,ts}'],
  extends: [
    "plugin:@typescript-eslint/disable-type-checked",
    "plugin:@rxlint/disable-type-checked",
  ],
};

ESLint v9

Import the plugin and add rxjs.config.disableTypeChecked to the extends array:

eslint.config.js

module.exports = {
  files: ['**/*.{config,test,spec}.{js,ts}'],
  extends: [
    tseslint.configs.disableTypeChecked,
    rxjs.config.disableTypeChecked,
  ],
};

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.
1.3.8

1 year ago

1.3.7

1 year ago

1.3.6

1 year ago

1.3.5

1 year ago

1.3.4

1 year ago

1.3.3

1 year ago

1.3.2

1 year ago

1.3.1

1 year ago

1.3.0

1 year ago

1.2.1

1 year ago