新闻详情

新闻详情

首页 / 资讯中心 / 详情

Desloppify语言插件开发指南:30行代码接入新语言的通用插件体系

发布时间:2026/9/29 22:04:14来源:尧图网络
Desloppify语言插件开发指南:30行代码接入新语言的通用插件体系
Desloppify语言插件开发指南30行代码接入新语言的通用插件体系【免费下载链接】desloppifyAgent harness to make your slop code well-engineered and beautiful.项目地址: https://gitcode.com/gh_mirrors/de/desloppifyDesloppify 是一个让 AI Agent 系统化提升代码库质量的开源工程工具它的语言插件体系支持 29 种语言你只需编写一个约 30 行的通用语言插件generic plugin就能接入外部 Linter 并自动获得 AST 级代码分析能力。本文带你从零基础理解这套插件机制并完整演示如何为 Desloppify 新增一门语言。Desloppify 是什么先看懂它的插件化架构Desloppify 的核心思路是「机械检测 主观评审」双轮驱动一边运行各类检测器找出死代码、重复、复杂度和安全隐患一边由 LLM 做命名、抽象、模块边界等主观评审最后通过一个优先级修复循环持续迭代直到代码库达到「资深工程师眼中漂亮」的水平严格分 98。而这一切的地基就是 desloppify/languages/ 下的语言插件体系。每个语言都是插件目录引擎层通过统一的插件契约调用它们语言之间互不干扰。两级插件体系29 种语言如何组织根据 desloppify/languages/README.md 的说明Desloppify 的语言插件分为两档档位数量特点代表完整插件full8手写检测器、主观评审维度、自动修复器Python、TypeScript、Rust、Go通用插件generic21单文件约 20–40 行封装外部 Linter tree-sitterRuby、Java、Kotlin、Julia通用插件是任何新语言的最佳起点——这也是本文主角。它的最大价值零共享代码改动插件目录创建后启动时自动发现auto-discovery免费获得安全扫描、评分集成、区域分类test/vendor/config/generated装 tree-sitter 即白送函数提取、重复检测、依赖图、耦合/循环检测、测试覆盖分析、AST 复杂度、上帝类检测、未使用导入检测第一步创建插件目录写一个 30 行的init.py通用插件全部逻辑就一个文件desloppify/languages/语言名/__init__.py。我们直接看 Erlang 插件的真实实现全文仅 27 行desloppify/languages/erlang/init.pyErlang language plugin — dialyzer. from desloppify.languages._framework.generic_support.core import generic_lang from desloppify.languages._framework.treesitter import ERLANG_SPEC generic_lang( nameerlang, extensions[.erl, .hrl], tools[ { label: dialyzer, cmd: dialyzer --src -r . 21, fmt: gnu, id: dialyzer_warning, tier: 2, fix_cmd: None, }, ], depthshallow, detect_markers[rebar.config, rebar.lock], treesitter_specERLANG_SPEC, )核心就是一次generic_lang()调用它定义在 desloppify/languages/_framework/generic_support/core.py。逐个参数拆解参数作用建议name语言注册名小写与目录名一致extensions文件扩展名如[.rb]、[.jl]tools外部工具清单见下文至少 1 个detect_markers项目根识别标记文件如Gemfile、Cargo.toml让desloppify detect能认出该项目treesitter_spectree-sitter 规格框架已内置大量语言规格能挂就挂depth集成深度shallow起步有 tree-sitter 时自动升为standardexclude排除目录如vendor、node_modules其他可选参数还包括default_src源码根Ruby 惯例是lib/、external_test_dirs、entry_patterns等Ruby 插件就是范例 desloppify/languages/ruby/init.py。第二步配置外部 Linter 工具tools列表是通用插件的「发动机」每个工具是一条命令规格{ label: rubocop, # 展示名 cmd: rubocop --formatjson, # 扫描命令 fmt: rubocop, # 输出格式解析器 id: rubocop_offense, # 问题来源标识 tier: 2, # 严重级别2建议级不阻塞 fix_cmd: rubocop --auto-correct, # 可选一键修复命令 }几个关键细节见 desloppify/languages/_framework/generic_support/core.py 与工具解析模块 desloppify/languages/_framework/generic_parts/parsers.pyfmt决定解析器框架内置json、gnu、rubocop、eslint、golangci、cargo等解析器优先选输出稳定、机器可解析的格式Ruby 插件特意用--formatjson就是为了跨版本稳定优雅降级工具未安装或超时不会让扫描崩溃只会跳过该检测项fix_cmd自动注册为修复器desloppify autofix会直接调用它第三步挂上 tree-sitterAST 能力开箱即用如果 desloppify/languages/_framework/treesitter/ 中已有该语言的规格如JULIA_SPEC、RUBY_SPEC传一个treesitter_spec参数即可。在tree-sitter-language-pack已安装的前提下插件自动获得函数/方法/类提取 →重复代码检测导入解析 →依赖图→ 耦合、孤儿文件、循环依赖检测测试覆盖映射基于导入 命名约定AST 复杂度指标嵌套深度、圈复杂度、长函数、参数数量上帝类检测、责任内聚、未使用导入、签名方差分析Julia 插件甚至没有外部 Linter 也能工作纯靠 tree-sitter 支撑 desloppify/languages/julia/init.py。第四步验证插件是否生效写完后不需要改任何共享代码直接跑测试即可# 跑该语言插件的测试 pytest -q desloppify/languages/erlang/tests/ # 验证所有语言插件契约标准化校验 pytest -q desloppify/tests/lang/common/test_lang_standardization.py然后在你的目标语言项目里执行desloppify detect确认语言被识别再跑desloppify scan --path .验证检测器输出。何时升级为完整插件通用插件足以覆盖绝大多数场景。只有当外部 Linter 和 AST 模式匹配都抓不住语言惯例时才值得升级为完整插件走三步渐进路线先通用generic_lang() 工具规格 tree-sitter原位扩展加区域规则、测试覆盖钩子、安全钩子仍是通用插件转完整改用register_full_plugin(...)目录需包含commands.py、extractors.py、phases.py、move.py、review.py、test_coverage.py及detectors/、fixers/、tests/子目录注册时会校验结构Python 插件是完整插件的标杆15 个手写检测器阶段全部注册在一个文件里 desloppify/languages/python/init.py。完整插件依然能复用通用积木_run_tool()、共享阶段构建器detector_phase_security()、detector_phase_test_coverage()等定义在 desloppify/languages/_framework/base/phase_builders.py。想跳过手写骨架官方脚手架一条命令生成完整插件包desloppify dev scaffold-lang 语言名 --extension .ext --marker 根标记文件该命令实现见 desloppify/app/commands/dev.py 与模板生成模块 desloppify/app/commands/dev_scaffold_templates.py。插件设计规则避免踩坑⚠️导入方向单向languages/语言/→engine/detectors/与languages/_framework/*严禁反向依赖⚠️ 语言专属代码只放在自己的语言目录跨语言可复用代码进_framework/⚠️ 通用插件不要模仿完整插件的目录结构——它就该最小化上手清单阅读插件总览desloppify/languages/README.md参考最简范例desloppify/languages/erlang/init.py27 行参考带注释范例desloppify/languages/ruby/init.py了解generic_lang()完整参数desloppify/languages/_framework/generic_support/core.py升级路径与契约结构desloppify/languages/README.md30 行代码就能让你的 Desloppify 看懂一门新语言——从机械检测到 AST 分析全部自动就绪。选一个你常用的语言今天就可以动手写第一个插件。【免费下载链接】desloppifyAgent harness to make your slop code well-engineered and beautiful.项目地址: https://gitcode.com/gh_mirrors/de/desloppify创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

