文件和行号
internal/agent/cross_file_impact.go referencesAnyImpactSymbol(PR #2163 重构后 visitor)
问题描述
#2100 修复(PR #2163)采用 go/parser 单文件级 AST 做范围甄别,变量 receiver 的真引用成为保守漏报:删除 (*Server).run 后,兄弟文件中 s.run()(变量 receiver 调用)不会触发 cross-file-impact 通告——探针表只将 Server.run 方法表达式形态(Type.method / (*T).method)计为真阳性,因为无类型信息时无法判定变量 s 的静态类型。
为什么当前可接受(PR #2163 复核裁定摘录)
- 失败模式不对称:该通告是「这些文件可能编译失败」的启发式提示。漏报的兜底是编译器本身(工作流中 go build/test 是 ground truth);误报(修复前的 6 类误报面)则直接把 agent 引向无关文件——严格更差。
- 净变化:修复前 6 类误报 + 1 类真阳性命中;修复后 0 误报 + 1 类真阳性命中(方法表达式)。
建议方案(后续增强)
升级为 golang.org/x/tools/go/packages 类型信息:packages.Load 目标包后用 types.Info.Selections[selectorExpr].Obj() 精确解析 receiver 类型与方法归属,覆盖变量 receiver 形态。代价是引入包加载开销与依赖——对当前启发式定位属重武器,故独立立案而非阻塞 #2163。
优先级:low(编译器兜底,纯通告质量增强)。
(来源:PR #2163 复核轮方向性权衡判定,reviewer;修复本身已合并且正确。)
文件和行号
internal/agent/cross_file_impact.goreferencesAnyImpactSymbol(PR #2163 重构后 visitor)问题描述
#2100 修复(PR #2163)采用 go/parser 单文件级 AST 做范围甄别,变量 receiver 的真引用成为保守漏报:删除
(*Server).run后,兄弟文件中s.run()(变量 receiver 调用)不会触发 cross-file-impact 通告——探针表只将Server.run方法表达式形态(Type.method / (*T).method)计为真阳性,因为无类型信息时无法判定变量s的静态类型。为什么当前可接受(PR #2163 复核裁定摘录)
建议方案(后续增强)
升级为
golang.org/x/tools/go/packages类型信息:packages.Load目标包后用types.Info.Selections[selectorExpr].Obj()精确解析 receiver 类型与方法归属,覆盖变量 receiver 形态。代价是引入包加载开销与依赖——对当前启发式定位属重武器,故独立立案而非阻塞 #2163。优先级:low(编译器兜底,纯通告质量增强)。
(来源:PR #2163 复核轮方向性权衡判定,reviewer;修复本身已合并且正确。)