Skip to content
chris edited this page Apr 28, 2016 · 15 revisions

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 代替。

[email protected] 版本之后移除,使用 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

[强制] 仅定义一个变量时不允许使用解构。

Clone this wiki locally