diff --git a/src/DrevOps/Sniffs/NamingConventions/AbstractVariableNamingSniff.php b/src/DrevOps/Sniffs/NamingConventions/AbstractVariableNamingSniff.php index a106086..ca82d6f 100644 --- a/src/DrevOps/Sniffs/NamingConventions/AbstractVariableNamingSniff.php +++ b/src/DrevOps/Sniffs/NamingConventions/AbstractVariableNamingSniff.php @@ -311,6 +311,10 @@ protected function isProperty(File $phpcsFile, int $stackPtr): bool { T_TYPE_INTERSECTION, T_ATTRIBUTE, T_ATTRIBUTE_END, + // PHP 8+ namespaced type tokens. + T_NAME_FULLY_QUALIFIED, + T_NAME_QUALIFIED, + T_NAME_RELATIVE, ], $stackPtr - 1, NULL, @@ -401,6 +405,10 @@ protected function isPromotedProperty(File $phpcs_file, int $stack_ptr): bool { T_TYPE_INTERSECTION, T_ATTRIBUTE, T_ATTRIBUTE_END, + // PHP 8+ namespaced type tokens. + T_NAME_FULLY_QUALIFIED, + T_NAME_QUALIFIED, + T_NAME_RELATIVE, ], $stack_ptr - 1, NULL, diff --git a/tests/Fixtures/VariableNaming.php b/tests/Fixtures/VariableNaming.php index 131d277..b95def6 100644 --- a/tests/Fixtures/VariableNaming.php +++ b/tests/Fixtures/VariableNaming.php @@ -14,6 +14,12 @@ class ClassWithMixedVariableNaming { public static $camelCaseStaticProperty; + protected ?string $nullableProperty = NULL; + + protected ?\DOMDocument $xmlDom = NULL; + + protected ?\DateTime $dateTime = NULL; + public function methodWithMixedLocalVariables(): void { $valid_snake_case_local = 'valid'; $another_valid_local = 123; @@ -65,6 +71,7 @@ class ClassWithPromotedProperties { public function __construct( public string $promotedPropertyOne, public string $promoted_property_two, + public ?\DOMDocument $promotedNullableProperty = NULL, ) { $localVar = 'invalid'; $valid_local = 'valid'; diff --git a/tests/Unit/AbstractVariableNamingSniffTest.php b/tests/Unit/AbstractVariableNamingSniffTest.php index 1b65f00..2c249df 100644 --- a/tests/Unit/AbstractVariableNamingSniffTest.php +++ b/tests/Unit/AbstractVariableNamingSniffTest.php @@ -261,6 +261,26 @@ public static function providerIsProperty(): array { 'bar', FALSE, ], + 'typed_property' => [ + ' [ + ' [ + ' [ + ' [ + ' [ + '