捐赠
企业用户
eslint-plugin-functional 作为 Tidelift 订阅服务的一部分提供。
Tidelift 正与 eslint-plugin-functional 的维护者以及不断壮大的开源维护者网络合作,
确保您的开源软件供应链现在及未来都符合企业标准。
了解更多。
入门指南
规则集
本插件提供以下规则集。
预设:
-
Strict (
configs.strict)
强制执行旨在严格实施函数式编程的推荐规则。 -
Recommended (
configs.recommended)
目标与strict预设相同,但稍显宽松,允许类函数式编码风格, 并能更好地与非函数式第三方库集成。 -
Lite (
configs.lite)
适合函数式编程新手或正在转换大型代码库的用户。
分类:
-
Currying (
configs.currying)
JavaScript 函数支持一些与柯里化函数不兼容的语法。为了强制执行柯里化, 应禁止使用这些语法。 -
No Exceptions (
configs.noExceptions)
函数式编程风格不使用运行时异常。相反,表达式通过产生值来指示错误。 -
No Mutations (
configs.noMutations)
防止对任何数据进行变更,因为那不符合函数式 -
无其他范式 (
configs.noOtherParadigms)
JavaScript 是多范式的,不仅允许函数式,还允许面向对象以及其他编程风格。 为了推广函数式风格,应防止使用其他范式风格。 -
无语句 (
configs.noStatements)
在函数式编程中,一切都是产生值的表达式。 JavaScript 有很多语法仅仅是语句,不产生值。 为了推广函数式风格,必须防止使用这些语法。 -
风格 (
configs.stylistic)
强制实施可被视为更函数式的代码风格。
其他:
-
全部 (
configs.all)
启用此插件中定义的所有规则。 -
关闭 (
configs.off)
禁用此插件中定义的所有规则。 -
禁用类型检查 (
configs.disableTypeChecked)
禁用所有需要类型信息的规则。 -
外部原生推荐 (
configs.externalVanillaRecommended)
配置推荐的 vanilla ESLint 规则。 -
外部 TypeScript 推荐 (
configs.externalTypeScriptRecommended)
配置推荐的 TypeScript ESLint 规则。 启用此规则集也将启用原生规则集。
以下部分 详细介绍了每个规则集启用了哪些规则。
规则
💼 在以下配置中启用。
⚠️ 在以下配置中设置为警告。
🚫 在以下配置中禁用。
在
currying 配置中设置。
☑️ 在 lite 配置中设置。
在
noExceptions 配置中设置。
在
noMutations 配置中设置。
在
noOtherParadigms 配置中设置。
在
noStatements 配置中设置。
✅ 在 recommended 配置中设置。
🔒 在 strict 配置中设置。
🎨 在 stylistic 配置中设置。
🔧 可通过 --fix CLI 选项 自动修复。
💡 可通过 编辑器建议 手动修复。
💭 需要 类型信息。
❌ 已弃用。
Currying
| 名称 | 描述 | 💼 | ⚠️ | 🚫 | 🔧 | 💡 | 💭 | ❌ |
|---|---|---|---|---|---|---|---|---|
| functional-parameters | 强制使用函数式参数。 | 💭 |
No Exceptions
| 名称 | 描述 | 💼 | ⚠️ | 🚫 | 🔧 | 💡 | 💭 | ❌ |
|---|---|---|---|---|---|---|---|---|
| no-promise-reject | 禁止拒绝 Promise。 | |||||||
| no-throw-statements | 禁止抛出异常。 | ☑️ | 💭 | |||||
| no-try-statements | 禁止 try-catch[-finally] 和 try-finally 模式。 | ☑️ ✅ |
禁止突变
| 名称 | 描述 | 💼 | ⚠️ | 🚫 | 🔧 | 💡 | 💭 | ❌ |
|---|---|---|---|---|---|---|---|---|
| immutable-data | 强制将数据视为不可变。 | ☑️ | 💭 | |||||
| no-let | 禁止使用可变变量。 | ☑️ | ||||||
| prefer-immutable-types | 要求函数参数被类型化为特定的不可变性 | ☑️ | 🔧 | 💡 | 💭 | |||
| prefer-readonly-type | 优先使用只读类型而非可变类型。 | 🔧 | 💭 | ❌ | ||||
| type-declaration-immutability | 基于模式强制类型的不可变性。 | ☑️ | 🔧 | 💡 | 💭 |
无其他范式
| 名称 | 描述 | 💼 | ⚠️ | 🚫 | 🔧 | 💡 | 💭 | ❌ |
|---|---|---|---|---|---|---|---|---|
| no-class-inheritance | 禁止在类中使用继承。 | ☑️ | ||||||
| no-classes | 禁止使用类。 | ☑️ | ||||||
| no-mixed-types | 限制类型,使其仅允许包含同种类型的成员。 | ☑️ | 💭 | |||||
| no-this-expressions | 禁止访问 this。 | ☑️ ✅ |
无语句
| 名称 | 描述 | 💼 | ⚠️ | 🚫 | 🔧 | 💡 | 💭 | ❌ |
|---|---|---|---|---|---|---|---|---|
| no-conditional-statements | 禁止条件语句。 | ☑️ | 💭 | |||||
| no-expression-statements | 禁止表达式语句。 | ☑️ | 💭 | |||||
| no-loop-statements | 禁止命令式循环。 | ☑️ | ||||||
| no-return-void | 禁止不返回任何值的函数。 | ☑️ | 💭 |
风格
| Name | Description | 💼 | ⚠️ | 🚫 | 🔧 | 💡 | 💭 | ❌ |
|---|---|---|---|---|---|---|---|---|
| prefer-property-signatures | Prefer property signatures over method signatures. | 🎨 | 💭 | |||||
| prefer-tacit | Replaces x => f(x) with just f. | 🎨 | 💡 | 💭 | ||||
| readonly-type | Require consistently using either readonly keywords or Readonly<T> | 🎨 | 🔧 | 💭 |
外部推荐规则
除上述规则外,我们还推荐了一些其他规则。
这些规则包含在 外部推荐 规则集中。
原生规则
-
no-var
没有这条规则,仍然可以创建可变的var变量。 -
no-param-reassign
不允许重新赋值函数参数,它们应被视为常量。 -
prefer-const
当从命令式代码风格转换为函数式风格时,这条规则提供了有用的修复器。
TypeScript 规则
-
@typescript-eslint/prefer-readonly
在处理类时,这条规则很有帮助。 -
@typescript-eslint/switch-exhaustiveness-check
虽然我们的 no-conditional-statements 规则也执行此检查, 但这条规则有一个修复器,可以实现未实现的案例,这可能很有用。
贡献
先前工作
本项目始于 tslint-immutable 的移植, 而该项目最初受 eslint-plugin-immutable 的启发。
