已关闭
[Issue] BM004 告警未指明被计入复杂度的具体构造 #24
ywxt创建于  9月11日关闭于  9月23日
ywxt
9月11日 创建

问题概述

BM004(函数复杂度)告警只输出总复杂度值、阈值和差值,未指明具体哪些代码构造被计入了复杂度,导致开发者难以定位需要修改的分支/嵌套点。
首次出现版本:1.1.0

影响范围

项目 内容
分析对象 ☑ Cargo 软件包 □ 工作空间 □ 独立 .rs 文件
受影响的指标、规则或报告字段 BM004(cyclomatic complexity)
影响程度 ☑ 轻微
临时规避办法 人工核对函数源码,逐段统计 if/else、match、循环 等构造

复现步骤

请提供最小源码样例、bot-metric analyze 或 bot-metric check 命令、配置及完整执行顺序。

  1. 对一个复杂度超过阈值(默认 20)的函数执行 bot-metric check
  2. 观察输出的 BM004 告警内容

预期结果

告警信息在给出复杂度值的同时,列出被计入复杂度的具体构造及其贡献,例如:

= complexity breakdown:

  • if/else: 10
  • match arms: 6
  • for/while loops: 4

便于开发者直接定位需要拆分或提取的决策路径。

实际结果

告警仅给出总值与通用提示,未指明哪些构造被计入:
warningBM004: function encode_flush is too complex
--> /crates//src/deflate/mod.rs:380:12
|
380 | pub fn encode_flush(
| ^^^^^^^^^^^^
= reason: complexity 28 exceeds the limit of 20 by 8
= definition: cyclomatic complexity approximates independent control-flow paths
= help: reduce branching and nesting, or extract decision paths

分析环境与范围

项目 内容
BotMetric 版本或提交号 1.2.0
操作系统与架构 aarch64
软件包 / 目标 / 特性 / 范围参数 Cargo 软件包,deflate 模块
文件数 / 代码行数 25947
模块层级 / 重复窗口 /src/deflate/mod.rs

指标、发现与报告证据

附件与提交确认

likedislike
Yywxt
9月11日 修改了issue 的描述
WWangZijun成员
9月23日 关联了pull request:fix: explain BM004 complexity breakdown (issue#24)
WangZijun成员
9月23日 评论:

https://gitcode.com/xuanwu/bot-metric/pulls/20

结论:

  • 问题可以复现;BM004 原先仅输出总复杂度,未列出构成。
  • 问题已修复,BM004 evidence 现在包含控制流贡献明细。

具体修复:

  • 汇总函数内 if/else、match arms、loops、布尔条件等控制流贡献。
  • 在 BM004 evidence 中输出 breakdown,便于定位需要重构或提取的路径。
  • 新增端到端回归测试验证 JSON 输出。
likedislike
VVaynNecol成员
9月23日 将 VaynNecol 设为负责人
VVaynNecol成员
9月23日 关联了pull request:fix: explain BM004 complexity breakdown (issue#24)
VVaynNecol成员
9月23日 关闭了 issue
WWangZijun成员
9月24日 关联了pull request:v1.2.3 tool version update