From a35c40602463573b9238367bedfc61449ef0fde1 Mon Sep 17 00:00:00 2001 From: Virgil Date: Wed, 1 Apr 2026 23:12:33 +0000 Subject: [PATCH] feat(grammar): preserve word map entries in article phrases Co-Authored-By: Virgil --- grammar.go | 2 ++ grammar_test.go | 30 ++++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/grammar.go b/grammar.go index 6a981a2..2c5ff62 100644 --- a/grammar.go +++ b/grammar.go @@ -662,6 +662,8 @@ func ArticlePhrase(word string) string { if article == "" || word == "" { return "" } + lang := currentLangForGrammar() + word = renderWord(lang, word) if strings.HasSuffix(article, "'") { return article + word } diff --git a/grammar_test.go b/grammar_test.go index a512d20..8db4a2a 100644 --- a/grammar_test.go +++ b/grammar_test.go @@ -491,6 +491,36 @@ func TestArticlePhrase(t *testing.T) { } } +func TestArticlePhrase_RespectsWordMap(t *testing.T) { + prev := Default() + svc, err := New() + if err != nil { + t.Fatalf("New() failed: %v", err) + } + SetDefault(svc) + t.Cleanup(func() { + SetDefault(prev) + }) + + data := GetGrammarData("en") + if data == nil { + t.Fatal("GetGrammarData(\"en\") returned nil") + } + original, existed := data.Words["go_mod"] + data.Words["go_mod"] = "go.mod" + t.Cleanup(func() { + if existed { + data.Words["go_mod"] = original + return + } + delete(data.Words, "go_mod") + }) + + if got, want := ArticlePhrase("go_mod"), "a go.mod"; got != want { + t.Fatalf("ArticlePhrase(%q) = %q, want %q", "go_mod", got, want) + } +} + func TestArticlePhraseFrenchLocale(t *testing.T) { prev := Default() svc, err := New() -- 2.45.3