From af8082d06ef2146e7e264f0a9a4180618700dc97 Mon Sep 17 00:00:00 2001 From: Grzegorz Korba Date: Fri, 25 Nov 2022 08:22:12 +0100 Subject: [PATCH] Improve ConfigLoader::PHP_CONST_REGEX --- packages/config-transformer/src/ConfigLoader.php | 6 +++--- .../YamlToPhp/Fixture/normal/class_constant.yaml | 9 +++++++++ 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/packages/config-transformer/src/ConfigLoader.php b/packages/config-transformer/src/ConfigLoader.php index 376fc2bf1d..6e650bb535 100644 --- a/packages/config-transformer/src/ConfigLoader.php +++ b/packages/config-transformer/src/ConfigLoader.php @@ -28,10 +28,10 @@ final class ConfigLoader { /** - * @see https://regex101.com/r/4Uanps/2 + * @see https://regex101.com/r/4Uanps/4 * @var string */ - private const PHP_CONST_REGEX = '#!php/const[:\s]\s*(.*)(\s*)#'; + private const PHP_CONST_REGEX = '#!php/const:?\s*([a-zA-Z0-9_\\\\]+(::[a-zA-Z0-9_]+)?)+(:\s*(.*))?#'; /** * @see https://regex101.com/r/spi4ir/1 @@ -68,7 +68,7 @@ public function createAndLoadContainerBuilderFromFileInfo( $content = Strings::replace( $content, self::PHP_CONST_REGEX, - static fn ($match): string => '"%const(' . str_replace('\\', '\\\\', $match[1]) . ')%"' . $match[2] + static fn ($match): string => '"%const(' . str_replace('\\', '\\\\', $match[1]) . ')%"' . ($match[3] ?? '') ); if ($content !== $smartFileInfo->getContents()) { $fileRealPath = sys_get_temp_dir() . '/__symplify_config_tranformer_clean_yaml/' . $smartFileInfo->getFilename(); diff --git a/packages/config-transformer/tests/Converter/ConfigFormatConverter/YamlToPhp/Fixture/normal/class_constant.yaml b/packages/config-transformer/tests/Converter/ConfigFormatConverter/YamlToPhp/Fixture/normal/class_constant.yaml index b9e77452de..c0d742c75f 100644 --- a/packages/config-transformer/tests/Converter/ConfigFormatConverter/YamlToPhp/Fixture/normal/class_constant.yaml +++ b/packages/config-transformer/tests/Converter/ConfigFormatConverter/YamlToPhp/Fixture/normal/class_constant.yaml @@ -1,6 +1,9 @@ parameters: class_constant: !php/const Symplify\ConfigTransformer\Tests\Converter\ConfigFormatConverter\YamlToPhp\YamlToPhpTest::TEST + class_constant_with_numbers: !php/const Symplify\ConfigTransformer\Tests\Converter\ConfigFormatConverter\YamlToPhp\YamlToPhpTest::TEST123 + class_constant_legacy_colon: !php/const:Symplify\ConfigTransformer\Tests\Converter\ConfigFormatConverter\YamlToPhp\YamlToPhpTest::TEST class: !php/const Symplify\ConfigTransformer\Tests\Converter\ConfigFormatConverter\YamlToPhp\YamlToPhpTest::class + class_legacy_colon: !php/const:Symplify\ConfigTransformer\Tests\Converter\ConfigFormatConverter\YamlToPhp\YamlToPhpTest::class unexisting_constant: !php/const SomeClass::Constant ----- set('class_constant', YamlToPhpTest::TEST); + $parameters->set('class_constant_with_numbers', YamlToPhpTest::TEST123); + + $parameters->set('class_constant_legacy_colon', YamlToPhpTest::TEST); + $parameters->set('class', YamlToPhpTest::class); + $parameters->set('class_legacy_colon', YamlToPhpTest::class); + $parameters->set('unexisting_constant', SomeClass::Constant); };