"001":
  level: 1
  desc: "[建议] JavaScript 文件使用无 `BOM` 的 `UTF-8` 编码。"
"002":
  level: 1
  desc: "[建议] 在文件结尾处，保留一个空行。"
"003":
  level: 2
  desc: "[强制] 使用 `4` 个空格做为一个缩进层级，不允许使用 `2` 个空格 或 `tab` 字符。（%s）"
"004":
  level: 2
  desc: "[强制] `switch` 下的 `case` 和 `default` 必须增加一个缩进层级。"
"005":
  level: 2
  desc: "[强制] 二元运算符两侧必须有一个空格，一元运算符与操作对象之间不允许有空格。"
"006":
  level: 2
  desc: "[强制] 用作代码块起始的左花括号 `{` 前必须有一个空格。"
"007":
  level: 2
  desc: "[强制] `if / else / for / while / function / switch / do / try / catch / finally` 关键字后，必须有一个空格。"
"008":
  level: 2
  desc: "[强制] 在对象创建时，属性中的 `:` 之后必须有空格，`:` 之前不允许有空格。"
"009":
  level: 2
  desc: "[强制] 函数声明、具名函数表达式、函数调用中，函数名和 `(` 之间不允许有空格。"
"010":
  level: 2
  desc: "[强制] `,` 和 `;` 前不允许有空格。如果不位于行尾，`,` 和 `;` 后必须跟一个空格。"
"011":
  level: 2
  desc: "[强制] 在函数调用、函数声明、括号表达式、属性访问、`if / for / while / switch / catch` 等语句中，`()` 和 `[]` 内紧贴括号部分不允许有空格。"
"012":
  level: 2
  desc: "[强制] 单行声明的数组与对象，如果包含元素，`{}` 和 `[]` 内紧贴括号部分不允许包含空格。"
"013":
  level: 2
  desc: "[强制] 行尾不得有多余的空格。"
"014":
  level: 2
  desc: "[强制] 每个独立语句结束后必须换行。"
"015":
  level: 2
  desc: "[强制] 每行不得超过 `120` 个字符。"
"016":
  level: 2
  desc: "[强制] 运算符处换行时，运算符必须在新行的行首。"
"017":
  level: 2
  desc: "[强制] 在函数声明、函数表达式、函数调用、对象创建、数组创建、`for` 语句等场景中，不允许在 `,` 或 `;` 前换行。"
"018":
  level: 1
  desc: "[建议] 不同行为或逻辑的语句集，使用空行隔开，更易阅读。"
"019":
  level: 1
  desc: "[建议] 在语句的行长度超过 `120` 时，根据逻辑条件合理缩进。"
"020":
  level: 1
  desc: "[建议] 对于 `if...else...`、`try...catch...finally` 等语句，推荐使用在 `}` 号后添加一个换行 的风格，使代码层次结构更清晰，阅读性更好。"
"021":
  level: 2
  desc: "[强制] 不得省略语句结束的分号。"
"022":
  level: 2
  desc: "[强制] 在 `if / else / for / do / while` 语句中，即使只有一行，也不得省略块 `{...}`。"
"023":
  level: 2
  desc: "[强制] 函数定义结束不允许添加分号。"
"024":
  level: 2
  desc: "[强制] `IIFE` 必须在函数表达式外添加 `(`，非 `IIFE` 不得在函数表达式外添加 `(`。"
"025":
  level: 2
  desc: "[强制] `变量` 使用 `Camel命名法`。（%s）"
"026":
  level: 2
  desc: "[强制] `常量` 使用 `全部字母大写，单词间下划线分隔` 的命名方式。"
"027":
  level: 2
  desc: "[强制] `函数` 使用 `Camel命名法`。"
"028":
  level: 2
  desc: "[强制] 函数的 `参数` 使用 `Camel命名法`。（%s）"
"029":
  level: 2
  desc: "[强制] `类` 使用 `Pascal命名法`。（%s）"
"030":
  level: 2
  desc: "[强制] 类的 `方法` / `属性` 使用 `Camel命名法`。（%s）"
"031":
  level: 2
  desc: "[强制] `枚举变量` 使用 `Pascal命名法`，`枚举的属性` 使用 `全部字母大写，单词间下划线分隔` 的命名方式。"
"032":
  level: 2
  desc: "[强制] `命名空间` 使用 `Camel命名法`。"
"033":
  level: 2
  desc: "[强制] 由多个单词组成的缩写词，在命名中，根据当前命名法和出现的位置，所有字母的大小写与首字母的大小写保持一致。"
"034":
  level: 2
  desc: "[强制] `类名` 使用 `名词`。"
"035":
  level: 1
  desc: "[建议] `函数名` 使用 `动宾短语`。"
