Enforce rules to make your code purely functional by disallowing some language constructs.
Note: Your code must be using ES6 modules, because module.exports = is considered impure code!
-
ExpressionStatements are disallowed. ExpressionStatements are statements whose result is not used (i.e. not stored in a variable, thrown, or returned). This signifys that some side-effect is taking place.
array.push(1)
Binding to a variable is allowed, though, e.g.
export function getArrayLength (array) { const arrayLength = array.length return arrayLength }
To prevent cheating by just binding side-effect to an unused variable, use
no-unused-varsrule. -
AssignmentExpressions are disallowed for obvious reasons.
-
UpdateExpressions are disallowed for obvious reasons.
-
SequenceExpressions are disallowed, because
(a, b, c)results inc, and that meansaandbare evaluated for purely side-effects.
You'll first need to install ESLint:
$ npm i eslint --save-dev
Next, install eslint-plugin-pure:
$ npm install purely-functional/eslint-plugin-pure --save-dev
Note: If you installed ESLint globally (using the -g flag) then you must also install eslint-plugin-pure globally.
Add pure to the plugins section of your .eslintrc configuration file. You can omit the eslint-plugin- prefix:
plugins:
- pureThen in the files you want to make pure, put this comment in:
/* eslint pure/pure: 2 */Use these built-in recommended rules. These rules are useful outside of pure code but when used in conjunction with this plugin yields a powerful effect:
rules:
no-var: 2
prefer-const: 2
no-undef: 2
no-unused-vars: 2Also look into eslint-plugin-immutable for even more enforcement (such as disallowing this).
Probably not. I recommend using this in your reducers or in entity modules.