Chris@0
|
1 <?php
|
Chris@0
|
2
|
Chris@0
|
3 /**
|
Chris@0
|
4 * DrupalPractice_Sniffs_InfoFiles_NamespacedDependencySniff.
|
Chris@0
|
5 *
|
Chris@0
|
6 * @category PHP
|
Chris@0
|
7 * @package PHP_CodeSniffer
|
Chris@0
|
8 * @link http://pear.php.net/package/PHP_CodeSniffer
|
Chris@0
|
9 */
|
Chris@0
|
10
|
Chris@0
|
11 /**
|
Chris@0
|
12 * Checks that all declared dependencies are namespaced.
|
Chris@0
|
13 *
|
Chris@0
|
14 * @category PHP
|
Chris@0
|
15 * @package PHP_CodeSniffer
|
Chris@0
|
16 * @link http://pear.php.net/package/PHP_CodeSniffer
|
Chris@0
|
17 */
|
Chris@0
|
18 class DrupalPractice_Sniffs_InfoFiles_NamespacedDependencySniff implements PHP_CodeSniffer_Sniff
|
Chris@0
|
19 {
|
Chris@0
|
20
|
Chris@0
|
21
|
Chris@0
|
22 /**
|
Chris@0
|
23 * Returns an array of tokens this test wants to listen for.
|
Chris@0
|
24 *
|
Chris@0
|
25 * @return array
|
Chris@0
|
26 */
|
Chris@0
|
27 public function register()
|
Chris@0
|
28 {
|
Chris@0
|
29 return array(T_INLINE_HTML);
|
Chris@0
|
30
|
Chris@0
|
31 }//end register()
|
Chris@0
|
32
|
Chris@0
|
33
|
Chris@0
|
34 /**
|
Chris@0
|
35 * Processes this test, when one of its tokens is encountered.
|
Chris@0
|
36 *
|
Chris@0
|
37 * @param PHP_CodeSniffer_File $phpcsFile The current file being processed.
|
Chris@0
|
38 * @param int $stackPtr The position of the current token
|
Chris@0
|
39 * in the stack passed in $tokens.
|
Chris@0
|
40 *
|
Chris@0
|
41 * @return int
|
Chris@0
|
42 */
|
Chris@0
|
43 public function process(PHP_CodeSniffer_File $phpcsFile, $stackPtr)
|
Chris@0
|
44 {
|
Chris@0
|
45 $tokens = $phpcsFile->getTokens();
|
Chris@0
|
46
|
Chris@0
|
47 $fileExtension = strtolower(substr($phpcsFile->getFilename(), -9));
|
Chris@0
|
48 if ($fileExtension !== '.info.yml') {
|
Chris@0
|
49 return ($phpcsFile->numTokens + 1);
|
Chris@0
|
50 }
|
Chris@0
|
51
|
Chris@0
|
52 if (preg_match('/^dependencies:/', $tokens[$stackPtr]['content']) === 0) {
|
Chris@0
|
53 return;
|
Chris@0
|
54 }
|
Chris@0
|
55
|
Chris@0
|
56 $nextLine = ($stackPtr + 1);
|
Chris@0
|
57
|
Chris@0
|
58 while (isset($tokens[$nextLine]) === true) {
|
Chris@0
|
59 // Dependency line without namespace.
|
Chris@0
|
60 if (preg_match('/^[\s]+- [^:]+[\s]*$/', $tokens[$nextLine]['content']) === 1) {
|
Chris@0
|
61 $error = 'All dependencies must be prefixed with the project name, for example "drupal:"';
|
Chris@0
|
62 $phpcsFile->addWarning($error, $nextLine, 'NonNamespaced');
|
Chris@0
|
63 } else if (preg_match('/^[\s]+- [^:]+:[^:]+[\s]*$/', $tokens[$nextLine]['content']) === 0
|
Chris@0
|
64 && preg_match('/^[\s]*#.*$/', $tokens[$nextLine]['content']) === 0
|
Chris@0
|
65 ) {
|
Chris@0
|
66 // Not a dependency line with namespace or comment - stop.
|
Chris@0
|
67 return $nextLine;
|
Chris@0
|
68 }
|
Chris@0
|
69
|
Chris@0
|
70 $nextLine++;
|
Chris@0
|
71 }
|
Chris@0
|
72
|
Chris@0
|
73 }//end process()
|
Chris@0
|
74
|
Chris@0
|
75
|
Chris@0
|
76 }//end class
|