diff --git a/coder_sniffer/Drupal/Sniffs/Classes/FullyQualifiedNamespaceSniff.php b/coder_sniffer/Drupal/Sniffs/Classes/FullyQualifiedNamespaceSniff.php index ee6e564f169a17b1c6fc7cb5860f42ef4eaa48b0..eac0e35ae3bd1cd7908a40df0ab4f1ffcf8b77d3 100644 --- a/coder_sniffer/Drupal/Sniffs/Classes/FullyQualifiedNamespaceSniff.php +++ b/coder_sniffer/Drupal/Sniffs/Classes/FullyQualifiedNamespaceSniff.php @@ -65,6 +65,11 @@ class FullyQualifiedNamespaceSniff implements Sniff return; } + // Skip names in PHP attributes, no standards defined yet. + if (isset($tokens[$stackPtr]['attribute_closer']) === true) { + return $tokens[$stackPtr]['attribute_closer']; + } + // Check if this is a use statement and ignore those. $before = $phpcsFile->findPrevious([T_STRING, T_NS_SEPARATOR, T_WHITESPACE, T_COMMA, T_AS], $stackPtr, null, true); if ($tokens[$before]['code'] === T_USE || $tokens[$before]['code'] === T_NAMESPACE) { diff --git a/tests/Drupal/Classes/FullyQualifiedNamespaceUnitTest.4.inc b/tests/Drupal/Classes/FullyQualifiedNamespaceUnitTest.4.inc index 1badbe14135fe07d7bd3d58de76b3defb0a0f36b..5b79ae8f05ecdde25157865e11f3f8e37b1bede6 100644 --- a/tests/Drupal/Classes/FullyQualifiedNamespaceUnitTest.4.inc +++ b/tests/Drupal/Classes/FullyQualifiedNamespaceUnitTest.4.inc @@ -8,7 +8,7 @@ use Drupal\Core\Access\AccessResult; use Drupal\Core\Session\AccountInterface; /** - * Test action which is always usable. + * Fully qualified names are allowed, there is no standard yet. */ #[\Drupal\action_link\Attribute\StateAction( id: 'test_always', diff --git a/tests/Drupal/Classes/FullyQualifiedNamespaceUnitTest.4.inc.fixed b/tests/Drupal/Classes/FullyQualifiedNamespaceUnitTest.4.inc.fixed index 07dd59e18f4bfb763974df30e702abdcac3704e1..5b79ae8f05ecdde25157865e11f3f8e37b1bede6 100644 --- a/tests/Drupal/Classes/FullyQualifiedNamespaceUnitTest.4.inc.fixed +++ b/tests/Drupal/Classes/FullyQualifiedNamespaceUnitTest.4.inc.fixed @@ -2,17 +2,18 @@ namespace Drupal\action_link_test_plugins\Plugin\StateAction; -use Drupal\Core\StringTranslation\TranslatableMarkup; -use Drupal\action_link\Attribute\StateAction; +use Drupal\action_link\Entity\ActionLinkInterface; use Drupal\action_link\Plugin\StateAction\StateActionBase; +use Drupal\Core\Access\AccessResult; +use Drupal\Core\Session\AccountInterface; /** - * Test action which is always usable. + * Fully qualified names are allowed, there is no standard yet. */ -#[StateAction( +#[\Drupal\action_link\Attribute\StateAction( id: 'test_always', - label: new TranslatableMarkup('Test Always'), - description: new TranslatableMarkup('Test Always'), + label: new \Drupal\Core\StringTranslation\TranslatableMarkup('Test Always'), + description: new \Drupal\Core\StringTranslation\TranslatableMarkup('Test Always'), directions: [ 'change' => 'change', ] diff --git a/tests/Drupal/Classes/FullyQualifiedNamespaceUnitTest.php b/tests/Drupal/Classes/FullyQualifiedNamespaceUnitTest.php index 1ec06c33680e99b0b9bd14c4451e2da24b0e1b39..aa80f26a8dce655db0d85c60561f17d10bf4e41a 100644 --- a/tests/Drupal/Classes/FullyQualifiedNamespaceUnitTest.php +++ b/tests/Drupal/Classes/FullyQualifiedNamespaceUnitTest.php @@ -38,11 +38,7 @@ class FullyQualifiedNamespaceUnitTest extends CoderSniffUnitTest case 'FullyQualifiedNamespaceUnitTest.3.inc': return [10 => 2]; case 'FullyQualifiedNamespaceUnitTest.4.inc': - return [ - 13 => 1, - 15 => 1, - 16 => 1, - ]; + return []; }//end switch return []; diff --git a/tests/Drupal/Commenting/ClassCommentUnitTest.inc.fixed b/tests/Drupal/Commenting/ClassCommentUnitTest.inc.fixed index 805cb8a31870a6e8a521702e19e510d765957be0..3c04bade1848c8b02268180bc1034eefb9b22c81 100644 --- a/tests/Drupal/Commenting/ClassCommentUnitTest.inc.fixed +++ b/tests/Drupal/Commenting/ClassCommentUnitTest.inc.fixed @@ -5,8 +5,6 @@ * Testing class/trait comments. */ -use Some\Attribute; - /** * */ @@ -62,7 +60,7 @@ class WrongSpacing { /** * This is correct. */ -#[Attribute(foo: 'bar')] +#[Some\Attribute(foo: 'bar')] #[Other\Attribute(baz: 'qux')] class DoubleAttribute { diff --git a/tests/Drupal/Commenting/FunctionCommentUnitTest.inc.fixed b/tests/Drupal/Commenting/FunctionCommentUnitTest.inc.fixed index 4647d9315ab1bb81853c06ed5f918f95db89b84b..817400caf8624b9bf4004b3632cd106ad9b3d78d 100644 --- a/tests/Drupal/Commenting/FunctionCommentUnitTest.inc.fixed +++ b/tests/Drupal/Commenting/FunctionCommentUnitTest.inc.fixed @@ -5,8 +5,6 @@ * Some function comment tests. */ -use Some\Attribute; - /** * Test. * @@ -581,7 +579,7 @@ class Test41 { /** * Method docblock. */ - #[Attribute(foo: 'bar')] + #[Some\Attribute(foo: 'bar')] #[Other\Attribute(baz: 'qux')] public function method() { } diff --git a/tests/Drupal/good/good.php b/tests/Drupal/good/good.php index bd8d911bd520c6a9fc19ec50a48578dbc2593892..26fdb6d63acb3d9b0831146f63d52bf187ecea39 100644 --- a/tests/Drupal/good/good.php +++ b/tests/Drupal/good/good.php @@ -1914,3 +1914,35 @@ enum PUROSELY_WRONG_BUT_OK: int { case One = 1; case Two = 2; } + +/** + * Fully qualified class name is allowed in PHP attributes for now. + */ +#[\Drupal\action_link\Attribute\StateAction( + id: 'test_always', + label: new \Drupal\Core\StringTranslation\TranslatableMarkup('Test Always'), + description: new \Drupal\Core\StringTranslation\TranslatableMarkup('Test Always'), + directions: [ + 'change' => 'change', + ] +)] +class TestAlways extends StateActionBase { + + /** + * Partial names are ok in attributes for now. + */ + #[Assert\NotBlank] + private bool $bar; + + /** + * Partially qualified names are ok in attributes for now. + */ + #[CLI\Command( + name: 'example', + aliases: ['example-foo'] + )] + #[CLI\Option(name: 'pretty_format', description: 'Display the count in pretty format.')] + public function test(array $options = ['pretty-format' => TRUE]): void { + } + +}