github.com/yoheimuta/protolint@v0.49.8-0.20240515023657-4ecaebb7575d/linter/strs/pluralize.go (about) 1 package strs 2 3 import ( 4 "github.com/gertd/go-pluralize" 5 ) 6 7 // PluralizeClient represents a client to support a pluralization. 8 type PluralizeClient struct { 9 client *pluralize.Client 10 } 11 12 // NewPluralizeClient creates a new client. 13 func NewPluralizeClient() *PluralizeClient { 14 c := &PluralizeClient{ 15 client: pluralize.NewClient(), 16 } 17 c.AddPluralRule("(?i)uri$", "uris") 18 c.AddSingularRule("(?i)uris$", "uri") 19 return c 20 } 21 22 // ToPlural converts the given string to its plural name. 23 func (c *PluralizeClient) ToPlural(s string) string { 24 return c.client.Plural(c.client.Singular(s)) 25 } 26 27 // AddPluralRule adds a pluralization rule to the collection. 28 func (c *PluralizeClient) AddPluralRule(rule string, replacement string) { 29 c.client.AddPluralRule(rule, replacement) 30 } 31 32 // AddSingularRule adds a singularization rule to the collection. 33 func (c *PluralizeClient) AddSingularRule(rule string, replacement string) { 34 c.client.AddSingularRule(rule, replacement) 35 } 36 37 // AddUncountableRule adds an uncountable word rule. 38 func (c *PluralizeClient) AddUncountableRule(word string) { 39 c.client.AddUncountableRule(word) 40 } 41 42 // AddIrregularRule adds an irregular word definition. 43 func (c *PluralizeClient) AddIrregularRule(single string, plural string) { 44 c.client.AddIrregularRule(single, plural) 45 }