@fitzzero/quickdraw-lint

中文文档
5.1.4发布于 2026/10/26MITES Module零依赖构建来源已验证近 30 天下载 2668

oxlint 插件、 基础配置和快速绘图应用的基准命令

中文使用文档
文档目录5 节
  1. 规则
  2. 哪些文件是规则检查
  3. 基线
  4. 从4.1规则
  5. 发展中国家

@fitzzero/ quickdraw-lint (英语)

快速draw oxlint 插件和配置 (设计: docs/rfcs/0003-v5.md页:1 规矩是错的 与 5.0 API 相关: 写入订阅者永远不会看到, 帧由 手,读取与表一起生长,绕过被键入的客户端,和 4.x 这已经不复存在。 每个规则都经过测试,每个规则都可以 采用时不首先固定旧代码(基线,以下).

bun add -d @fitzzero/quickdraw-lint oxlint
// .oxlintrc.json in your app
{
  "extends": [
    "./node_modules/@fitzzero/quickdraw-lint/oxlint.base.jsonc",
    // or, in an app built from the quickdraw template, the template config
    // instead: it extends the base and adds the design-system rules
    // "./node_modules/@fitzzero/quickdraw-lint/oxlint.template.jsonc",
  ],
  // plugins, ignorePatterns, env, globals and settings are not inherited
  "plugins": ["typescript", "import", "react", "nextjs", "jsx_a11y"],
  "ignorePatterns": ["**/dist/**", "**/node_modules/**"],
}

配置通过相对自身的路径加载插件, 所以是一个应用程序 需要没有 jsPlugins 进入它自己的。 顶端的评论 oxlint.base.jsonc 列出扩展配置继承什么。 它的路径 覆盖( 明确类型在 packages/shared 财务报告和审定财务报表 packages/db网络 应用的放松预算) **/- 前置, 因此它们是否应用 lint 运行 从应用程序的根或每个软件包目录。 插件运行在 牛林一万五千二或后出.

规则

每个规则都是综合的:克林特的JS插件看到一个文件的语法,没有 类型。 如果一个规则需要猜测,它宁愿缺少一个案件而不是报告 正确的代码; 每一个规则的文件都说它留下了什么.

规则报告默认检查
no-untracked-write导入未跟踪的 Prisma 客户端( R)prisma, (中文(简体) ), PrismaClient 从应用程序的db包, @prisma/client 或生成的客户端),并通过命名的客户端写入 prisma (a) 参数、变量、解结构绑定或类成员键入) Tracked<...> 或者说 TrackedTransaction<...>从 @fitzzero/quickdraw-core 或者说 @fitzzero/quickdraw-core/prisma 无论名称如何,都是跟踪客户端 Tracked 无效)服务、工作、路线
no-foreign-write写给一个模型 , 其附件 defineService 既不拥有(model)或列表中 writes到处都是
no-nested-write嵌入关系书写( n)data: { labels: { create } }通过跟踪客户端(db, (中文(简体) ), tx,或使用快取键键键入的绑定或类成员 Tracked<...>: 只有父行被跟踪到处都是
no-raw-sql-write$executeRaw*,以及 $queryRaw* 运行写入,在不用 ctx.touch(...) (或 qd.collections.reset(...)(中文(简体) )服务、工作、路线
no-manual-emit.emit() 在袜子上。 IO 服务器或套接字(io.to(room).emit),以及 qd: 字符串、 框架的事件和房间名称服务、工作、路线
no-inline-auth-guardif (!ctx.principal) throw ... 及其变体a handler (声明) access 换句话说,还有一份很好的检查, if (ctx.principal.kind !== "user") throw ... (声明) kinds 改为)到处都是
no-plain-error-refusal内置出错的投出( n)new Error(...), (中文(简体) ), TypeError(...),有或无 new在给定为 auth.authenticate 改为 createServer 或者说 createHttpRouter,作为 loadPrincipal 改为 socketAuth,或作为 principal 改为 createMcpRegistry (写在那里,或 function 或者说 const ),服务器会为自己失败而接受,因此客户端会永远重试证书(MCP代理商从未被告知其代号被拒绝) try 带有 catch 或一个 catch 条款除了测试,到处都是
no-unbounded-readfindMany 无 take (由ids读取, id 平等, { in } 或者说 { equals },被绑定; { not }, (中文(简体) ), { notIn } 财务报告和审定财务报表 { gt } 无)服务
no-db-call-in-loop每个项目的数据库呼叫 for编号 :for...of编号 :for...in 循环或 .map 回拨、等待或发送到 Promise.all (无) while, (中文(简体) ), createMany, (中文(简体) ), in: 自己的游戏, tx 写作)服务、工作、路线
no-emit-in-loopctx.rooms.emit, (中文(简体) ), emitToUser 或溪流的 push 每件物品到同一房间、用户或流量范围(fan-out很好;批次与 pushMany(中文(简体) )服务、工作、路线
no-load-then-filterfindMany 其行仅存 .filter编辑或 .find条件a where 可表达服务、工作、路线
no-prisma-in-routes模型在路由处理器中调用 Prisma 客户端路线
no-cross-service-internal-imports导入索引以外的其它服务目录文件服务
no-await-void-mutateawait mutation.mutate(...)数字 : mutate 返回无; 使用 mutateAsync客户端代码
no-untyped-clienta TanStack 查询钩 queryFn编号 :mutationFn 即用手拨打快速拨打的电话 queryKey 是一个快画键( 客户端缺少时可能会使用成员键 ) key 财务报告和审定财务报表 call(中文(简体) )客户端代码
no-manual-refetch快速绘图查询 refetch() 在(或者在回调中)快速拉动突变之后 invalidateQueries编号 :refetchQueries编号 :resetQueries 快捷键上客户端代码
no-raw-socketsocket.emit, (中文(简体) ), socket.on, (中文(简体) ), socket.off 还有其他生的苏克特 IO呼叫:一个 socket (或 x.socket不管怎么样 socket.io-client是因为 io(), (中文(简体) ), connect() 或者说 Manager 以任何名称制作(通过变量和 this 字段),并带有a qd: 任何接收器上的事件名称客户端代码
no-v4-api每删除或移动 4.x API 5.0; 每个信件名替换到处都是
prefer-kit工具箱采用的一种手写方法(get, (中文(简体) ), list, (中文(简体) ), create, (中文(简体) ), search, (中文(简体) ), share, (中文(简体) ), adminList,或 getTask, (中文(简体) ), listTasks, (中文(简体) ), createTask, (中文(简体) ), updateTask, (中文(简体) ), deleteTask 用于模型 "task"· ; remove 仅以成员模式或以其他分享方式进行) defineService 谁 model 是一个字符串( 或 const (其中之一)以及 methods 不传播任何工具包(一个散开的变量或一个调用计数),或重复其旁所传播的工具包(crud.handlers' access 字面名称, search 页:1 search.handlers,用于 admin.handlers页:1 // quickdraw: hand-written because <reason> 上面的评论保持安静除了测试,到处都是
no-todo-schematodoSchema(),占位符计划4.x迁移(@fitzzero/quickdraw-codemod(a) 一种方法没有的地方留下:它证明什么都没有 query() 或者说 mutation() 无输入 keys,它也会隐藏输入键从 defineServiceid-reach (less) 检查,消息说是这样到处都是
require-describe合同成员 describe合同(defineContract),每个 query 财务报告和审定财务报表 mutation、 收集、 流、 通道和事件, 写成对象字元( 在别处构建的扩展或定义被留下) , 静态 describe 下级 minWords 单词(默认 3); MCP 桥描述一个方法的工具,并 quickdraw-docs 带领每个区域除了测试,到处都是
no-unused-baseline基线文件中的允许性,即不再使用任何违规行为(以下)基线文件
no-raw-button-strings, (中文(简体) ), no-raw-tooltip-strings, (中文(简体) ), no-raw-typography-stringsmUI 中的原始字符串 Button, (中文(简体) ), Typography 财务报告和审定财务报表 Tooltip 标题oxlint.template.jsonc(中文(简体) )*.tsx, (中文(简体) ), *.jsx

基础配置打开 除了最后三个 error时,除 no-unused-baseline, (中文(简体) ), no-todo-schema, (中文(简体) ), prefer-kit, (中文(简体) ), require-describe 财务报告和审定财务报表 no-plain-error-refusal警告他们。 警告不会失败升级; 一旦应用程序没有 报告从一个,它可以设置规则到 "error" 在它自己的配置中 (单位:千美元)"quickdraw/require-describe": "error",说)所以新代码不能添加任何. oxlint.template.jsonc 扩展基数并添加后三个基数.

哪些文件是规则检查

一个只检查该层文件的规则。 默认跟随 模板的布局。 这些规则涉及服务、工作和路线, no-raw-socket, (中文(简体) ), prefer-kit 财务报告和审定财务报表 require-describe 跳过测试( e)__tests__/, (中文(简体) ), test/, (中文(简体) ), tests/, (中文(简体) ), *.test.*, (中文(简体) ), *.spec.*哪些种子、检查和探测;其他规则检查 测试也.

层球盖
服务**/services/**
任务**/jobs/**
路线**/routes/**, (中文(简体) ), **/routes.*
客户端代码**/*.tsx, (中文(简体) ), **/*.jsx, (中文(简体) ), **/apps/web/**

客户端代码也是任何导入的文件 @tanstack/react-query, (中文(简体) ), socket.io-client 或者说 @fitzzero/quickdraw-core/client,所以钩在 .ts 文件检查 oxlint 的出处、 应用程序根或 apps/web 相同; 对于客户端规则, globs 会在其中添加文件 .

每个文件范围的规则 files 财务报告和审定财务报表 ignore 光滑,与 相对于牛林运行地点的路径( 保留它们) **/- 前缀 :

{
  "rules": {
    "quickdraw/no-unbounded-read": ["error", { "files": ["**/server/services/**"] }],
  },
}

其他选项: clients (数据库客户端的名称为: ["db", "tx"] 写作规则,加 prisma 关于规则 查看数据库的电话; modules (未跟踪客户端的说明符) 模块) no-untracked-write· ; emitters 打开 no-manual-emit· ; sockets, (中文(简体) ), allowedEvents 财务报告和审定财务报表 allowedPrefixes 打开 no-raw-socket· ; clients (类型) 客户姓名, ["qd"]继续 no-untyped-client 财务报告和审定财务报表 no-manual-refetch· ; minWords (静态描述中最少的字,默认为3) require-describe· ; shared 财务报告和审定财务报表 allow (单位:千美元){ "<service>": ["<service>/<file>"] }继续 no-cross-service-internal-imports每一个规则的选项都在它的计划, 所以一个拼错的选项在启动时会失败克林特.

写作规则( :no-untracked-write, (中文(简体) ), no-nested-write, (中文(简体) ), no-foreign-write(中文(简体) ) 也取一个客户端的快取 Tracked<...> 或者说 TrackedTransaction<...> 担任跟踪客户,无论其名称为何:a 参数或变量,一个其模式类型给予它的已解结构绑定 1( 类型字词, 或此文件的接口或类型别名 : { db }: { db: Tracked<Db> }),或 this.<member> 其类别宣布为(财产,或 构造器的参数属性). 类型在文件导入时计数 从 @fitzzero/quickdraw-core 或者说 @fitzzero/quickdraw-core/prisma下页 任何名称或通过命名空间导入,或通过此文件的别名类型 说吧 应用程序的一类名称 Tracked,或从 另一个模块(包含再导出)不读:规则查看一个文件, 而只有速战速决的型态 将客户端控制在履带式的.

基线

应用程序采用基础配置而不修正所有已有的违规情况 首先,快活的规则 和克林特自己的:

bunx quickdraw-lint baseline -c .oxlintrc.json   # writes .quickdraw-lint-baseline.json
// .oxlintrc.json: every rule reads the file
{
  "settings": { "quickdraw": { "baseline": ".quickdraw-lint-baseline.json" } },
}
// package.json: lint through quickdraw-lint check (per package: -c ../../.oxlintrc.json src)
{ "scripts": { "lint": "quickdraw-lint check -c .oxlintrc.json ." } }

quickdraw-lint baseline 使用您的配置运行牛林( r)-c 选择一个; 选项后的路径,默认情况下当前目录)并记录 a 规则、档案和散列 的线条的修剪文本。 然后,只有当 其指纹没有被记录,或者发生频率超过记录。 这么说吧 修复旧的违规情况,并在同一份文件中增加一个新的违规情况 新一条,在其行上,同时编辑文件的其他地方(移动行) 没有改变它们) 扰动什么。 禁用注释的违反 封面没有记录,也没有使用备忘,文件牛林无法解析 永远不会被记录:没有基线存在语法错误。 提交文件 .

快速画规则应用文件本身,所以简单 oxlint 运行( a) 编辑部也把记录的违纪事件排除在外。 牛林自己的规矩 (单位:千美元)no-unused-vars, (中文(简体) ), no-shadow,.)在本地运行,其中JS插件无法运行 联系他们: quickdraw-lint check 运行克林特 并留下他们的记录 也违反,所以它是一个应用程序的指针。 每一次都会传来 选项它不知道 (-c, (中文(简体) ), --fix,路径)到牛林,打印什么是 左为 file:line:column: message [Severity/rule] (单位:千美元)--format json 页:1 牛林的JSON报告,过滤,取 --quiet, (中文(简体) ), --deny-warnings 财务报告和审定财务报表 --max-warnings <n> 和 oxlint 一样,当错误发生时退出 1 .

记录的违规情况一旦确定,其津贴即予使用 no-unused-baseline 在文件的顶端警告( i)quickdraw-lint check 以同样方式报告牛林本身的规则未使用的津贴 基线命令再次生效,使文件缩水,没有新的信息可以带走 津贴地点。 一个规则将文件作为选项,而不是 设置 : ["error", { "baseline": ".quickdraw-lint-baseline.json" }]A级 相对路径从每个已挂起的文件目录向上查找, 所以一个 寄存器根的文件还服务从软件包启动的 lint 运行 目录. 快速规则按着它的名字 任何其他规则按着它 代码为:

{
  "version": 2,
  "files": {
    "apps/api/src/services/task.ts": {
      "eslint(no-unused-vars)": { "9a0364b9e99bb480": 1 },
      "no-unbounded-read": { "5d41402abc4b2a76": 1, "7d793037a0760186": 2 }
    }
  }
}

1版本文件(每个文件的计数,从早先的 5.0 预释)是 拒绝留言,说要再次写给指挥部.

从4.1规则

4.1规则在5.0之前不变地移到这里;5.0代替. A 类 仍然为已删除规则命名的配置无法装入, 因此删除这些名称 从您的覆盖 :

4.1 规则5.0 (中文(简体) )
no-cross-service-mutationsno-foreign-write: 所有者来自 defineService是因为 model 财务报告和审定财务报表 writes,所以没有允许者保留
no-direct-prisma-mutationsno-untracked-write (没有) this.create 首选:通过 db(中文(简体) )
no-manual-collection-eventsno-manual-emit (收集从履带式写作中获得的三角洲)
no-raw-socket-emit, (中文(简体) ), no-raw-socket-onno-raw-socket,没有针对应用程序的默认豁免
no-raw-service-room-string删除:实体和收集室属于框架(no-manual-emit 报告 qd: 名称)
require-zod-schema删除: 宣布每一种合同方法 input 财务报告和审定财务报表 output
no-service-method-record, (中文(简体) ), no-unsafe-payload-cast删除: 没有服务类或 defineMethod 通用;投入由合同打出
no-raw-button-strings, (中文(简体) ), no-raw-tooltip-strings, (中文(简体) ), no-raw-typography-strings移动到 oxlint.template.jsonc

发展中国家

bun run --filter @fitzzero/quickdraw-lint test 运行每个规则的案件 由牛林自己负责 RuleTester (单位:千美元)oxlint/plugins-dev:克林特的剖析器和 插件运行时间, in vitest),以及 plugin/test/oxlint.test.mjs 运行牛林 带有已运出配置的 CLI : 每条规则必须在此报告其实例( 使用 模板配置, 核心软件包的固定程序必须通过 判断服务定义的规则和基线命令 圆通相去. plugin/test/check.test.mjs 运行配置路径覆盖 从应用程序根和软件包目录中,以及 quickdraw-lint check。 。 。 . 该插件的 .mjs 文档和 bin/ 船是怎样的,没有建筑.

版本与发布记录

@fitzzero/quickdraw-lint 共发布 15 个版本,首次发布于 2026/10/05;过去 12 个月发布了 15 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
5.1.4latest2026/10/2619 天前
5.1.32026/10/2322 天前
5.1.22026/10/121 个月前
5.1.12026/10/111 个月前
5.1.02026/10/111 个月前
5.0.12026/10/101 个月前

其他发布通道:next → 5.0.0-rc.7。

关于 @fitzzero/quickdraw-lint 的常见问题

@fitzzero/quickdraw-lint 是什么?

oxlint 插件、 基础配置和快速绘图应用的基准命令

如何安装 @fitzzero/quickdraw-lint?

在项目目录运行 npm install @fitzzero/quickdraw-lint,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:oxlint(^1.52.0)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。它还提供命令行工具 quickdraw-lint,可以用 npx quickdraw-lint 直接运行。

@fitzzero/quickdraw-lint 支持 TypeScript 吗?

该包的 package.json 没有声明类型入口。需要类型提示时,可以在 npm 上查找社区维护的 @types/fitzzero__quickdraw-lint 是否存在。

@fitzzero/quickdraw-lint 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@fitzzero/quickdraw-lint 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=24。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@fitzzero/quickdraw-lint 可以商用吗?

@fitzzero/quickdraw-lint 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@fitzzero/quickdraw-lint 的下载量有多少?

根据 npm 官方下载统计,@fitzzero/quickdraw-lint 在 2026/10/15 – 2026/11/13 这 30 天内被下载 2,668 次,日均约 89 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@fitzzero/quickdraw-lint 还在维护吗?

最新版本 5.1.4 发布于 2026/10/26(19 天前);至今共发布 15 个版本,其中过去 12 个月发布了 15 个;首次发布于 2026/10/05。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。