FECSRules
FECS 自有规则
为了更准确的匹配到百度的前端代码规范,有部分规则是定制,或者修改官方的规则。
fecs-camelcase
在官方 camelcase
项目上的增强:
- 允许标识符前后的
--
(比如 __dirname); - 允许通过
quote
配置项对Property
类型的标识符作豁免; - 允许配置
ignore
数组来作豁免,支持前后使用/
标识为正则的匹配; - 允许使用文档注释的
@private
对单个下划线前缀的方法作豁免。
fecs-eol-last
增加一个配置项 disallowMultiBlankLine
,用于设置是否允许文件末尾连续空白行的情况。
fecs-indent
基于 Nodeca Team 的插件,当时 eslint 还没有 indent 的实现。目前功能除了与官方一致外(配置参数有区别),还针对数组拼接 HTML 时的缩进作了处理。
对于数组拼接字符串,通过枚举每项的类型,如果在字符串项中先找到 <
再找到 >
,就以拼接 HTML 对待,允许前后行之间缩进相差一个缩进级别。 如果由于特殊原因导致自动识别失败,也可以在数组前使用注释 // html
来标识。
fecs-valid-jsdoc
在官方 valid-jsdoc
基本上增强:
- 文档注释前面要有一个空行;
- 检查 @file 和 @author;
- 针对 RestElement 参数的注释类型检查;
- 内置类型的大小写严格检查;
- 不同的错误信息有不同的标识,便于 reporter 归类到不同的错误;
- 所有错误信息包含具体的行列位置,包含异常(来自 doctrine2,对 doctrine 的 hack)。
[建议] 避免使用
/*...*/
这样的多行注释。有多行注释内容时,使用多个单行注释。 [强制] 为了便于代码阅读和自文档化,以下内容必须包含以/**...*/
形式的块注释中。
fecs-max-statements
在官方的基础上,针对 AMD 模块的 factory 作豁免。虽然 eslint 的 max-statements 有类似考虑,但是只是简单的豁免顶层 function (即没有上一级 function scope 的),范围太宽泛不理想。
fecs-max-statements 使用配置项独自指定是否豁免 AMD 或 IIFE 的 function。
fecs-key-spacing
在配置冒号前不允许空格情况下,识别并允许基于冒号对齐情况。
已经移除,使用 eslint 的 key-spacing
。需要基于冒号对齐时可参考 eslint 文档 自己指定配置。
fecs-space-infix-ops
fecs-dot-notation
fecs-no-reserved-keys
以上三个规则全部基于官方的基础上,是作了更准备的报错位置调整,见 issue 46。 2016-03-29 已移除。
fecs-properties-quote
根据百度前端代码规则实现:
[强制] 对象创建时,如果一个对象的所有
属性
均可以不添加引号,则所有属性
不得添加引号。 [强制] 对象创建时,如果任何一个属性
需要添加引号,则所有属性
必须添加'
。
fecs-no-eval
在官方规则的增加了 window.eval
的使用检查。
[建议] 尽量避免使用
eval
函数。
fecs-no-forin-array
[强制] 遍历数组不使用
for in
。
fecs-no-global-require
[强制] 模块定义中只允许使用
local require
,不允许使用global require
。
fecs-valid-amd-id
[强制] 模块
id
必须符合标准。
fecs-jsx-var
根据 jsx 的特点,对 jsx 中出现的标签名或属性将作用域中的同名变量标记为已使用。
fecs-esnext-ext
[建议] ESNext 语法的 JavaScript 文件使用
.js
扩展名。 [强制] 当文件无法使用.js
扩展名时,使用.es
扩展名。
默认只允许使用 .js
和 .es
作扩展名。
fecs-imports-on-top
[强制] 所有
import
语句写在模块开始处。
import
语句之前如果有语句,只允许 import
。
fecs-no-extra-semi
[强制] 函数定义结束不允许添加分号。 [强制] 类声明结束不允许添加分号。 [强制] 类成员定义中,方法定义后不允许添加分号,成员属性定义后必须添加分号。 [强制]
export
语句后,不允许出现表示空语句的分号。 [强制] 属性装饰器后,可以不加分号的场景,不允许加分号。
eslint 的 no-extra-semi
本身不支持以上区分多个场景的识别,因此作了扩展。
fecs-no-arguments
[强制] 不要使用
arguments
对象,应使用...args
代替。
在 fecs@0.7.1 版本之后移除,使用 prefer-rest-params
代替。
fecs-prefer-class
[强制] 使用
class
关键字定义一个类。
fecs-prefer-super
[强制] 使用
super
访问父类成员,而非父类的prototype
。
fecs-use-method-definition
[强制] 定义方法时使用
MethodDefinition
语法,不使用PropertyName: FunctionExpression
语法。 [建议] 定义对象的方法不应使用箭头函数。
fecs-use-property-shorthand
[建议] 定义对象时,如果所有键均指向同名变量,则所有键都使用缩写;如果有一个键无法指向同名变量,则所有键都不使用缩写。
fecs-valid-super
检查不恰当的 super
使用场景,比如没有父类,在非构造函数中直接使用 super()
等。
fecs-export-on-declare
[强制]
export
与内容定义放在一起。
fecs-arrow-body-style
[建议] 箭头函数的函数体只有一个非
Object Literal
的单行表达式语句,且作为返回值时,省略{}
和return
。 [强制] 箭头函数的函数体只有一个Object Literal
,且作为返回值时,不得省略{}
和return
。
在 eslint 的 arrow-body-style
基础上增加了一项配置,允许特定 AST 类型节点单行时加 return
(或者特定类型节点必须加 return
),默认配置是对 ObjectExpression
类型的节点允许加 return
。
fecs-max-destructure-depth
[强制] 不要使用3层及以上的解构。
fecs-min-vars-per-destructure
[强制] 仅定义一个变量时不允许使用解构。
fecs-one-var-per-line
[强制] 解构多个变量时,如果超过行长度限制,每个解构的变量必须单独一行。
fecs-no-anonymous-before-rest
[强制] 使用剩余运算符时,剩余运算符之前的所有元素必需具名。
fecs-max-calls-in-template
[强制] 字符串内变量替换时,不要使用
2
次及以上的函数调用。
fecs-no-extra-destructure
[强制] 如果不节省编写时产生的中间变量,解构表达式
=
号右边不允许是ObjectLiteral
和ArrayLiteral
。
fecs-use-standard-promise
[强制] 使用标准的
Promise
API。
fecs-use-for-of
[建议] 使用
Object.keys
进行对象遍历。 [建议] 尽可能使用for .. of
进行遍历。
fecs-prefer-spread-element
[建议] 对数组进行连接操作时,使用数组展开语法。 [建议] 不要使用数组展开进行数组的复制操作。
配置项中 copy 为 true 时表明允许使用 SpreadElement 复制数组,默认为 false。
fecs-prefer-async-await
[强制] 不得为了编写的方便,将可以并行的IO过程串行化。 [建议] 使用
async/await
代替generator
+co
。
fecs-shim-promise
[强制] 在运行环境中没有
Promise
时,将Promise
的实现shim
到global
中。
fecs-no-this-arrow
[强制] 一个函数被设计为需要
call
和apply
的时候,不能是箭头函数。
fecs-valid-map-set
[强制] 当键值有可能不是字符串时,必须使用
Map
;当元素有可能不是字符串时,必须使用Set
。 [建议] 需要一个不可重复的集合时,应使用Set
。 [建议] 当需要遍历功能时,使用Map
和Set
。 [建议] 程序运行过程中有添加或移除元素的操作时,使用Map
和Set
。
fecs-prefer-destructure
[建议] 使用解构减少中间变量。
fecs-prefer-assign-pattern
[建议] 使用变量默认语法代替基于条件判断的默认值声明。
fecs-use-computed-property
[建议] 尽量使用计算属性键在一个完整的字面量中完整地定义一个对象,避免对象定义后直接增加对象属性。
fecs-valid-var-jsdoc
主要根据变量定义及文档注释来相互检验。
[强制]
常量
使用全部字母大写,单词间下划线分隔
的命名方式。 [强制]枚举变量
使用Pascal命名法
,枚举的属性
使用全部字母大写,单词间下划线分隔
的命名方式。 [强制]命名空间
使用Camel命名法
。 [强制] 常量必须使用@const
标记,并包含说明和类型信息。 [建议]boolean
类型的变量使用is
或has
开头。
fecs-valid-class-jsdoc
[建议] 使用
@class
标记类或构造函数。 [建议] 使用@extends
标记类的继承信息。 [强制] 使用包装方式扩展类成员时, 必须通过@lends
进行重新指向。 [强制] 类的属性或方法等成员信息使用@public
/@protected
/@private
中的任意一个,指明可访问性。
fecs-valid-constructor
[强制] 类的继承方案,实现时需要修正
constructor
。 [建议] 声明类时,保证constructor
的正确性。
fecs-valid-dom-style
[建议] 尽可能通过为元素添加预定义的 className 来改变元素样式,避免直接操作 style 设置。 [强制] 通过 style 对象设置元素样式时,对于带单位非 0 值的属性,不允许省略单位。
fecs-use-async-require
[强制] 全局运行环境中,
require
必须以async require
形式调用。