@clipboard-health/oxlint-配置
共享 氧化剂 剪贴板健康存储器的配置 .
目录
安装
npm install @clipboard-health/oxlint-config
配置包包含 @clipboard-health/oxlint-plugin 用于使用剪贴板的预设
习惯规则.
使用 frontend 预设还必须安装 oxlint-plugin-react-doctor >= 0.9.12。 。 。 .
要求数 oxlint >= 1.68.0: 配置引用规则, 旧的克林特版本不注册, 这失败的配置直接解析 .
使用量
当Repo需要添加剂成分时使用包的TypeScript帮助器. 奥克林特的内置 extends 用于简单的继承, 但它不会让回购安全附加 plugins, (中文(简体) ), overrides,而类似的数组字段则不重新指定共享值.
类型脚本配置
创建一个 oxlint.config.ts 在您的还原根中:
import {
base,
createOxlintConfig,
customRules,
typeAware,
vitest,
} from "@clipboard-health/oxlint-config";
import { defineConfig } from "oxlint";
export default defineConfig(
createOxlintConfig({
localConfig: {
categories: {
correctness: "error",
nursery: "off",
pedantic: "error",
perf: "error",
restriction: "error",
style: "off",
suspicious: "error",
},
ignorePatterns: [".agents", "coverage/", "node_modules/"],
options: {
denyWarnings: true,
typeAware: true,
typeCheck: true,
},
rules: {
"vitest/require-test-timeout": "off",
},
settings: {
node: {
version: ">=24.14.1",
},
},
},
presets: [base, customRules, typeAware, vitest],
}),
);
可用的预设 :
basecontractFixturescustomRulesfast(见 快速运行(中文(简体) )frontendreactjeststrict财务报告和审定财务报表strictTypeAware(选入;见 严格的预设(中文(简体) )typeAwarevitest
合并行为 :
plugins, (中文(简体) ),jsPlugins, (中文(简体) ),overrides,以及ignorePatterns附加顺序rules, (中文(简体) ),settings, (中文(简体) ),options, (中文(简体) ),categories, (中文(简体) ),env,以及globals将左右合并localConfig当密钥冲突时总是胜过预设值
对于反应应用程序,由独立程序组成 frontend 与存储器的测试运行器相关的策略 :
import { createOxlintConfig, frontend, typeAware, vitest } from "@clipboard-health/oxlint-config";
import { defineConfig } from "oxlint";
export default defineConfig(
createOxlintConfig({
localConfig: {
ignorePatterns: ["coverage/"],
},
presets: [frontend, typeAware, vitest],
}),
);
保存仓库架构规则、导入限制和 JavaScript 外掛程式
localConfig。 。 。 .
base 是全组织通用的JavaScript和TypeScript政策. frontend 这是
独立前端应用程序政策,包括React,可访问性和浏览器配置
JavaScript规则. typeAware 包含规则 需要Oxlint的 --type-aware 模式,以及 vitest
添加完整的 Vitest 策略 。 将特定存储器的例外保留在 localConfig。 。 。 .
frontend 注册内置 react, (中文(简体) ), jsx-a11y, (中文(简体) ), import, (中文(简体) ), oxc, (中文(简体) ), typescript,以及
unicorn 插件 . typeAware 登记册 typescript,包括由另一个
插件预设无 base。 。 。 .
[大 从省略这些插件注册的版本升级可以曝光已存在的 lint 违反情况。 升级时运行正常和有类型意识的线条,并允许足够的 CI 跑车内存 用于新激活的类型认识分析。 现有的重新登记可以保留.
JSON 配置
创建一个 .oxlintrc.json 在您的还原根中:
{
"$schema": "./node_modules/oxlint/configuration_schema.json",
"extends": ["./node_modules/@clipboard-health/oxlint-config/src/base.json"],
"categories": {
"correctness": "error",
"nursery": "off",
"pedantic": "error",
"perf": "error",
"restriction": "error",
"style": "off",
"suspicious": "error"
},
"ignorePatterns": [".agents", "coverage/", "node_modules/"],
"options": {
"denyWarnings": true,
"reportUnusedDisableDirectives": "error",
"typeAware": true,
"typeCheck": true
},
"settings": {
"node": {
"version": ">=24.14.1"
}
}
}
只有在简单的继承足够的时候才使用JSON. 贾森 extends 仍然为共享预设工作,但repo- local 阵列字段如 plugins 财务报告和审定财务报表 overrides 将不会获得由 createOxlintConfig。 。 。 .
对于使用Vitest的重置,从 vitest.json 改为 base.json 包含vitest插件和规则 :
{
"extends": ["./node_modules/@clipboard-health/oxlint-config/src/vitest.json"]
}
视需要取代共同规则:
{
"extends": ["./node_modules/@clipboard-health/oxlint-config/src/base.json"],
"rules": {
"no-console": "off"
}
}
快速运行
base 财务报告和审定财务报表 frontend 启用 reportUnusedDisableDirectives: "error",哪个旗帜 oxlint-disable
财务报告和审定财务报表 eslint-disable 评论不再压制任何东西。 因此,默认配置是
慢一点 此选项仅在完整, 类型意识运行时精确: 没有类型信息,
typescript/* 规则不能开火,所以他们的指示看起来没有用。 这个 fast 预设扩展
默认设置选项到 "off" 用于快速的非类型本地和编辑运行.
| 配置 | options.reportUnusedDisableDirectives | 用于 |
|---|---|---|
默认( e)base 或者说 frontend(中文(简体) ) | "error" | 完整型号的 Lint 运行和 CI |
默认 + fast | "off" | 快速的非类型本地和编辑器运行 |
fast 设置其他的,所以这两个配置是完全相同的。 写最后一首 presets· ;
localConfig 如果一个寄存器设置了选项本身, 仍然会获胜 .
存储器保存其规则 oxlint.config.ts 并从它中得来快的猜想
一个编辑规则的地方 :
// oxlint.config.ts
import { base, createOxlintConfig, typeAware } from "@clipboard-health/oxlint-config";
import { defineConfig } from "oxlint";
export default defineConfig(
createOxlintConfig({
presets: [base, typeAware],
}),
);
// oxlint.config.fast.ts
import { fast } from "@clipboard-health/oxlint-config";
import { defineConfig } from "oxlint";
import defaultConfig from "./oxlint.config.ts";
export default defineConfig({ extends: [defaultConfig], ...fast });
{
"scripts": {
"lint": "oxlint --type-aware --type-check",
"lint:fast": "oxlint --config oxlint.config.fast.ts"
}
}
lint 负载 oxlint.config.ts 并使用未使用的指导性报告方式运行类型意识规则.
lint:fast 选择快速配置并省略 --type-aware,所以请 typeAware 预设规则做
别跑 保留 typeAware 财务报告和审定财务报表 typeCheck 从配置选项中选择 lint 命令行,
因此,快速配置不需要覆盖它们.
杰森号 extends 进入点 base.json 包含选项; 设置
options.reportUnusedDisableDirectives 改为 "off" 在为快速配置扩展后.
严格的预设
这些规则捕捉到真正的bug,但是在遗留的代码中经常会起火,所以它们被选入. 收养 寄存器 : 添加预设, 然后在同一更改中压制已有的违规内容如此新 代码满足了栏.
| 预设 | 规则 | 接头 |
|---|---|---|
strict | @clipboard-health/no-ambiguous-positional-parameters | 两个或两个以上位置参数,其中两个共享一个类型(呼叫者可以互换)或一个是布尔(在呼叫站点无法读取). 具有单一参数的函数是免责的,测试文件也是如此. |
strictTypeAware | typescript/strict-boolean-expressions | 核实数字和图表的真实性 0 读作缺失。 允许保留字符串:治疗 "" 因为失踪通常是故意的. |
presets: [base, customRules, strict, typeAware, strictTypeAware, vitest],
给每次压制都一个理由: // oxlint-disable-next-line <rule> -- <reason>。 。 。 .
类别
这个配置为代理写作代码所调制:执行防止出错或帮助代理工作更快的规则,忽略只编码出人类风格偏好的规则. 类别作为否定列表(可归属类别,然后禁用作为噪声的个别规则)而不是允许列表使用,因此类别中新的捕虫规则作为克林特船自动被采用.
| 类别 | 设置 | 为什么 |
|---|---|---|
correctness, (中文(简体) ), suspicious, (中文(简体) ), perf | error | 可能有错误和性能问题. |
restriction | error | 搭载高值护栏: typescript/no-explicit-any, (中文(简体) ), typescript/no-non-null-assertion, (中文(简体) ), no-var, (中文(简体) ), unicorn/no-abusive-eslint-disable。 。 。 . |
pedantic | error | 卡莉丝 eqeqeq,则 typescript/no-unsafe-* 家庭 家庭 家庭, typescript/no-misused-promises, (中文(简体) ), typescript/switch-exhaustiveness-check, (中文(简体) ), array-callback-return。 。 。 . |
style | off | 平庸/一致性规则,没有防虫值。 明确选择保留的规则:故意选择一致性(curly, (中文(简体) ), no-else-return附加错误/安全规则 oxlint 文件 style (单位:千美元)no-new-func, (中文(简体) ), guard-for-in, (中文(简体) ), import/no-mutable-exports) (中文(简体) ). |
nursery | off | 规则仍在制定中;对于代理写作的代码来说太不稳定了. |
style 财务报告和审定财务报表 nursery 因为他们未来的规则是噪音而不是信号——没有什么值得自动通过的。 每个 style 因此,保留的规则明确列于 base.json。 。 。 .
什么是共享的
一揽子计划包括:
base.json: 简单的反相 JSON 预设extends使用量vitest.json: 扩展base.json带有 JSON 的 vitest 插件和规则extends使用量base预设: 为 TypeScript 构成导出共享插件、 规则和覆盖frontend预设: 共享前端 JavaScript, React Doctor, React, 和 JSX 无障碍政策typeAware预设: 需要 Oxlint 类型意识执行模式的规则react, (中文(简体) ),jest, (中文(简体) ),vitest预设: 常见回波类型的添加剂插件预设contractFixtures预设: 警告 MSW, Playwright, 并导出模拟 固定装置由生产者拥有的合同反应计划解析customRules预设: 注册 ESLint 独立剪贴板插件并复制 共用控制器、模块、合同、跨合同进口和合同包装测试 瞄准镜。 设定规则 选项,例如控制器规则forbidTsRestHandler, (中文(简体) ), 带有本地覆盖createOxlintConfig: 用 repo- 本地配置编译预设的助手
切换倒计时政策
typescript/switch-exhaustiveness-check 仍为错误
considerDefaultExhaustiveForUnions: true明确 default 定义未匹配的策略
值:拒绝它们、返回可选结果或适用倒计时均可能是故意的.
这也允许对运行时间数据包含但类型Script不包含的遗留值进行默认
代表着。 该规则仍然报告,当一个开关没有缺省时,工会成员被忽略了.
这是有意的权衡:增加工会或雇主成员不会引发诊断
切换已存在默认值。 需要每个新成员的仓库或封闭调度员
经审查后可选择加入 considerDefaultExhaustiveForUnions: false 以本地规则覆盖。 保留
合同需要时,运行时间倒计时;不要仅仅满足条件
检查。 明确违约并不证明其商业政策是正确的.
在倒置冲突前需要重复的空标签 unicorn/no-useless-switch-case
并创造 complexity 将这些标签算作额外路径 。 两名警卫仍然可以执行任务。 见
上游选项文档
对于更严格的未来成员行为。 升级到已公布的软件包发布后再去除 a
消费者的本地规则禁用.
故意残疾规则
base.json 无法持有评论, 因此对非明显“ 关闭” 条目的推理 住在这里( 根据 oxlint 1. 60, 2026-06-11 上的剪贴板- 健康 ) :
no-throw-literal(只有脚本文件)数字 :typescript/only-throw-error替换此只使用语法的规则,并使用类型来识别错误值。 基础规则可以拒绝被推迟的键入变量中的错误值 . 上游替换指南 要求取消基础规则以避免不正确的诊断. 覆盖.ts, (中文(简体) ),.tsx, (中文(简体) ),.mts,以及.cts; Java脚本保留no-throw-literal,并保留类型脚本only-throw-error真正的非爱抛出。 在CI中运行有意识的类型。 升级为发布后, 消费者可以删除整个存储器no-throw-literal: off;一个明确匹配的本地文件覆盖可以选择回到只使用语法的规则.typescript/strict-void-return: TypeScript 故意允许一个值返回函数,其中void由于调用者丢弃结果, 需要调用。 这支持普通forEach调用Set.add, (中文(简体) ),Map.set,或Array.push,并调回返回同步控件的 API。 该规则拒绝这些有效用途allowReturnAny选项只放松any返回。 保留no-misused-promises财务报告和审定财务报表no-floating-promises启用用于合成滥用。 TypeScript 仍然拒绝从明确宣布返回的函数返回的值void。 。 。 .typescript/no-unnecessary-template-expression:简化模板文字中的字符串表达式是一种风格偏好. 允许明确字符串正常化和字符串-enum格式化. 保留restrict-template-expressions财务报告和审定财务报表no-base-to-string能够检测到不安全的插值.typescript/no-unnecessary-type-conversion: 删除Number, (中文(简体) ),String, (中文(简体) ),Boolean,或.toString()基于已声明类型进行转换是一种样式偏好。 在运行时间数据与其所声明的类型不匹配的边界上,去除可以改变数值或类型. 明确强制是允许的;它不能取代运行时的计数验证或不安全操作的守卫.typescript/no-unnecessary-boolean-literal-compare: 比较,例如value === true, (中文(简体) ),value === false,以及value !== false即使静态类型说boolean。在运行时,特性标记提供者和持续记录仍然可以提供非布尔值、缺失值或无效值;简化这些比较改变如何处理这些值。 保持对比完好无损,关闭两个共享预设中的冗余诊断. 权衡结果正在失去比已验证的布尔值进行比较的警告;其他类型的正确性和不安全操作规则仍然能够使用.typescript/no-useless-default-assignment: 需要的静态类型不能证明运行时数据包含字段. 删除一个初始化器可以在数据库记录,API响应,特征标记,或会话有效载荷不完整时更改值. 保留这些运行时间默认值;此规则只表示一个按类型看似无法达到的默认值. 使其无法接受在已验证代码中丢失冗余代码信号,因此防御默认在未验证的边界内仍然可用. 编译器和其他类型意识的正确性和不安全操作规则仍然启用.no-extra-boolean-cast数字 :Boolean(value)在一个条件中,使数字和符号真实性明确。 删除它是一种普通条件的运行时间等同,但重新引入typescript/strict-boolean-expressions诊断,因为这一规则拒绝隐含的数字或隐含的真理。 将明确的转换作为冗余风格处理与该类型意识政策相冲突;保持严格的布尔后卫,并保留在基底和独立的前端预设中这一风格规则.typescript/no-invalid-void-type: 有效的补全 API 使用通用调用, 如Promise.withResolvers<void>()财务报告和审定财务报表http.get<void>()即使与allowInGenericTypeArguments: true,规则拒绝调用表达式类型参数;这个限制是从打字符-eslint继承的,而不是Oxlint端口差异. 将这些 API 更改为undefined可改变其公共签名:avoid解决许可证resolve()没有争论。 保留其他 TypeScript 正确性和不安全操作的守护功能 .typescript/consistent-return: 可选的浏览和过滤回调将赤色返回与值返回合法混合;规则还报告使用已宣布路径的抓取路径never帮手 内容treatUndefinedAsUnspecified选项改变其清晰度undefined而不是承认这些合同. 上游建议 类型脚本noImplicitReturns而是编译器选项 。 启用该选项并在 CI 中运行编译器检查;strict单靠自己无法做到这一点。 没有编译器守护的仓库必须保持明确的本地"typescript/consistent-return": "error"直到他们收养一个替补.array-callback-return保留用于缺失回调结果。 现有的被抑制的回报型错误和含糊不清的合同仍然是代号债务.typescript/no-unsafe-enum-comparison:像HTTP状态等被命名常数被比作有线数字和串行. 共享的 TypeScript 指导也更喜欢Const对象而不是enum. 与此相反,这一规则要求匹配名义的enum类型,拒绝这些边界比较和输入验证. 禁用它也允许匹配原始语义:在这种情况下,它不会使用指定的成员来执行。 编译器仍然拒绝不相容的截然不同的enum和出行字面;它并不取代这个规则能做的每一个检查. 需要名义上enum身份的存储器可以明确地将这一规则设定为:"error"内localConfig.rules编辑 上游指导 描述此权衡; 该规则没有用于平面边框比较的配置选项。 其他防震装置,包括重复值检测,仍然可以使用.typescript/consistent-type-imports: 牛林的口号不是emitDecoratorMetadata-有意识(即使是在tsconfig链中带有旗帜的有类型意识),因此它将雀巢JS构造器-注入类标为只类型. 应用它的固定值将 DI 令牌转换为import type,SWC从中去除design:paramtypes元数据,运行时断开注入. 在 NestJS repos 中不要启用,直到 oxlint 匹配 typescript-eslint 的装饰处理 .jest/no-confusing-set-timeout(预设):假阳性爆炸——当一个笑话设置文件呼叫时jest.setTimeout,规则旗下没有setTimeout电话(764个干净文件的265k诊断)。 vitest 预设没有jest/*键 : 在 oxlint \\ 1.68 下, 只启用了 vitest 插件,jest/*配置密钥被默默地忽略, 和 joest- plugin 唯一的规则( 例如这个和jest/prefer-ending-with-an-expect——不能开火——vitest/no-confusing-set-timeout不是一个已注册的规则名, 因此“ 关闭” 条目失败配置解析 .import/no-named-as-default编号 :import/no-named-as-default-member:低信号;它们标出合法的默认-导出导入模式比实际错误多得多(870个点击,~0个bugs).vitest/no-conditional-in-test(vitest presition):规则将一个测试中的每一个条件,包括嵌入的模拟回调和表格驱动的输入构造,都视为违反. 国产假货、货币障碍和有条件的固定性能需要分支,而不削弱这种断言。 该规则无法区分这些案例;将相同的分支抽出来作为帮助者,只能从它的测试-祖先heuristic中隐藏. 保留vitest/expect-expect, (中文(简体) ),vitest/valid-expect,以及vitest/require-to-throw-message能够检查断言.prefer-destructuring: 样式偏好, 没有防止错误值; 不值得作为代理守护符 .
在对13个消费者再投资项目进行审计后,下列项目被关闭(对当地企业进行重新投资) "off" 条目、 内置禁用注释和平原运行 base + 键 vitest 2026-10-14 7 repos上的预设:
no-await-in-loop:相继等待通常是故意的(速率限制,蒙哥会话,订购). 该规则推动特工们走向Promise.all,这会造成货币错误。 它有1 007个内线 禁用9套.node/no-process-env13个重机中的8个在本地关闭 重置中央集权配置可以重开.oxc/no-map-spread:一种微优化. 它建议用Object.assign。 。 。 .unicorn/consistent-function-scoping:将封口移动到模块范围往往使代码更难被读取.unicorn/no-useless-undefined: 与需要明示的脚本类型签名相冲突undefined。 。 。 .- 固定式,限制类别数字 :
no-plusplus, (中文(简体) ),typescript/explicit-member-accessibility, (中文(简体) ),typescript/no-import-type-side-effects, (中文(简体) ),unicorn/import-style。 。 。 .
同一审计取消了明确选择 typescript/array-type 财务报告和审定财务报表 unicorn/filename-case他们是 style 规则,所以 style 分类现在让他们远离.
在采用回调和强制默认时,首先升级为包含回调和强制的已发布版本,然后去除冗余本地 off 条目 typescript/strict-void-return, (中文(简体) ), typescript/no-unnecessary-template-expression,以及 typescript/no-unnecessary-type-conversion需要这些更严格公约的仓库可以选择重新加入当地公约 error 超载 保留 no-misused-promises 财务报告和审定财务报表 no-floating-promises 启用 : 允许丢弃的同步结果不允许未处理的同步失败 。 保留 restrict-template-expressions 财务报告和审定财务报表 no-base-to-string 启用用于不安全插值.
测试文件在 base.json 禁用 typescript/no-unsafe-* 家庭 家庭 家庭, unbound-method, (中文(简体) ), no-non-null-assertion,以及 restrict-template-expressions 用于测试文件:模拟, expect.any,以及 createMock 使这些规则在测试中达到~90%的噪声(模仿长久以来的eslint-config 覆盖),同时保持它们可以执行生产代码. JSON 虚拟预设扩展 base.json,但导出的类型脚本 vitest 预设加载器只读取其插件和规则。 因此,导出预设带有相同的 typescript/unbound-method: off 规则用于基准测试文件 globs 。 一会儿 localConfig 仍然可以恢复对选定测试的规则.