Files
code-spec/references/js&ts.base.md
T

4.5 KiB

基础代码规范 [JsTs.Base]

下面是 JS/TS 的代码规范

常量名使用大写加下划线命名(UPPER_CASE),单词间以下划线分隔 [JsTs.Base.ConstUpperCase]

  • 不检查 nodejs 的导包定义,比如 const fs = require("fs")
  • 常量检查只需检查 const 声明的静态值,但是不包含对象和函数

Example: 常量命名

Good: 使用大写加下划线

const MAX_COUNT = 100;

Bad: 使用小驼峰

const maxCount = 100;

函数名使用小驼峰命名 [JsTs.Base.FuncLowerCamel]

  • severity warn

Example: 函数命名

Good: 使用小驼峰

function getUserInfo() {
  // ...
}

Bad: 使用全小写

function getuserinfo() {
  // ...
}

禁止使用字面量魔法数字 [JsTs.Base.NoMagicVar]

  • severity warn
  • 只检查数字、正则字面量,不要检查其他(比如 布尔字面量、对象字面量、函数字面量、数组字面量、字符串字面量)
  • 这块只检查含义不明确的字面量,比如 0 1 500 等,像是 'user' 'admin' 'active' 'inactive' 等是合理的
  • 无需检查单词是否完整拼写
  • throw 的错误信息无需审查
  • new Error 的错误信息无需审查
  • console.log 的打印代码无需审查
  • console.error 的错误信息无需审查
  • console.warn 的错误信息无需审查
  • console.info 的错误信息无需审查
  • console.debug 的错误信息无需审查
  • console.trace 的错误信息无需审查
  • 无需考虑类型是否合理匹配
  • 你需要自行的判断这个字面量的值开发是否可以理解,比如说参数的时间戳、毫秒时长、数量等这些如果一看就是可以理解也无需抽出常量

Example: 魔法数字

Good: 使用常量替代魔法数字

const ADMIN = 1;

if (user.role === ADMIN) {
  // ...
}

Bad: 使用字面量魔法数字

if (user.role === 1) {
  // ...
}

基于 JsTs.Base.NoMagicVar 抽离的静态常量需要放在对应文件里 [JsTs.Base.ConstantsDefinition]

  • severity error
  • 需要放在指定模块的 constants 文件里
  • constants 命名规则: user.constants.js 或者 constants.js 或者 user.constants.ts 或者 constants.ts

Example: 常量定义位置

Good: 常量放在对应模块的 constants 文件

// user.constants.js
const MAX_COUNT = 100; // 这是 user 模块需要的

Bad: 常量放在错误模块的 constants 文件

// class.constants.js
const MAX_COUNT = 100; // 这是 user 模块需要的

class 和 interface 命名使用大驼峰命名 [JsTs.Base.ClassNaming]

  • severity warn

Example: 类和接口命名

Good: 使用大驼峰

class UserInfo {
  // ...
}

Bad: 使用全小写

class userinfo {
  // ...
}

变量名使用小驼峰或者蛇形命名 [JsTs.Base.VarNaming]

  • severity warn
  • 需要注意的是从 require 导入的变量不受检查

Example: 变量命名

Good: 使用小驼峰或蛇形命名

let userName = "John";
let user_name = "John";

Bad: 使用大驼峰

let Username = "John";

单文件代码不超过 700 行 [JsTs.Base.CodeNotMoreThan700Lines]

Example: 文件行数

Good: 代码不超过 700 行

// 代码不超过 700 行

Bad: 代码超过 700 行

// 代码超过 700 行

单个函数或方法不能超出 200 行 [JsTs.Base.FuncNotMoreThan200Lines]

Example: 函数行数

Good: 函数不超过 200 行

function getUserInfo() {
  // ... 小于等于 200
}

Bad: 函数超过 200 行

function getUserInfo() {
  // ... 大于 200
}

复杂的逻辑判断要添加注释 [JsTs.Base.ComplexLogic]

  • severity warn
  • 逻辑判断的复杂度超过 2 个的要添加注释

Example: 复杂逻辑注释

Good: 复杂逻辑添加注释

// 逻辑判断复杂度超过 2 个
if (a && b || c) {
  // ...
}

Bad: 复杂逻辑未添加注释

if (a && b && c && d) {
  // ...
}

复杂的函数要添加注释 [JsTs.Base.ComplexFunc]

  • severity warn

Example: 复杂函数注释

Good: 复杂函数添加注释

/**
 * 复杂的算法逻辑
 */
function complexFunc() {
  // ... 
}

Bad: 复杂函数未添加注释

function complexFunc() {
  // ... 
}