Skip to content

Commit f8910bc

Browse files
feat: disable KeyNamingConventionValidator by default (#158)
1 parent 2ec30b1 commit f8910bc

7 files changed

Lines changed: 44 additions & 12 deletions

File tree

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
77

88
## [Unreleased]
99

10+
- feat[!!!]: skip KeyNamingConventionValidator by default (opt-in to reduce false positives)
1011
- feat: provide a standalone PHAR distribution for CI and non-Composer projects
1112

1213
## [1.5.0] - 2026-06-29

docs/configuration/index.md

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -59,15 +59,18 @@ When the same option is specified in multiple places, this priority applies:
5959
2. **Configuration file**
6060
3. **Default values** (lowest priority)
6161

62-
## DuplicateValuesValidator
62+
## Opt-In Validators
6363

6464
::: info
65-
The `DuplicateValuesValidator` is disabled by default to reduce noise in validation results, as duplicate values are often intentional (e.g., common button labels like "OK" or "Cancel").
65+
The `DuplicateValuesValidator` and the `KeyNamingConventionValidator` are disabled by default to reduce noise in validation results:
66+
67+
- **DuplicateValuesValidator** — duplicate values are often intentional (e.g., common button labels like "OK" or "Cancel").
68+
- **KeyNamingConventionValidator** — auto-detected naming conventions frequently produce false positives on mixed but intentional key styles.
6669
:::
6770

68-
To enable it, either:
71+
To enable one of them, either:
6972
- Use `--only` to explicitly include it
70-
- Set `skip: []` in your configuration file
73+
- Set `skip: []` in your configuration file (enables all validators)
7174

7275
## Next Steps
7376

docs/reference/validators.md

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -437,10 +437,29 @@ Enforces consistent naming patterns for translation keys.
437437

438438
**Result:** WARNING
439439

440+
::: info Opt-In Validator
441+
This validator is disabled by default, as auto-detected naming conventions often produce false positives on mixed but intentional key styles. Enable it when you want to enforce a convention.
442+
:::
443+
440444
::: tip
441445
This validator auto-detects the most common pattern in your files. Configure a specific convention for strict enforcement.
442446
:::
443447

448+
### Enable via CLI
449+
450+
```bash
451+
composer validate-translations translations/ \
452+
--only "MoveElevator\\ComposerTranslationValidator\\Validator\\KeyNamingConventionValidator"
453+
```
454+
455+
### Enable via Configuration
456+
457+
```yaml
458+
paths:
459+
- translations/
460+
skip: [] # Empty skip list enables all validators
461+
```
462+
444463
### Supported Conventions
445464
446465
| Convention | Example |

src/Command/TranslationValidationBehavior.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ protected function configure(): void
133133
• <info>EmptyValuesValidator</info> - Finds empty or whitespace-only translation values
134134
• <info>EncodingValidator</info> - Validates file encoding and character issues
135135
• <info>HtmlTagValidator</info> - Validates HTML tag consistency across translations
136-
• <info>KeyNamingConventionValidator</info> - Validates translation key naming conventions
136+
• <info>KeyNamingConventionValidator</info> - Validates translation key naming conventions (opt-in, disabled by default)
137137
• <info>KeyCountValidator</info> - Warns when a file exceeds the key count threshold
138138
• <info>KeyDepthValidator</info> - Warns when keys exceed the nesting depth threshold
139139
• <info>PlaceholderConsistencyValidator</info> - Validates placeholder consistency across files

src/Config/TranslationValidatorConfig.php

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313

1414
namespace MoveElevator\ComposerTranslationValidator\Config;
1515

16-
use MoveElevator\ComposerTranslationValidator\Validator\DuplicateValuesValidator;
16+
use MoveElevator\ComposerTranslationValidator\Validator\{DuplicateValuesValidator, KeyNamingConventionValidator};
1717

1818
/**
1919
* TranslationValidatorConfig.
@@ -38,9 +38,15 @@ class TranslationValidatorConfig
3838
/** @var string[] */
3939
private array $only = [];
4040

41-
/** @var string[] */
41+
/**
42+
* Validators disabled by default (opt-in). They produce too many
43+
* intentional/false-positive findings to run unconditionally.
44+
*
45+
* @var string[]
46+
*/
4247
private array $skip = [
4348
DuplicateValuesValidator::class,
49+
KeyNamingConventionValidator::class,
4450
];
4551

4652
/** @var string[] */

tests/src/Config/ConfigFactoryTest.php

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,10 @@ public function testCreateFromArrayWithEmptyData(): void
7373
$this->assertSame([], $config->getFileDetectors());
7474
$this->assertSame([], $config->getParsers());
7575
$this->assertSame([], $config->getOnly());
76-
$this->assertSame([\MoveElevator\ComposerTranslationValidator\Validator\DuplicateValuesValidator::class], $config->getSkip());
76+
$this->assertSame([
77+
\MoveElevator\ComposerTranslationValidator\Validator\DuplicateValuesValidator::class,
78+
\MoveElevator\ComposerTranslationValidator\Validator\KeyNamingConventionValidator::class,
79+
], $config->getSkip());
7780
$this->assertSame([], $config->getExclude());
7881
$this->assertFalse($config->getStrict());
7982
$this->assertFalse($config->getDryRun());

tests/src/Config/TranslationValidatorConfigTest.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
namespace MoveElevator\ComposerTranslationValidator\Tests\Config;
1515

1616
use MoveElevator\ComposerTranslationValidator\Config\TranslationValidatorConfig;
17-
use MoveElevator\ComposerTranslationValidator\Validator\DuplicateValuesValidator;
17+
use MoveElevator\ComposerTranslationValidator\Validator\{DuplicateValuesValidator, KeyNamingConventionValidator};
1818
use PHPUnit\Framework\Attributes\{CoversClass, DataProvider};
1919
use PHPUnit\Framework\TestCase;
2020

@@ -84,7 +84,7 @@ public static function adderProvider(): iterable
8484
yield 'addFileDetector' => ['addFileDetector', 'getFileDetectors', 'SomeFileDetector', ['SomeFileDetector']];
8585
yield 'addParser' => ['addParser', 'getParsers', 'SomeParser', ['SomeParser']];
8686
yield 'only' => ['only', 'getOnly', 'OnlyValidator', ['OnlyValidator']];
87-
yield 'skip' => ['skip', 'getSkip', 'SkipValidator', [DuplicateValuesValidator::class, 'SkipValidator']];
87+
yield 'skip' => ['skip', 'getSkip', 'SkipValidator', [DuplicateValuesValidator::class, KeyNamingConventionValidator::class, 'SkipValidator']];
8888
}
8989

9090
public function testDefaultValues(): void
@@ -94,7 +94,7 @@ public function testDefaultValues(): void
9494
$this->assertSame([], $this->config->getFileDetectors());
9595
$this->assertSame([], $this->config->getParsers());
9696
$this->assertSame([], $this->config->getOnly());
97-
$this->assertSame([DuplicateValuesValidator::class], $this->config->getSkip());
97+
$this->assertSame([DuplicateValuesValidator::class, KeyNamingConventionValidator::class], $this->config->getSkip());
9898
$this->assertSame([], $this->config->getExclude());
9999
$this->assertFalse($this->config->getStrict());
100100
$this->assertFalse($this->config->getDryRun());
@@ -152,7 +152,7 @@ public static function toArrayProvider(): iterable
152152
'file-detectors' => [],
153153
'parsers' => [],
154154
'only' => [],
155-
'skip' => [DuplicateValuesValidator::class],
155+
'skip' => [DuplicateValuesValidator::class, KeyNamingConventionValidator::class],
156156
'exclude' => [],
157157
'strict' => false,
158158
'dry-run' => false,

0 commit comments

Comments
 (0)