Update Go and vendor dependencies

This commit is contained in:
dwrz
2026-10-09 15:30:45 +00:00
parent c1a64be31c
commit 550f257760
296 changed files with 308687 additions and 8460 deletions
+58 -24
View File
@@ -99,50 +99,33 @@ func run(pass *analysis.Pass) (any, error) {
case knowledge.DeprecatedNeverUse:
report.Report(pass, node,
fmt.Sprintf("%s has been deprecated since %s because it shouldn't be used: %s",
report.Render(pass, node), formatGoVersion(std.DeprecatedSince), depr.Msg))
deprecatedObjName, formatGoVersion(std.DeprecatedSince), depr.Msg))
case std.DeprecatedSince, knowledge.DeprecatedUseNoLonger:
report.Report(pass, node,
fmt.Sprintf("%s has been deprecated since %s: %s",
report.Render(pass, node), formatGoVersion(std.DeprecatedSince), depr.Msg))
deprecatedObjName, formatGoVersion(std.DeprecatedSince), depr.Msg))
default:
report.Report(pass, node,
fmt.Sprintf("%s has been deprecated since %s and an alternative has been available since %s: %s",
report.Render(pass, node), formatGoVersion(std.DeprecatedSince), formatGoVersion(std.AlternativeAvailableSince), depr.Msg))
deprecatedObjName, formatGoVersion(std.DeprecatedSince), formatGoVersion(std.AlternativeAvailableSince), depr.Msg))
}
} else {
report.Report(pass, node, fmt.Sprintf("%s is deprecated: %s", report.Render(pass, node), depr.Msg))
report.Report(pass, node, fmt.Sprintf("%s is deprecated: %s", deprecatedObjName, depr.Msg))
}
}
var tfn types.Object
stack := 0
fn := func(node ast.Node, push bool) bool {
if !push {
stack--
return false
}
stack++
if stack == 1 {
tfn = nil
}
if fn, ok := node.(*ast.FuncDecl); ok {
tfn = pass.TypesInfo.ObjectOf(fn.Name)
}
// FIXME(dh): this misses dot-imported objects
sel, ok := node.(*ast.SelectorExpr)
if !ok {
return true
}
checkIdentObj := func(sel *ast.SelectorExpr) bool {
obj := pass.TypesInfo.ObjectOf(sel.Sel)
if obj_, ok := obj.(*types.Func); ok {
obj = obj_.Origin()
}
if obj.Pkg() == nil {
return true
}
if obj.Pkg() == pass.Pkg {
// A package is allowed to use its own deprecated objects
return true
@@ -165,8 +148,59 @@ func run(pass *analysis.Pass) (any, error) {
return true
}
node := ast.Node(sel)
if pass.TypesInfo.Types[sel.X].IsType() {
node = sel.Sel
}
if depr, ok := deprs.Objects[obj]; ok {
handleDeprecation(depr, sel, code.SelectorName(pass, sel), obj.Pkg().Path(), tfn)
handleDeprecation(depr, node, code.SelectorName(pass, sel), obj.Pkg().Path(), tfn)
}
return true
}
fn := func(node ast.Node, push bool) bool {
if !push {
stack--
return false
}
stack++
if stack == 1 {
tfn = nil
}
if fn, ok := node.(*ast.FuncDecl); ok {
tfn = pass.TypesInfo.ObjectOf(fn.Name)
}
switch v := node.(type) {
// FIXME(dh): this misses dot-imported objects
case *ast.SelectorExpr:
return checkIdentObj(v)
case *ast.CompositeLit:
litType := pass.TypesInfo.Types[v.Type]
if !litType.IsType() {
// This is probably unreachable.
return true
}
if _, ok := litType.Type.Underlying().(*types.Struct); !ok {
// We don't want to look at expressions in map initializers, for
// example.
return true
}
for _, elt := range v.Elts {
kv, ok := elt.(*ast.KeyValueExpr)
if !ok {
return true
}
key, ok := kv.Key.(*ast.Ident)
if !ok {
// This is probably unreachable, since we're looking at keys
// in a struct initializer.
return true
}
sel := &ast.SelectorExpr{X: v.Type, Sel: key}
checkIdentObj(sel)
}
}
return true
}