"036":
  level: 1
  desc: "[建议] `boolean` 类型的变量使用 `is` 或 `has` 开头。"
"037":
  level: 1
  desc: "[建议] `Promise对象` 用 `动宾短语的进行时` 表达。"
"038":
  level: 2
  desc: "[强制] 必须独占一行。`//` 后跟一个空格，缩进与下一行被注释说明的代码一致。"
"039":
  level: 1
  desc: "[建议] 避免使用 `/*...*/` 这样的多行注释。有多行注释内容时，使用多个单行注释。"
"040":
  level: 2
  desc: "[强制] 为了便于代码阅读和自文档化，以下内容必须包含以 `/**...*/` 形式的块注释中。"
"041":
  level: 2
  desc: "[强制] 文档注释前必须空一行。"
"042":
  level: 1
  desc: "[建议] 自文档化的文档说明 what，而不是 how。"
"043":
  level: 2
  desc: "[强制] 类型定义都是以 `{` 开始, 以 `}` 结束。（%s）"
"044":
  level: 2
  desc: "[强制] 对于基本类型 {string}, {number}, {boolean}，首字母必须小写。（%s）"
"045":
  level: 2
  desc: "[强制] 文件顶部必须包含文件注释，用 `@file` 标识文件说明。"
"046":
  level: 1
  desc: "[建议] 文件注释中可以用 `@author` 标识开发者信息。"
"047":
  level: 1
  desc: "[建议] 命名空间使用 `@namespace` 标识。"
"048":
  level: 1
  desc: "[建议] 使用 `@class` 标记类或构造函数。"
"049":
  level: 1
  desc: "[建议] 使用 `@extends` 标记类的继承信息。"
"050":
  level: 2
  desc: "[强制] 使用包装方式扩展类成员时， 必须通过 `@lends` 进行重新指向。"
"051":
  level: 1
  desc: "[强制] 类的属性或方法等成员信息不是 `public` 的，应使用 `@protected` 或 `@private` 标识可访问性。"
"052":
  level: 2
  desc: "[强制] 函数/方法注释必须包含函数说明，有参数和返回值时必须使用注释标识。"
"053":
  level: 2
  desc: "[强制] 参数和返回值注释必须包含类型信息，且不允许省略参数的说明。"
"054":
  level: 1
  desc: "[建议] 当函数是内部函数，外部不可访问时，可以使用 `@inner` 标识。"
"055":
  level: 2
  desc: "[强制] 对 Object 中各项的描述， 必须使用 `@param` 标识。"
"056":
  level: 1
  desc: "[建议] 重写父类方法时， 应当添加 `@override` 标识。如果重写的形参个数、类型、顺序和返回值类型均未发生变化，可省略 `@param`、`@return`，仅用 `@override` 标识，否则仍应作完整注释。"
"057":
  level: 2
  desc: "[强制] 必须使用 `@event` 标识事件，事件参数的标识与方法描述的参数标识相同。"
"058":
  level: 2
  desc: "[强制] 在会广播事件的函数前使用 `@fires` 标识广播的事件，在广播事件代码前使用 `@event` 标识事件。"
"059":
  level: 1
  desc: "[建议] 对于事件对象的注释，使用 `@param` 标识，生成文档时可读性更好。"
"060":
  level: 2
  desc: "[强制] 常量必须使用 `@const` 标记，并包含说明和类型信息。"
"061":
  level: 1
  desc: "[建议] 对于类型未定义的复杂结构的注释，可以使用 `@typedef` 标识来定义。"
"062":
  level: 2
  desc: "[强制] AMD 模块使用 `@module` 或 `@exports` 标识。"
"063":
  level: 2
  desc: "[强制] 对于已使用 `@module` 标识为 AMD模块 的引用，在 `namepaths` 中必须增加 `module:` 作前缀。"
"064":
  level: 1
  desc: "[建议] 对于类定义的模块，可以使用 `@alias` 标识构建函数。"
"065":
  level: 1
  desc: "[建议] 多模块定义时，可以使用 `@exports` 标识各个模块。"
"066":
  level: 1
  desc: "[建议] 对于 exports 为 Object 的模块，可以使用`@namespace`标识。"
"067":
  level: 1
  desc: "[建议] 对于 exports 为类名的模块，使用 `@class` 和 `@exports` 标识。"
"068":
  level: 1
  desc: "[建议] 细节注释遵循单行注释的格式。说明必须换行时，每行是一个单行注释的起始。"
"069":
  level: 2
  desc: "[强制] 有时我们会使用一些特殊标记进行说明。特殊标记必须使用单行注释的形式。下面列举了一些常用标记："
