Skip to content

buildo/eslint-plugin-fp-ts

Repository files navigation

badge npm npm

eslint-plugin-fp-ts

A collection of ESLint rules for fp-ts

Installation

Assuming ESlint is installed locally in your project:

# npm
npm install --save-dev eslint-plugin-fp-ts

# yarn
yarn add --dev eslint-plugin-fp-ts

Then enable the plugin in your .eslintrc config

{
  "plugins": ["fp-ts"]
}

and enable the rules you want, for example

{
  "plugins": ["fp-ts"],
  "rules": {
    "fp-ts/no-lib-imports": "error"
  }
}

If you want to enable rules that require type information (see the table below), then you will also need to add some extra info:

module.exports = {
  plugins: ["fp-ts"],
  parserOptions: {
    tsconfigRootDir: __dirname,
    project: ["./tsconfig.json"],
  },
  rules: {
    "fp-ts/no-discarded-pure-expression": "error",
  },
};

If your project is a multi-package monorepo, you can follow the instructions here.

⚠️ Note that you will need to make the ESLint config file a .js file, due to the need of setting tsconfigRootDir to __dirname. This is necessary to make both editor integrations and the CLI work with the correct path. More info here: typescript-eslint/typescript-eslint#251

List of supported rules

Rule Description Fixable Requires type-checking
fp-ts/no-lib-imports Disallow imports from fp-ts/lib/ 🔧
fp-ts/no-pipeable Disallow imports from the pipeable module 🔧
fp-ts/no-module-imports Disallow imports from fp-ts modules 🔧
fp-ts/no-redundant-flow Remove redundant uses of flow 🔧
fp-ts/prefer-traverse Replace map + sequence with traverse 💡
fp-ts/prefer-chain Replace map + flatten with chain 💡
fp-ts/prefer-bimap Replace map + mapLeft with bimap 💡
fp-ts/no-discarded-pure-expression Disallow expressions returning pure data types (like Task or IO) in statement position 💡 🦄

Fixable legend:

🔧 = auto-fixable via --fix (or via the appropriate editor configuration)

💡 = provides in-editor suggestions that need to be applied manually

Configurations

Recommended

The plugin defines a recommended configuration with some reasonable defaults.

To use it, add it to the extends clause of your .eslintrc file:

{
  "extends": ["plugin:fp-ts/recommended"]
}

The rules included in this configuration are:

Recommended requiring type-checking

We also provide a recommended-requiring-type-checking which includes recommended rules which require type information.

This configuration needs to be included in addition to the recommended one:

{
  "extends": [
    "plugin:fp-ts/recommended",
    "plugin:fp-ts/recommended-requiring-type-checking"
  ]
}

👉 You can read more about linting with type information, including performance considerations here

All

The plugin also defines an all configuration which includes every available rule.

To use it, add it to the extends clause of your .eslintrc file:

{
  "extends": ["plugin:fp-ts/all"]
}