diff --git a/src/Rules/English/Inflectible.php b/src/Rules/English/Inflectible.php index eb5c7e0a..6750a668 100644 --- a/src/Rules/English/Inflectible.php +++ b/src/Rules/English/Inflectible.php @@ -37,11 +37,9 @@ public static function getSingular(): iterable yield new Transformation(new Pattern('(s)eries$'), '\1\2eries'); yield new Transformation(new Pattern('([^aeiouy]|qu)ies$'), '\1y'); yield new Transformation(new Pattern('([lr])ves$'), '\1f'); - yield new Transformation(new Pattern('(tive)s$'), '\1'); - yield new Transformation(new Pattern('(hive)s$'), '\1'); - yield new Transformation(new Pattern('(drive)s$'), '\1'); - yield new Transformation(new Pattern('(dive)s$'), '\1'); - yield new Transformation(new Pattern('(olive)s$'), '\1'); + yield new Transformation(new Pattern('(kni|wi)ves$'), '\1fe'); + yield new Transformation(new Pattern('(^|[^aeiou])lives$'), '\1life'); + yield new Transformation(new Pattern('(ive)s$'), '\1'); yield new Transformation(new Pattern('([^fo])ves$'), '\1fe'); yield new Transformation(new Pattern('(^analy)ses$'), '\1sis'); yield new Transformation(new Pattern('(analy|diagno|^ba|(p)arenthe|(p)rogno|(s)ynop|(t)he)ses$'), '\1\2sis'); diff --git a/tests/Rules/English/EnglishFunctionalTest.php b/tests/Rules/English/EnglishFunctionalTest.php index 29163f60..a18a809f 100644 --- a/tests/Rules/English/EnglishFunctionalTest.php +++ b/tests/Rules/English/EnglishFunctionalTest.php @@ -23,6 +23,7 @@ public static function dataSampleWords(): array ['abuse', 'abuses'], ['acceptancecriterion', 'acceptancecriteria'], ['address', 'addresses'], + ['adhesive', 'adhesives'], ['advice', 'advice'], ['agency', 'agencies'], ['aircraft', 'aircraft'], @@ -125,6 +126,7 @@ public static function dataSampleWords(): array ['equipment', 'equipment'], ['evidence', 'evidence'], ['experience', 'experiences'], + ['explosive', 'explosives'], ['family', 'families'], ['faroese', 'faroese'], ['fax', 'faxes'], @@ -176,6 +178,7 @@ public static function dataSampleWords(): array ['innings', 'innings'], ['iris', 'irises'], ['jackanapes', 'jackanapes'], + ['jackknife', 'jackknives'], ['jeans', 'jeans'], ['jedi', 'jedi'], ['kin', 'kin'], @@ -209,6 +212,7 @@ public static function dataSampleWords(): array ['metadata', 'metadata'], ['mews', 'mews'], ['middleware', 'middleware'], + ['midwife', 'midwives'], ['money', 'money'], ['moose', 'moose'], ['motto', 'mottoes'], @@ -270,6 +274,7 @@ public static function dataSampleWords(): array ['radius', 'radii'], ['rain', 'rain'], ['reflex', 'reflexes'], + ['reflexive', 'reflexives'], ['regatta', 'regattas'], ['research', 'research'], ['rhinoceros', 'rhinoceros'],