"070":
  level: 2
  desc: "[强制] 变量、函数在使用前必须先定义。（%s）"
"071":
  level: 2
  desc: "[强制] 每个 `var` 只能声明一个变量。"
"072":
  level: 2
  desc: "[强制] 变量必须 `即用即声明`，不得在函数或其它形式的代码块起始位置统一声明所有变量。（%s）"
"073":
  level: 2
  desc: "[强制] 在 Equality Expression 中使用类型严格的 `===`。仅当判断 `null` 或 `undefined` 时，允许使用 `== null`。"
"074":
  level: 1
  desc: "[建议] 尽可能使用简洁的表达式。"
"075":
  level: 1
  desc: "[建议] 按执行频率排列分支的顺序。"
"076":
  level: 1
  desc: "[建议] 对于相同变量或表达式的多值条件，用 `switch` 代替 `if`。"
"077":
  level: 1
  desc: "[建议] 如果函数或全局中的 `else` 块后没有任何语句，可以删除 `else`。"
"078":
  level: 1
  desc: "[建议] 不要在循环体中包含函数表达式，事先将函数提取到循环体外。"
"079":
  level: 1
  desc: "[建议] 对循环内多次使用的不变值，在循环外用变量缓存。"
"080":
  level: 1
  desc: "[建议] 对有序集合进行遍历时，缓存 `length`。"
"081":
  level: 1
  desc: "[建议] 对有序集合进行顺序无关的遍历时，使用逆序遍历。"
"082":
  level: 1
  desc: "[建议] 类型检测优先使用 `typeof`。对象类型检测使用 `instanceof`。`null` 或 `undefined` 的检测使用 `== null`。"
"083":
  level: 1
  desc: "[建议] 转换成 `string` 时，使用 `+ ''`。"
"084":
  level: 1
  desc: "[建议] 转换成 `number` 时，通常使用 `+`。"
"085":
  level: 1
  desc: "[建议] `string` 转换成 `number`，要转换的字符串结尾包含非数字并期望忽略时，使用 `parseInt`。"
"086":
  level: 2
  desc: "[强制] 使用 `parseInt` 时，必须指定进制。"
"087":
  level: 1
  desc: "[建议] 转换成 `boolean` 时，使用 `!!`。"
"088":
  level: 1
  desc: "[建议] `number` 去除小数点，使用 `Math.floor` / `Math.round` / `Math.ceil`，不使用 `parseInt`。"
"089":
  level: 2
  desc: "[强制] 字符串开头和结束使用单引号 `'`。"
"090":
  level: 1
  desc: "[建议] 使用 `数组` 或 `+` 拼接字符串。"
"091":
  level: 1
  desc: "[建议] 使用字符串拼接的方式生成HTML，需要根据语境进行合理的转义。"
"092":
  level: 1
  desc: "[建议] 复杂的数据到视图字符串的转换过程，选用一种模板引擎。"
"093":
  level: 2
  desc: "[强制] 使用对象字面量 `{}` 创建新 `Object`。"
"094":
  level: 1
  desc: "[建议] 对象创建时，如果一个对象的所有 `属性` 均可以不添加引号，建议所有 `属性` 不添加引号。"
"095":
  level: 1
  desc: "[建议] 对象创建时，如果任何一个 `属性` 需要添加引号，则所有 `属性` 建议添加 `'`。"
"096":
  level: 2
  desc: "[强制] 不允许修改和扩展任何原生对象和宿主对象的原型。"
"097":
  level: 1
  desc: "[建议] 属性访问时，尽量使用 `.`。"
"098":
  level: 1
  desc: "[建议] `for in` 遍历对象时, 使用 `hasOwnProperty` 过滤掉原型中的属性。"
"099":
  level: 2
  desc: "[强制] 使用数组字面量 `[]` 创建新数组，除非想要创建的是指定长度的数组。"
"100":
  level: 2
  desc: "[强制] 遍历数组不使用 `for in`。"
"101":
  level: 1
  desc: "[建议] 不因为性能的原因自己实现数组排序功能，尽量使用数组的 `sort` 方法。"
"102":
  level: 1
  desc: "[建议] 清空数组使用 `.length = 0`。"
"103":
  level: 1
  desc: "[建议] 一个函数的长度控制在 `50` 行以内。"
"104":
  level: 1
  desc: "[建议] 一个函数的参数控制在 `6` 个以内。"
"105":
  level: 1
  desc: "[建议] 通过 `options` 参数传递非数据输入型参数。"
"106":
  level: 1
  desc: "[建议] 在适当的时候将闭包内大对象置为 `null`。"
"107":
  level: 1
  desc: "[建议] 使用 `IIFE` 避免 `Lift 效应`。"
