A collection of ESLint rules for fp-ts
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 settingtsconfigRootDir
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
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 |
💡 | 🦄 |
🔧 = auto-fixable via --fix
(or via the appropriate editor configuration)
💡 = provides in-editor suggestions that need to be applied manually
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:
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
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"]
}