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  }