"108":
  level: 1
  desc: "[建议] 空函数不使用 `new Function()` 的形式。"
"109":
  level: 1
  desc: "[建议] 对于性能有高要求的场合，建议存在一个空函数的常量，供多处使用共享。"
"110":
  level: 2
  desc: "[强制] 类的继承方案，实现时需要修正 `constructor`。"
"111":
  level: 1
  desc: "[建议] 声明类时，保证 `constructor` 的正确性。"
"112":
  level: 1
  desc: "[建议] 属性在构造函数中声明，方法在原型中声明。"
"113":
  level: 2
  desc: "[强制] 自定义事件的 `事件名` 必须全小写。"
"114":
  level: 2
  desc: "[强制] 自定义事件只能有一个 `event` 参数。如果事件需要传递较多信息，应仔细设计事件对象。"
"115":
  level: 1
  desc: "[建议] 设计自定义事件时，应考虑禁止默认行为。"
"116":
  level: 2
  desc: "[强制] 避免使用直接 `eval` 函数。"
"117":
  level: 1
  desc: "[建议] 尽量避免使用 `eval` 函数。"
"118":
  level: 1
  desc: "[建议] 使用 `new Function` 执行动态代码。"
"119":
  level: 1
  desc: "[建议] 尽量不要使用 `with`。"
"120":
  level: 1
  desc: "[建议] 减少 `delete` 的使用。"
"121":
  level: 1
  desc: "[建议] 处理 `delete` 可能产生的异常。"
"122":
  level: 1
  desc: "[建议] 避免修改外部传入的对象。"
"123":
  level: 1
  desc: "[建议] 具备强类型的设计。"
"124":
  level: 2
  desc: "[强制] 使用 `AMD` 作为模块定义。"
"125":
  level: 2
  desc: "[强制] 模块 `id` 必须符合标准。"
"126":
  level: 1
  desc: "[建议] 定义模块时不要指明 `id` 和 `dependencies`。"
"127":
  level: 1
  desc: "[建议] 使用 `return` 来返回模块定义。"
"128":
  level: 2
  desc: "[强制] 全局运行环境中，`require` 必须以 `async require` 形式调用。"
"129":
  level: 2
  desc: "[强制] 模块定义中只允许使用 `local require`，不允许使用 `global require`。"
"130":
  level: 2
  desc: "[强制] Package 在实现时，内部模块的 `require` 必须使用 `relative id`。"
"131":
  level: 1
  desc: "[建议] 不会被调用的依赖模块，在 `factory` 开始处统一 `require`。"
"132":
  level: 1
  desc: "[建议] 对于单个元素，尽可能使用 `document.getElementById` 获取，避免使用`document.all`。"
"133":
  level: 1
  desc: "[建议] 对于多个元素的集合，尽可能使用 `context.getElementsByTagName` 获取。其中 `context` 可以为 `document` 或其他元素。指定 `tagName` 参数为 `*` 可以获得所有子元素。"
"134":
  level: 1
  desc: "[建议] 遍历元素集合时，尽量缓存集合长度。如需多次操作同一集合，则应将集合转为数组。"
"135":
  level: 1
  desc: "[建议] 获取元素的直接子元素时使用 `children`。避免使用`childNodes`，除非预期是需要包含文本、注释和属性类型的节点。"
"136":
  level: 1
  desc: "[建议] 获取元素实际样式信息时，应使用 `getComputedStyle` 或 `currentStyle`。"
"137":
  level: 1
  desc: "[建议] 尽可能通过为元素添加预定义的 className 来改变元素样式，避免直接操作 style 设置。"
"138":
  level: 2
  desc: "[强制] 通过 style 对象设置元素样式时，对于带单位非 0 值的属性，不允许省略单位。"
"139":
  level: 1
  desc: "[建议] 操作 `DOM` 时，尽量减少页面 `reflow`。"
"140":
  level: 1
  desc: "[建议] 尽量减少 `DOM` 操作。"
"141":
  level: 1
  desc: "[建议] 优先使用 `addEventListener / attachEvent` 绑定事件，避免直接在 HTML 属性中或 DOM 的 `expando` 属性绑定事件处理。"
"142":
  level: 1
  desc: "[建议] 使用 `addEventListener` 时第三个参数使用 `false`。"
"143":
  level: 1
  desc: "[建议] 在没有事件自动管理的框架支持下，应持有监听器函数的引用，在适当时候（元素释放、页面卸载等）移除添加的监听器。"
"997":
  level: 1
  desc: "[建议] 可能会导致代码质量下降的问题。（%s）"
"998":
  level: 2
  desc: "[强制] 存在兼容性问题或运行时错误。（%s）"
"999":
  level: 2
  desc: "[强制] 语法错误。（%s）"

