ESLint Drizzle 插件

对于无法针对特定情况执行类型检查的情况,或者尽管可能但错误消息仍然难以理解的情况,我们决定创建一个带有推荐规则的 ESLint 包。该包旨在帮助开发人员处理开发过程中的关键场景。

安装

npm
yarn
pnpm
bun
npm i eslint-plugin-drizzle
npm i @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

推荐配置

目前,allrecommended 是等价的。

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

规则

enforce-delete-with-where

强制在 .delete() 语句中使用 .where() 子句与 delete 方法一起使用。大多数情况下,您不需要删除表中的所有行,而是需要一些 WHERE 语句。

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

示例配置 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() 语句中使用 .where() 子句与 update 方法一起使用。大多数情况下,您不需要更新表中的所有行,而是需要一些 WHERE 语句。

可选地,您可以在插件选项中定义一个 drizzleObjectName,接受一个 stringstring[]。当您的对象或类具有不是来自 Drizzle 的 update 方法时,这将非常有用。这样的 update 方法会触发 ESLint 规则。为了避免这种情况,您可以定义您在代码库中使用的 Drizzle 对象的名称(例如 db),这样规则只会在更新方法来自该对象时触发:

示例配置 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()
Become a Gold Sponsor