告别繁杂环境配置,FlyEnv 一站式全栈开发工具箱,让本地开发一键起飞:TaoToken 统一 Key 接入 settings.json 配置骨架 2026/9/29 23:12:49

告别繁杂环境配置,FlyEnv 一站式全栈开发工具箱,让本地开发一键起飞:TaoToken 统一 Key 接入 settings.json 配置骨架

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
从“玩具项目“到实战高手:我的Agent开发进阶之路(附面试必备知识体系) 2026/9/29 23:12:49

从“玩具项目“到实战高手:我的Agent开发进阶之路(附面试必备知识体系)

作者分享个人Agent开发学习历程,从最初接触"玩具项目"到逐步完善为实用开发路线。核心内容围绕Agent基本概念(AgentHarnessLLM)、Harness关键模块(Prompt/内存/工具调用等)、主流框架(LangGraph/…

阅读更多 →
公寓报修管理系统-springboot + vue 2026/9/29 23:12:49

公寓报修管理系统-springboot + vue

本项目为前几天收费帮学妹做的一个项目,在工作环境中基本使用不到,但是很多学校把这个当作编程入门的项目来做,故分享出本项目供初学者参考。 一、项目描述 基于springboot vue的公寓报修管理系统 登录网址: http://localhost:8081/ 管理员…

阅读更多 →
忘不掉的背单词软件品牌:我用30天实测了复习间隔的对抗节奏 2026/9/29 23:12:49

忘不掉的背单词软件品牌:我用30天实测了复习间隔的对抗节奏

为什么背过的词总在第三天集体消失 先看一组我去年在三个班做的实测数据。让62名初二学生用同一份包含80个新词的清单,A组连续三天每天背一遍,B组第一天背完后隔一天再背,然后隔两天背第三次。七天后测试,A组平均记住29个&#xf…

阅读更多 →
事务里 catch 住异常继续提交:Spring Boot 3 批处理脏数据的复现与取舍 2026/9/29 23:12:48

事务里 catch 住异常继续提交:Spring Boot 3 批处理脏数据的复现与取舍

本文摘要:批处理单行失败时 catch 异常继续提交,常见结果是整批回滚或部分行脏写。三个最小复现拆开吞异常、自调用绕代理与 checked 异常不回滚三类成因。 一、问题与结论 两万行对账导入的写法是单事务内循环 INSERT,catch (RuntimeExcept…

阅读更多 →
数据平台数据清洗全攻略:工具选型、实战流程与避坑指南 2026/9/29 23:12:42

数据平台数据清洗全攻略:工具选型、实战流程与避坑指南

做数据平台的数据清洗,说实话是这个行业里最不受待见、但价值密度最高的活儿。你去看那些搜索热词,头歌flume部署、pandas数据处理、MapReduce招聘清洗、网约车Spark清洗、农产品价格清洗……表面上是五花八门的工具和场景,实际上全是同一件事…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