Merge pull request '[agent/codex:gpt-5.4-mini] Read ~/spec/code/core/go/i18n/RFC.md fully. Find features de...' (#178) from agent/read---spec-code-core-go-i18n-rfc-md-ful into dev
Some checks failed
Security Scan / security (push) Successful in 14s
Test / test (push) Has been cancelled

This commit is contained in:
Virgil 2026-04-02 09:07:21 +00:00
commit 29c1f24d8b
2 changed files with 68 additions and 12 deletions

View file

@ -122,18 +122,10 @@ func mergeSignalData(dst *SignalData, src SignalData) {
if dst == nil {
return
}
if len(src.NounDeterminers) > 0 {
dst.NounDeterminers = append(dst.NounDeterminers, src.NounDeterminers...)
}
if len(src.VerbAuxiliaries) > 0 {
dst.VerbAuxiliaries = append(dst.VerbAuxiliaries, src.VerbAuxiliaries...)
}
if len(src.VerbInfinitive) > 0 {
dst.VerbInfinitive = append(dst.VerbInfinitive, src.VerbInfinitive...)
}
if len(src.VerbNegation) > 0 {
dst.VerbNegation = append(dst.VerbNegation, src.VerbNegation...)
}
dst.NounDeterminers = appendUniqueStrings(dst.NounDeterminers, src.NounDeterminers...)
dst.VerbAuxiliaries = appendUniqueStrings(dst.VerbAuxiliaries, src.VerbAuxiliaries...)
dst.VerbInfinitive = appendUniqueStrings(dst.VerbInfinitive, src.VerbInfinitive...)
dst.VerbNegation = appendUniqueStrings(dst.VerbNegation, src.VerbNegation...)
if len(src.Priors) == 0 {
return
}
@ -148,6 +140,27 @@ func mergeSignalData(dst *SignalData, src SignalData) {
}
}
func appendUniqueStrings(dst []string, values ...string) []string {
if len(values) == 0 {
return dst
}
seen := make(map[string]struct{}, len(dst))
for _, value := range dst {
seen[value] = struct{}{}
}
for _, value := range values {
if value == "" {
continue
}
if _, ok := seen[value]; ok {
continue
}
seen[value] = struct{}{}
dst = append(dst, value)
}
return dst
}
func grammarDataHasContent(data *GrammarData) bool {
if data == nil {
return false

View file

@ -454,6 +454,49 @@ func TestMergeGrammarData(t *testing.T) {
}
}
func TestMergeGrammarData_DeduplicatesSignals(t *testing.T) {
const lang = "zy"
original := GetGrammarData(lang)
t.Cleanup(func() {
SetGrammarData(lang, original)
})
SetGrammarData(lang, &GrammarData{
Signals: SignalData{
NounDeterminers: []string{"the", "a"},
VerbAuxiliaries: []string{"will"},
VerbInfinitive: []string{"to"},
VerbNegation: []string{"not"},
},
})
MergeGrammarData(lang, &GrammarData{
Signals: SignalData{
NounDeterminers: []string{"a", "some"},
VerbAuxiliaries: []string{"will", "can"},
VerbInfinitive: []string{"to", "de"},
VerbNegation: []string{"not", "never"},
},
})
data := GetGrammarData(lang)
if data == nil {
t.Fatal("GetGrammarData returned nil")
}
if got, want := data.Signals.NounDeterminers, []string{"the", "a", "some"}; !slices.Equal(got, want) {
t.Fatalf("NounDeterminers = %v, want %v", got, want)
}
if got, want := data.Signals.VerbAuxiliaries, []string{"will", "can"}; !slices.Equal(got, want) {
t.Fatalf("VerbAuxiliaries = %v, want %v", got, want)
}
if got, want := data.Signals.VerbInfinitive, []string{"to", "de"}; !slices.Equal(got, want) {
t.Fatalf("VerbInfinitive = %v, want %v", got, want)
}
if got, want := data.Signals.VerbNegation, []string{"not", "never"}; !slices.Equal(got, want) {
t.Fatalf("VerbNegation = %v, want %v", got, want)
}
}
func TestGrammarDataLanguageTagNormalisation(t *testing.T) {
const rawLang = "tl_PH"
const canonicalLang = "tl-PH"