forgejo/services/migrations/lint-locale-usage/llu.go
Ellen Εμιλία Άννα Zscheile 5687a8ef65 feat(build): add support for the base.Messenger, $.locale.Tr, Form structs to lint-locale-usage (#9095)
- Move a file around to avoid a circular dependency.
- Make lint-locale-usage aware of `base.Messenger`, form struct tags and `$.locale.Tr`.

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/9095
Reviewed-by: Gusted <gusted@noreply.codeberg.org>
Co-authored-by: Ellen Εμιλία Άννα Zscheile <fogti+devel@ytrizja.de>
Co-committed-by: Ellen Εμιλία Άννα Zscheile <fogti+devel@ytrizja.de>
2025-09-30 03:25:45 +02:00

45 lines
1.2 KiB
Go

// Copyright 2025 The Forgejo Authors. All rights reserved.
// SPDX-License-Identifier: MIT
package lintLocaleUsage
import (
"go/ast"
"go/token"
llu "forgejo.org/build/lint-locale-usage"
"forgejo.org/modules/container"
)
// special case: services/migrations/migrate.go
func HandleMessengerInFunc(handler llu.Handler, fset *token.FileSet, n2 *ast.FuncDecl) {
messenger := make(container.Set[string])
for _, i := range n2.Type.Params.List {
if ret, ok := i.Type.(*ast.SelectorExpr); ok && ret.Sel.Name == "Messenger" {
if ret, ok := ret.X.(*ast.Ident); ok && ret.Name == "base" {
for _, j := range i.Names {
messenger.Add(j.Name)
}
}
}
}
if len(messenger) == 0 {
return
}
ast.Inspect(n2.Body, func(n ast.Node) bool {
// search for "messenger" function calls
call, ok := n.(*ast.CallExpr)
if !ok {
return true
}
if ret, ok := call.Fun.(*ast.Ident); !(ok && messenger.Contains(ret.Name)) {
return true
}
if len(call.Args) != 1 {
handler.OnWarning(fset, call.Lparen, "unexpected invocation of base.Messenger (expected exactly 1 argument)")
return true
}
handler.HandleGoTrArgument(fset, call.Args[0], "")
return true
})
}