33 * Copyright © Magento. All rights reserved.
44 * See COPYING.txt for license details.
55 */
6+
67namespace Magento2 \Sniffs \GraphQL ;
78
89use PHP_CodeSniffer \Files \File ;
@@ -46,16 +47,14 @@ public function process(File $phpcsFile, $stackPtr)
4647
4748 $ values = $ this ->getValues ($ openingCurlyPointer , $ closingCurlyPointer , $ tokens , $ phpcsFile ->eolChar );
4849
49- foreach ($ values as $ value ) {
50- $ pointer = $ value [0 ];
51- $ name = $ value [1 ];
50+ foreach ($ values as $ pointer => $ value ) {
5251
53- if (!$ this ->isSnakeCase ($ name , true )) {
52+ if (!$ this ->isSnakeCase ($ value , true )) {
5453 $ type = 'Enum value ' ;
5554 $ error = '%s "%s" is not in SCREAMING_SNAKE_CASE format ' ;
5655 $ data = [
5756 $ type ,
58- $ name ,
57+ $ value ,
5958 ];
6059
6160 $ phpcsFile ->addError ($ error , $ pointer , 'NotScreamingSnakeCase ' , $ data );
@@ -98,11 +97,13 @@ private function getOpeningCurlyBracketPointer($startPointer, array $tokens)
9897 * Finds all enum values contained in <var>$tokens</var> in range <var>$startPointer</var> to
9998 * <var>$endPointer</var>.
10099 *
100+ * The returned array uses token pointers as keys and value names as values.
101+ *
101102 * @param int $startPointer
102103 * @param int $endPointer
103104 * @param array $tokens
104105 * @param string $eolChar
105- * @return array[]
106+ * @return array<int,string>
106107 */
107108 private function getValues ($ startPointer , $ endPointer , array $ tokens , $ eolChar )
108109 {
@@ -112,20 +113,31 @@ private function getValues($startPointer, $endPointer, array $tokens, $eolChar)
112113 $ skipTypes = [T_COMMENT , T_WHITESPACE ];
113114
114115 for ($ i = $ startPointer + 1 ; $ i < $ endPointer ; ++$ i ) {
115- //skip some tokens
116116 if (in_array ($ tokens [$ i ]['code ' ], $ skipTypes )) {
117+ //NOP This is a token that we have to skip
117118 continue ;
118119 }
119- $ enumValue .= $ tokens [$ i ]['content ' ];
120120
121- if ($ valueTokenPointer === null ) {
122- $ valueTokenPointer = $ i ;
121+ //add current tokens content to enum value if we have a string
122+ if ($ tokens [$ i ]['code ' ] === T_STRING ) {
123+ $ enumValue .= $ tokens [$ i ]['content ' ];
124+
125+ //and store the pointer if we have not done it already
126+ if ($ valueTokenPointer === null ) {
127+ $ valueTokenPointer = $ i ;
128+ }
129+ }
130+
131+ //consume directive if we have found one
132+ if ($ tokens [$ i ]['code ' ] === T_DOC_COMMENT_TAG ) {
133+ $ i = $ this ->seekEndOfDirective ($ tokens , $ i );
123134 }
124135
125- if (strpos ($ enumValue , $ eolChar ) !== false ) {
126- $ values [] = [$ valueTokenPointer , rtrim ($ enumValue , $ eolChar )];
127- $ enumValue = '' ;
128- $ valueTokenPointer = null ;
136+ //if current token has a line break, we have found the end of the value definition
137+ if (strpos ($ tokens [$ i ]['content ' ], $ eolChar ) !== false ) {
138+ $ values [$ valueTokenPointer ] = trim ($ enumValue );
139+ $ enumValue = '' ;
140+ $ valueTokenPointer = null ;
129141 }
130142 }
131143
0 commit comments