关于 install-anti-slop
install-anti-slop 是用于在代码仓库中安装或更新 vendored anti-slop lint 插件的技能。它指导匹配依赖版本、合并配置、运行检查并记录来源,同时保留项目现有设置。
主要功能
- 01选择安装或更新流程
- 02复制插件并保留来源文件
- 03匹配 Oxlint 依赖版本
- 04合并插件规则与忽略模式
- 05运行 lint 和类型检查
适用场景
- 01在仓库中添加 anti-slop
- 02更新现有的 vendored 插件
- 03保留配置并注册规则
- 04验证变更并记录来源信息
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ dmmulroy/ anti-slop --skill install-anti-slop安装后在 Claude Code 中输入/install-anti-slop确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
assets/anti-slop/index.tsassets/anti-slop/effect/index.tsassets/anti-slop/effect/rules/no-manual-effect-error-tag.tsno-manual-tag-comparison.tsno-manual-tagged-construction.tsno-service-constructor-imports.tsprefer-effect-match.tsassets/anti-slop/effect/shared/tagged-values.tsassets/anti-slop/rules/no-array-filter-map.tsno-chained-type-assertions.tsno-conditional-empty-object-spread.tsno-known-value-widening.tsno-module-mocking.tsno-object-parameters.tsno-reduce-accumulator-copy.tsno-reflect-apply.tsno-reflect-get.tsno-runtime-typeof.tsno-shape-in-symbol-names.tsno-unknown-parameters.tsno-unknown-returns.tsno-unknown-type-aliases.tsno-unsafe-dictionary-type.tsno-widen-then-assert.tsrequire-readable-spacing.tsrequire-safety-comment-for-type-assertion.tsassets/anti-slop/shared/array-method.tsdictionary-types.tsfunction-parameters.tslexical-type-parameters.ts详细介绍
安装或更新 anti-slop
Anti-slop 是随项目引入的代码:目标仓库拥有自己的规则、诊断、测试和配置。引入上游更改时,请保留这些既有选择。
选择操作路径
阅读仓库的 Agent 指令和 git status。确认其包管理器、Oxlint/Vite+ 配置,以及所有现有的 anti-slop 入口,包括 jsPlugins 引用的已重命名或已迁移副本。
- 已有安装——更新、升级、迁移或重新配置: 阅读更新随项目引入的安装,并遵循其中的流程,而不是下面的新安装步骤。
- 尚未安装——全新安装: 遵循下面的流程。如果用户要求更新但找不到现有安装,请先确认目标,再进行安装。
当操作和目标路径已确定,且已识别现有工作时,即可完成。
全新安装
-
从此技能复制捆绑的插件。在目标仓库中运行:
node <skill-directory>/scripts/install.mjs这会创建
tools/oxlint/anti-slop/。如果仓库已有明确的工具目录布局,可将其他相对路径作为第一个参数传入。脚本会拒绝替换已有目标目录;请将现有副本交由更新流程处理,而不要使用--force。保留嵌套的
vendor/eslint-stylistic/LICENSE和UPSTREAM.md;它们会随复制的规则一并带入。可读性检查是自包含的,不需要 Stylistic 插件依赖。当所有文件(包括随项目引入的许可证和来源记录)都位于约定的目标路径,且未替换现有副本时,即可完成。
-
安装当前兼容的依赖项,不要依赖 Agent 记忆中的版本:
- 如果仓库已依赖
oxlint,请从包管理器或锁文件读取其已安装版本,并安装完全相同版本的@oxlint/plugins。请固定到确切版本,而非使用版本范围,以便未来升级时两个包一起更新。 - 仅当仓库没有
oxlint依赖时,才查询npm view oxlint version和npm view @oxlint/plugins version,然后为两个包安装相同的当前版本。 oxlint是开发依赖。复制的源码会导入@oxlint/plugins,因此对于仅在本地使用的插件,也应将其安装为开发依赖。- 不要替换包管理器,也不要改写无关的依赖版本范围。
当已安装匹配且兼容的版本,并保留了无关依赖版本范围时,即可完成。
- 如果仓库已依赖
-
注册通用插件,配置忽略项,并启用所有通用规则。对于
oxlint.config.ts或.oxlintrc.json,请将以下字段合并到现有配置中:ignorePatterns: [ ".agent/**", ".agents/**", ".claude/**", ".codex/**", ".continue/**", ".cursor/**", ".gemini/**", ".opencode/**", ".pi/**", ".roo/**", ".windsurf/**", "tools/oxlint/anti-slop/**", ], jsPlugins: [ { name: "anti-slop", specifier: "./tools/oxlint/anti-slop/index.ts" }, ],保留所有现有忽略项。如果插件复制到了其他位置,请调整最后一个模式。检查仓库中其他项目本地的 Agent 工具目录,并将其加入忽略项,避免把已安装的技能、钩子或生成的 Agent 配置当作应用源码进行 lint。不要笼统忽略所有点号开头的目录,因为有些仓库会在其中保存自有源码或检查文件。
对于 Vite+,请将这些字段添加到
lint.ignorePatterns和lint.jsPlugins。同时将相同的模式合并到fmt.ignorePatterns,避免vp check重新格式化已安装的 Agent 资源或随项目引入的插件。合并现有条目,不要直接替换。将以下规则(包括 Oxlint 原生的配套规则)设为
"error":{ "oxc/no-accumulating-spread": "error", "anti-slop/no-array-filter-map": "error", "anti-slop/no-reduce-accumulator-copy": "error", "anti-slop/no-chained-type-assertions": "error", "anti-slop/no-conditional-empty-object-spread": "error", "anti-slop/no-known-value-widening": "error", "anti-slop/no-module-mocking": "error", "anti-slop/no-object-parameters": "error", "anti-slop/no-reflect-apply": "error", "anti-slop/no-reflect-get": "error", "anti-slop/no-runtime-typeof": "error", "anti-slop/no-shape-in-symbol-names": "error", "anti-slop/no-unknown-parameters": "error", "anti-slop/no-unknown-returns": "error", "anti-slop/no-unknown-type-aliases": "error", "anti-slop/no-unsafe-dictionary-type": "error", "anti-slop/no-widen-then-assert": "error", "anti-slop/require-readable-spacing": "error", "anti-slop/require-safety-comment-for-type-assertion": "error" }对于
no-array-filter-map,只有在目标运行时支持迭代器辅助方法时,才优先使用惰性.values().filter(...).map(...).toArray()管道;否则请使用恰当的单个flatMap或本地变更型归约器。不要机械地重写链式调用;请检查回调顺序、索引、稀疏数组、thisArg和过滤语义。此 AST/作用域规则会刻意避免推断未知的接收者类型。 将no-reduce-accumulator-copy与原生规则oxc/no-accumulating-spread配合使用:自定义规则可捕获受支持的非展开复制,例如Object.assign({}, acc, item)、Array.from(acc),以及数组累加器的concat/slice调用。允许修改新建的局部累加器;复制单个输入项也允许。命名回调、间接辅助函数和嵌套累加器属性不会被完全分析,因此不要声称所有二次复杂度的归约器都已被排除。如果仓库在包清单中声明了
effect,或用户明确要求 Effect 规则,也要注册可选的 Effect 插件:jsPlugins: [ { name: "anti-slop-effect", specifier: "./tools/oxlint/anti-slop/effect/index.ts", }, ], rules: { "anti-slop-effect/no-manual-effect-error-tag": "error", "anti-slop-effect/no-manual-tag-comparison": "error", "anti-slop-effect/no-manual-tagged-construction": "error", "anti-slop-effect/no-service-constructor-imports": "error", "anti-slop-effect/prefer-effect-match": "error", },将这些条目与通用插件配置合并,而非替换它。不要仅因锁文件中传递依赖出现 Effect 就启用 Effect 插件;必须有直接的包清单依赖或用户的明确请求。该规则覆盖相对路径的项目导入。对于包别名导入,应将其报告为当前限制,而不是声称已强制执行。
完成条件:通用规则和符合条件的 Effect 规则均已注册,且现有配置得到保留。
-
运行仓库的 lint 命令和类型检查。对于 Vite+,添加 lint 和 format 忽略项后,运行仓库完整的
vp check命令。如果自有项目源码中出现问题,应予以报告;仅当用户要求迁移/清理时才修复。不要抑制规则、降低规则严重级别、添加不安全的类型转换,或机械地粉饰类型以通过 lint。获准进行清理时,使用 lint 自动修复应用
require-readable-spacing,然后运行仓库的格式化工具并再次运行 lint。确认第二轮修复/格式化不会更改文件。将空白修复与语义编辑分开,保留文档注释关联和重载分组,不要启用另一套相互竞争的完整格式化预设。完成条件:检查均已运行;对于获准的清理,已验证修复/格式化的稳定性;并且所有失败均已解决,或已附诊断信息报告。
-
在 vendored 入口文件旁的
UPSTREAM.md中记录来源信息:源仓库、准确的源提交,或在可用时可恢复的原始快照、已安装的插件路径,以及有意进行的偏离。确认该修订标识对应实际复制的资源;仅记录包版本或当前上游 HEAD 并不足够。如果无法确定来源信息,应记录为未知,而非猜测。检查最终差异,并报告安装路径、来源身份、依赖/配置变更及检查结果。完成条件:记录和报告均准确描述了实际安装的文件以及任何遗留问题。