关于 deslop
Deslop 是用于整理近期编写代码的技能,目标是在不改变行为的前提下提升清晰度。它规定了限定修改范围、遵循 style.md 和保留 API 的流程。
主要功能
- 01整理近期修改的代码
- 02保留行为和公共 API
- 03仅修改相关文件
- 04遵循 style.md 中的风格规则
- 05跳过生成文件和供应商代码
- 06总结修改与跳过的内容
适用场景
- 01简化当前会话中编写的代码
- 02在不改变行为的情况下精简条件逻辑
- 03整理代码时避免无关修改
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ mikecann/ agent-skills --skill deslop安装后在 Claude Code 中输入/deslop确认已加载。
附带文件style.md
详细介绍
Deslop
将刚写好的代码整理得更紧凑、简洁,更显用心。
请先阅读 style.md。该文件是样式规则的权威依据。
流程
- 确定目标文件。
- 从本次会话中修改过的文件开始。
- 如果可以,使用
git diff;否则查看最近的编辑记录或用户明确列出的文件。 - 不要改动无关文件。
- 编辑前阅读每个目标文件。
- 使用并行子 Agent 执行清理。
- 如果有多个文件,将它们分配给不同的子 Agent。
- 如果只有一个较大的文件,也可以安排一个子 Agent 单独进行第二轮检查。
- 明确告知每个子 Agent 负责的文件。
- 如果范围只有一到三个较小的文件,单轮处理即可。不要为了机械地满足规则而增加子 Agent 的开销。
- 告知每个子 Agent:
- 阅读
skills/deslop/style.md - 只简化分配给自己的文件
- 完全保留原有行为
- 跳过只会增加改动、却不会让代码更清晰的修改
- 简短汇报所做的修改和有意跳过的内容
- 阅读
- 检查子 Agent 的输出,应用修改,然后自行进行最终检查。
- 具体总结清理内容。
- 示例:“扁平化了 3 个嵌套条件,将 2 个布尔变量重命名,并替换了 1 个非空断言”
约束
- 绝不改变行为。这是样式清理,不是重构。
- 如果样式规则与保留行为冲突,以保留行为为先。
- 优先进行小范围的局部修改,避免大面积重写。
- 如果只有深入进行架构重构才能显著改善代码,请停止,并说明原因,不要强行超出清理范围。
- 跳过生成文件、供应商代码、构建产物和锁文件。
- 除非用户要求,否则跳过测试。
- 如果应用某条规则会降低代码可读性,就跳过该规则。
- 保留导出的 API 和公共 API,除非用户明确要求修改 API。
- 保留导出的 TypeScript 签名,除非用户明确要求修改类型或 API。
- 如果代码已经很整洁,就说明这一点,不要强行修改。
优先检查的内容
- 用保护子句替代嵌套条件
- 用
if加提前返回替代else - 无需重新赋值时使用
const而非let - 通过缩窄类型或直接移除来替代
!非空断言 - 用
Boolean(value)或显式比较替代!!value - 使用更清晰的布尔变量名,例如
isOpen、hasItems、canRetry - 缩短函数,让每个函数只负责一项明确工作
- 精简编排函数,并提取辅助函数
- 将查询/数据收集与操作/副作用分开
- 让函数名准确说明其副作用
- 使用小型纯函数拆分职责过多的 Hook 或组件
- 使用对象参数替代过长的位置参数列表
- 对判别联合进行穷尽处理
- 使用提前返回扁平化 React 渲染分支
- 逻辑只使用一次时,将 JSX 处理函数内联
- 如果处理函数在多个地方复用,则继续将其提取到外部
错误示例与正确示例
// Bad: nested control flow and unnecessary else
function getLabel(user?: User) {
if (user) {
if (user.name) {
return user.name;
} else {
return "Anonymous";
}
} else {
return "Anonymous";
}
}
// Good: early returns, flat flow
function getLabel(user?: User) {
if (!user?.name) return "Anonymous";
return user.name;
}
// Bad: hoisted one-off handler and && render
const handleClick = () => doSave();
return hasError && <ErrorBanner onRetry={handleClick} />;
// Good: inline simple handler and explicit null branch
return hasError ? <ErrorBanner onRetry={() => doSave()} /> : null;
检查清单
- 已首先阅读
style.md - 只修改了相关文件
- 在适当时使用了子 Agent 执行清理
- 保留了原有行为
- 有意跳过了部分修改
- 最终总结说明了所做的修改
评论
支持 Markdown