ESLint Drizzle 插件

对于无法在特定场景下执行类型检查,或者可以执行类型检查但错误消息难以理解的情况,我们决定创建一个包含推荐规则的 ESLint 包。此软件包旨在帮助开发者处理开发过程中的关键场景。

安装

npm
yarn
pnpm
bun
npm i eslint-plugin-drizzle @typescript-eslint/eslint-plugin @typescript-eslint/parser

用法

.eslintrc.yml 示例

root: true
parser: '@typescript-eslint/parser'
parserOptions:
  project: './tsconfig.json'
plugins:
  - drizzle
rules:
  'drizzle/enforce-delete-with-where': "error"
  'drizzle/enforce-update-with-where': "error"

所有配置

此插件导出一个使用所有规则(已弃用规则除外)的 all

root: true
extends:
  - "plugin:drizzle/all"
parser: '@typescript-eslint/parser'
parserOptions:
  project: './tsconfig.json'
plugins:
  - drizzle

推荐配置

目前,all 等同于 recommended

root: true
extends:
  - "plugin:drizzle/recommended"
parser: '@typescript-eslint/parser'
parserOptions:
  project: './tsconfig.json'
plugins:
  - drizzle

规则

enforce-delete-with-where

.delete() 语句中强制使用 delete.where() 子句。大多数情况下,你无需删除表中的所有行,也无需使用某种 WHERE 语句。

你也可以选择在插件选项中定义一个接受 stringstring[]drizzleObjectName。当你的对象或类具有非 Drizzle 的删除方法时,这很有用。此类 delete 方法将触发 ESLint 规则。为了避免这种情况,你可以定义代码库中使用的 Drizzle 对象的名称(例如 db),以便仅当 delete 方法来自此对象时才会触发规则:

示例,配置 1:

rules:
  'drizzle/enforce-delete-with-where': "error"
class MyClass {
  public delete() {
    return {}
  }
}

const myClassObj = new MyClass();

// ---> Will be triggered by ESLint Rule
myClassObj.delete()

const db = drizzle(...)
// ---> Will be triggered by ESLint Rule
db.delete()

示例,配置 2:

rules:
  'drizzle/enforce-delete-with-where':
    - "error"
    - "drizzleObjectName": 
      - "db"
class MyClass {
  public delete() {
    return {}
  }
}

const myClassObj = new MyClass();

// ---> Will NOT be triggered by ESLint Rule
myClassObj.delete()

const db = drizzle(...)
// ---> Will be triggered by ESLint Rule
db.delete()

enforce-update-with-where:

.update() 语句中强制使用 update.where() 子句。大多数情况下,你无需更新表中的所有行,也无需使用某种 WHERE 语句。

你也可以选择在插件选项中定义一个接受 stringstring[]drizzleObjectName。当你的对象或类具有非 Drizzle 的删除方法时,这很有用。例如 update 方法将触发 ESLint 规则。为了避免这种情况,你可以定义代码库中使用的 Drizzle 对象的名称(例如 db),以便仅当 delete 方法来自此对象时才会触发规则:

示例,配置 1:

rules:
  'drizzle/enforce-update-with-where': "error"
class MyClass {
  public update() {
    return {}
  }
}

const myClassObj = new MyClass();

// ---> Will be triggered by ESLint Rule
myClassObj.update()

const db = drizzle(...)
// ---> Will be triggered by ESLint Rule
db.update()

示例,配置 2:

rules:
  'drizzle/enforce-update-with-where':
    - "error"
    - "drizzleObjectName": 
      - "db"
class MyClass {
  public update() {
    return {}
  }
}

const myClassObj = new MyClass();

// ---> Will NOT be triggered by ESLint Rule
myClassObj.update()

const db = drizzle(...)
// ---> Will be triggered by ESLint Rule
db.update()