跳转到内容
cd /languages
  • JVM 脚本
  • 编程语言
  • AST 和符号支持

Maguyva 的 Groovy 支持:面向 Gradle 与 Jenkins 代码的代码图谱

Maguyva 以 AST、符号和图谱支持 Groovy,让 AI 智能体跨越 Groovy 应用、Gradle 构建和 Jenkinsfile 追踪类、闭包和调用。

Groovy 让浅层 AI 工具栽跟头的地方

Groovy 读起来常常像配置文件。在 Gradle 构建里,dependencies { implementation ... } 是一串带闭包的方法调用,声明式 Jenkinsfile 也是如此。构建器把任意名字变成调用,GDK 又给每个对象加上 each、collect 这样的方法。记录每一个调用的工具会被这些噪声淹没。

Maguyva 过滤掉 DSL 和 GDK 这一层,让你自己的方法和类凸显出来。

Maguyva 在 Groovy 中提取什么

Maguyva 支持 .groovy 和 .gradle 文件以及 Jenkinsfile。类、函数和方法都会被提取,导入会规范化 import static 和 as 别名。调用名会去掉末尾的闭包块和 ?. 安全导航运算符,因此 repo?.save(order) { ... } 会记录为对 save 的调用。类内部不带接收者的调用会解析到该类自己的方法。

噪声会分层过滤:

  • 约 140 个标准库、Gradle 和 Spock 名称,如 dependencies、implementation、task、given、when、then 和 Mock。
  • 约 260 个 GDK 方法,如 each、collect、inject 和 eachLine。
  • 构建器 DSL 名称,包括 pipeline、stage、steps 和 sh 等 Jenkins 步骤,在以构建器风格使用、而不是带括号调用时会被过滤。
  • @CompileStatic、@Immutable 和 @Autowired 等 AST 转换注解和框架注解,它们永远不会被记录为调用。

图谱还会记录继承、实例化和读写。

智能体提示词示例

  • “谁调用了 deployToStaging,来自哪些流水线?”(先用 find_symbol,再用 dependency_search 的 incoming 方向)
  • “哪些类继承了 BaseIntegrationSpec?”(dependency_search)
  • “解释发布任务如何构建并发布制品。”(get_task_context)

已知限制

  • Groovy 的方法和自由函数共用同一种语法节点,因此 structural_search 中的 methods 预设什么也选不到。请改用 functions 预设或 find_symbol。
  • 与 GDK 或 DSL 方法同名的用户方法(如 collect 或 stage)可能会被一并过滤。如果某个调用方似乎缺失,请使用 text_pattern_search。

后续步骤

通过快速入门连接仓库,然后在兼容性页面查看支持矩阵。构建所编译的 JVM 代码请阅读 Java 指南和 Kotlin 指南。

最适合场景

  • > 用 Groovy 编写、共享构建逻辑分散在大量 `.gradle` 文件中的 Gradle 构建。
  • > 智能体在修改 CI 之前需要读懂的 Jenkins 流水线和共享库。
  • > 运行在 JVM 上的 Groovy 应用和 Spock 测试套件。

智能体工作流

  • > 在修改共享库步骤的参数之前,找到它的所有调用方。
  • > 追踪哪些构建脚本调用了公共 `.gradle` 文件中定义的辅助函数。
  • > 在重构之前,梳理哪些类继承了某个基类。

引擎细节

  • > Groovy 支持覆盖 `.groovy`、`.gradle` 和 `Jenkinsfile`。调用名会去掉闭包块和 `?.` 安全导航。
  • > 约 140 个标准库、Gradle 和 Spock 名称,以及约 260 个 GDK 方法,会从关系中过滤掉。
  • > 构建器 DSL 名称(包括 `stage` 和 `sh` 等 Jenkins 步骤)在构建器风格下会被过滤,注解永远不会被记录为调用。

常用 MCP 入口工具

  • find_symbol

    需要共享库步骤、构建辅助函数或类的定义和调用方时使用它。

  • dependency_search

    对构建辅助函数使用 incoming 方向遍历,查看哪些脚本和流水线调用了它。

  • text_pattern_search

    用于查找 DSL 调用和 GDK 方法,这些调用已从图谱中过滤掉。