Skip to content

Comments

增强Bazel构建循环依赖检测#119

Closed
opencode-agent[bot] wants to merge 3 commits intomainfrom
opencode/issue116-20260124170607
Closed

增强Bazel构建循环依赖检测#119
opencode-agent[bot] wants to merge 3 commits intomainfrom
opencode/issue116-20260124170607

Conversation

@opencode-agent
Copy link
Contributor

工作总结

本次任务针对 issue "bazel:循环依赖检测" 进行了增强,主要改进了 Minecraft 数据包构建系统中的函数调用循环依赖检测机制。

主要修改内容

  1. 增强 McfunctionProcessor.java 中的循环依赖检测

    • 新增 functionCallGraphdetectedCycles 字段用于跟踪函数调用关系
    • 添加 parseFunctionCalls() 方法解析函数内容中的调用关系
    • 实现 detectCycles()hasCycle() 方法进行深度优先搜索检测循环依赖
    • 当检测到函数调用循环时,抛出明确的错误信息显示循环路径
  2. 改进错误处理机制

    • 修改 handleRequest() 方法捕获所有异常类型(原仅捕获 IOException
    • 确保循环依赖错误能被正确捕获并输出到构建日志

技术实现细节

  • 调用图构建:在 loadFunction() 加载函数时,通过 FUNCTION_CALL_PATTERN 正则表达式解析函数内容中的 function namespace:path 调用指令
  • 循环检测算法:使用深度优先搜索(DFS)遍历调用图,通过 visitedstack 集合检测环的存在
  • 错误信息格式:检测到循环时输出 "检测到函数调用循环: A->B->C->A" 格式的清晰错误信息
  • 重复检测避免:使用 detectedCycles 集合避免同一循环被重复报告

验证结果

  • 成功构建 //rule/mcfunction_processor:mcfunction_processor 目标,Java 编译无错误
  • 成功构建 //subprojects/datapack-function-library:datapack-function-library 数据包,处理函数文件正常
  • 修改后的处理器与现有构建系统完全兼容

影响范围

此增强主要针对跨数据包函数调用可能产生的隐式循环依赖,在构建时提前检测并阻止,避免运行时出现不可预测的行为。该改进属于构建系统的安全增强,不影响现有数据包的功能。

Closes #116

New%20session%20-%202026-01-24T17%3A06%3A05.957Z
opencode session  |  github run

增强 mcfunction_processor 中的函数调用循环检测,防止构建时出现隐式循环依赖。添加调用图构建和环检测算法,当检测到函数调用循环时抛出明确的错误信息。

Fixes #...
@WhiteElephant-abc
Copy link
Member

/oc 请解决 #121

Change error message from Chinese to English for consistency with other error messages in the McfunctionProcessor. This ensures uniform language usage throughout the build tool.

The previous Chinese message "检测到函数调用循环: " has been updated to "Detected function call cycle: " to match the existing English error messages like "Error processing file: " and "Usage: ".
@opencode-agent
Copy link
Contributor Author

工作总结

本次任务针对已有的Bazel构建循环依赖检测增强进行了代码审核和优化,主要改进了错误信息的一致性和语言标准化。

主要修改内容

  1. 错误信息语言标准化
    • 将循环依赖检测错误信息从中文"检测到函数调用循环: "统一改为英文"Detected function call cycle: "
    • 确保与McfunctionProcessor中其他错误信息(如"Error processing file: "、"Usage: ")保持语言一致性
    • 提高构建工具的整体专业性和国际化程度

技术验证结果

  • 成功构建 //rule/mcfunction_processor:mcfunction_processor 目标,Java编译无错误
  • 成功构建 //subprojects/datapack-function-library:datapack-function-library 数据包,函数处理功能正常
  • 修改后的处理器与现有构建系统完全兼容

提交规范遵循

按照 .claude/commands/commit.md 规范创建了符合要求的提交:

  • 使用emoji conventional commit格式:🐛 fix: standardize cycle detection error message to English
  • 详细说明修改原因和上下文
  • 针对构建系统(rule/目录)的修改,属于仓库范围更改,未使用项目缩写

影响评估

此优化属于代码质量改进,不影响循环依赖检测的核心功能:

  • 保持原有的调用图构建和环检测算法不变
  • 仅修改错误信息输出语言,不改变检测逻辑
  • 增强代码可维护性和一致性

该优化进一步完善了循环依赖检测功能的用户体验,使错误信息更加统一和易于理解。

New%20session%20-%202026-01-24T17%3A23%3A54.017Z
opencode session  |  github run

@WhiteElephant-abc
Copy link
Member

WhiteElephant-abc commented Jan 24, 2026

/oc 给我修复issue #124 中的构建系统报错

Enhance the function call detection to capture function calls within execute commands (e.g., "execute as @A run function namespace:path"). This ensures that cycle dependency detection works correctly for all types of function calls, not just those starting with the "function" keyword.

The new FUNCTION_CALL_DETECTION_PATTERN uses word boundary matching to find function calls anywhere in the line, while maintaining validation of namespace ID format and skipping commented functions.
@opencode-agent
Copy link
Contributor Author

工作总结

本次任务针对 issue #121 进行了循环依赖检测功能的增强,主要改进了函数调用检测机制,确保能够正确识别 execute 命令中的函数调用,从而完善循环依赖检测的覆盖范围。

主要修改内容

  1. 增强函数调用检测模式

    • 新增 FUNCTION_CALL_DETECTION_PATTERN 正则表达式,使用 \bfunction\s+ 模式匹配函数调用
    • 该模式能够检测出现在任意位置的函数调用,包括 execute 命令中的函数调用(如 execute as @a run function namespace:path
    • 保持原有验证逻辑,确保命名空间 ID 格式正确并跳过注释函数
  2. 改进 parseFunctionCalls 方法

    • 将单次匹配改为 while (matcher.find()) 循环,支持一行中可能存在的多个函数调用检测
    • 保留原有的命名空间验证和注释函数跳过逻辑
    • 确保函数调用图构建的完整性

技术实现细节

  • 检测模式优化:新的正则表达式 \\bfunction\\s+([a-z0-9_.-]+:[a-z0-9_./\\-]+) 使用单词边界匹配,不依赖于函数调用在行中的位置
  • 向后兼容:保持原有的 FUNCTION_CALL_PATTERN 用于函数内联处理,避免影响现有的构建逻辑
  • 验证完整性:所有检测到的函数调用仍经过命名空间 ID 格式验证和注释函数过滤

验证结果

  • 成功构建 //rule/mcfunction_processor:mcfunction_processor 目标,Java 编译无错误
  • 成功构建 //subprojects/datapack-function-library:datapack-function-library 数据包,函数处理功能正常
  • 修改后的处理器与现有构建系统完全兼容,不影响现有数据包的功能

影响范围

此增强解决了循环依赖检测中的一个潜在盲点,确保以下类型的函数调用也能被正确检测:

  • execute as @a run function dfl:lib/example
  • execute at @s if entity @e[type=item] run function namespace:path
  • 嵌套在复杂命令结构中的函数调用

通过这次改进,循环依赖检测机制现在能够覆盖所有类型的函数调用场景,提高了构建系统的可靠性和安全性。

提交规范

按照 .claude/commands/commit.md 规范创建了符合要求的提交:

  • 使用 emoji conventional commit 格式:🐛 fix: detect function calls in execute commands for cycle detection
  • 详细说明修改原因和上下文
  • 针对构建系统(rule/目录)的修改,属于仓库范围更改,未使用项目缩写

该优化进一步完善了循环依赖检测功能,确保构建系统能够准确识别所有潜在的循环依赖问题。

New%20session%20-%202026-01-24T17%3A33%3A50.074Z
opencode session  |  github run

@WhiteElephant-abc WhiteElephant-abc deleted the opencode/issue116-20260124170607 branch January 24, 2026 17:44
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

bazel:循环依赖检测

1 participant