Skip to content

[enhancement] cross-file-impact: resolve variable-receiver method calls via x/tools type info - conservative miss accepted by #2163 review (follow-up to #2100) #2164

Description

@topcheer

文件和行号

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;修复本身已合并且正确。)

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions