schema-generator icon indicating copy to clipboard operation
schema-generator copied to clipboard

ambiguous EnglishInflector result may gives not expected adder/ remover method names

Open PawelSuwinski opened this issue 3 years ago • 1 comments

Description
Singularized form of adder/remover method name for collections is hardcoded to the first item from the list returned by EnglishInflector:
https://github.com/api-platform/schema-generator/blob/ed297c7e7c7670c23102176b22667efcaab8dcac/src/Model/Class_.php#L335

If transformation is ambiguous inflector return list of proposition, and in some cases first one it not we want to, for example:

$ php -r 'require "vendor/autoload.php"; echo (new Symfony\Component\String\Inflector\EnglishInflector())->singularize("languages")[0].PHP_EOL;'
languag

How to reproduce

types:
  Book:
    properties:
      languages:
        cardinality: "(1..*)"
        range: Language

gives:

class Book
(...)
   function addLanguag(Language $languag)
   (...)

Possible Solution

  • ability to use alternate inflector class (in.e., decoration of EnglishInflector)
  • give singular form of given property in explicit by additional config paramater

PawelSuwinski avatar Sep 05 '22 11:09 PawelSuwinski

The generator is using an interface: https://github.com/api-platform/schema-generator/blob/ed297c7e7c7670c23102176b22667efcaab8dcac/src/TypesGenerator.php#L87 You can already use an alternate inflector.

However having an additional config parameter could be a good idea.

alanpoulain avatar Sep 05 '22 11:09 alanpoulain