feat: teach lint-locale-usage about ObjectVerification.Reason (#10755)

Add special parsing to handle the keys found in the `Reason` field of `ObjectVerification` structs.

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/10755
Reviewed-by: Gusted <gusted@noreply.codeberg.org>
Co-authored-by: Έλλεν Εμίλια Άννα Zscheile <fogti+devel@ytrizja.de>
Co-committed-by: Έλλεν Εμίλια Άννα Zscheile <fogti+devel@ytrizja.de>
This commit is contained in:
Έλλεν Εμίλια Άννα Zscheile 2026-01-11 09:40:49 +01:00 committed by Gusted
parent fdb1d9d762
commit 4fd275116d
3 changed files with 36 additions and 7 deletions

View file

@ -6,13 +6,6 @@ translation_meta.test
# this also gets instantiated as a Messenger once
repo.migrate.migrating_failed.error
# models/asymkey/gpg_key_object_verification.go: $ObjectVerification.Reason
# unfortunately, it is non-trivial to parse all the occurences
gpg.error.extract_sign
gpg.error.failed_retrieval_gpg_keys
gpg.error.generate_hash
gpg.error.no_committer_account
# models/system/notice.go: func (n *Notice) TrStr() string
admin.notices.type_1
admin.notices.type_2

View file

@ -15,6 +15,7 @@ import (
"strings"
llu "forgejo.org/build/lint-locale-usage"
lluAsymKey "forgejo.org/models/asymkey/lint-locale-usage"
lluUnit "forgejo.org/models/unit/lint-locale-usage"
lluMigrate "forgejo.org/services/migrations/lint-locale-usage"
)
@ -71,6 +72,8 @@ func HandleGoFile(handler llu.Handler, fname string, src any) error {
case *ast.CompositeLit:
if strings.HasSuffix(fname, "models/unit/unit.go") {
lluUnit.HandleCompositeUnit(handler, fset, n2)
} else if strings.Contains(fname, "models/asymkey/") {
lluAsymKey.HandleCompositeErrorReason(handler, fset, n2)
}
case *ast.FuncDecl:

View file

@ -0,0 +1,33 @@
// Copyright 2026 The Forgejo Authors. All rights reserved.
// SPDX-License-Identifier: MIT
package lintLocaleUsage
import (
"go/ast"
"go/token"
llu "forgejo.org/build/lint-locale-usage"
)
// special case: models/asymkey/*.go,
//
// handle &ObjectVerification{...}
func HandleCompositeErrorReason(handler llu.Handler, fset *token.FileSet, n *ast.CompositeLit) {
ident, ok := n.Type.(*ast.Ident)
if !ok || ident.Name != "ObjectVerification" {
return
}
// fields are normally named
for _, i := range n.Elts {
if kve, ok := i.(*ast.KeyValueExpr); ok {
ident, ok = kve.Key.(*ast.Ident)
if ok && ident.Name == "Reason" {
handler.HandleGoTrArgument(fset, kve.Value, "")
}
} else {
handler.OnWarning(fset, i.Pos(), "unable to parse ObjectVerification field assignment")
}
}
}