Chris@0
|
1 <?php
|
Chris@0
|
2 /**
|
Chris@17
|
3 * \Drupal\Sniffs\NamingConventions\ValidGlobalSniff.
|
Chris@0
|
4 *
|
Chris@0
|
5 * @category PHP
|
Chris@0
|
6 * @package PHP_CodeSniffer
|
Chris@0
|
7 * @link http://pear.php.net/package/PHP_CodeSniffer
|
Chris@0
|
8 */
|
Chris@0
|
9
|
Chris@17
|
10 namespace Drupal\Sniffs\NamingConventions;
|
Chris@17
|
11
|
Chris@17
|
12 use PHP_CodeSniffer\Files\File;
|
Chris@17
|
13 use PHP_CodeSniffer\Sniffs\Sniff;
|
Chris@17
|
14 use PHP_CodeSniffer\Util\Tokens;
|
Chris@17
|
15
|
Chris@0
|
16 /**
|
Chris@0
|
17 * Ensures that global variables start with an underscore.
|
Chris@0
|
18 *
|
Chris@0
|
19 * @category PHP
|
Chris@0
|
20 * @package PHP_CodeSniffer
|
Chris@0
|
21 * @link http://pear.php.net/package/PHP_CodeSniffer
|
Chris@0
|
22 */
|
Chris@17
|
23 class ValidGlobalSniff implements Sniff
|
Chris@0
|
24 {
|
Chris@0
|
25
|
Chris@0
|
26 public $coreGlobals = array(
|
Chris@0
|
27 '$argc',
|
Chris@0
|
28 '$argv',
|
Chris@0
|
29 '$base_insecure_url',
|
Chris@0
|
30 '$base_path',
|
Chris@0
|
31 '$base_root',
|
Chris@0
|
32 '$base_secure_url',
|
Chris@0
|
33 '$base_theme_info',
|
Chris@0
|
34 '$base_url',
|
Chris@0
|
35 '$channel',
|
Chris@0
|
36 '$conf',
|
Chris@18
|
37 '$config',
|
Chris@0
|
38 '$config_directories',
|
Chris@0
|
39 '$cookie_domain',
|
Chris@0
|
40 '$databases',
|
Chris@0
|
41 '$db_prefix',
|
Chris@0
|
42 '$db_type',
|
Chris@0
|
43 '$db_url',
|
Chris@0
|
44 '$drupal_hash_salt',
|
Chris@0
|
45 '$drupal_test_info',
|
Chris@0
|
46 '$element',
|
Chris@0
|
47 '$forum_topic_list_header',
|
Chris@0
|
48 '$image',
|
Chris@0
|
49 '$install_state',
|
Chris@0
|
50 '$installed_profile',
|
Chris@0
|
51 '$is_https',
|
Chris@0
|
52 '$is_https_mock',
|
Chris@0
|
53 '$item',
|
Chris@0
|
54 '$items',
|
Chris@0
|
55 '$language',
|
Chris@0
|
56 '$language_content',
|
Chris@0
|
57 '$language_url',
|
Chris@0
|
58 '$locks',
|
Chris@0
|
59 '$menu_admin',
|
Chris@0
|
60 '$multibyte',
|
Chris@0
|
61 '$pager_limits',
|
Chris@0
|
62 '$pager_page_array',
|
Chris@0
|
63 '$pager_total',
|
Chris@0
|
64 '$pager_total_items',
|
Chris@0
|
65 '$tag',
|
Chris@0
|
66 '$theme',
|
Chris@0
|
67 '$theme_engine',
|
Chris@0
|
68 '$theme_info',
|
Chris@0
|
69 '$theme_key',
|
Chris@0
|
70 '$theme_path',
|
Chris@0
|
71 '$timers',
|
Chris@0
|
72 '$update_free_access',
|
Chris@0
|
73 '$update_rewrite_settings',
|
Chris@0
|
74 '$user',
|
Chris@0
|
75 );
|
Chris@0
|
76
|
Chris@0
|
77
|
Chris@0
|
78 /**
|
Chris@0
|
79 * Returns an array of tokens this test wants to listen for.
|
Chris@0
|
80 *
|
Chris@0
|
81 * @return array
|
Chris@0
|
82 */
|
Chris@0
|
83 public function register()
|
Chris@0
|
84 {
|
Chris@0
|
85 return array(T_GLOBAL);
|
Chris@0
|
86
|
Chris@0
|
87 }//end register()
|
Chris@0
|
88
|
Chris@0
|
89
|
Chris@0
|
90 /**
|
Chris@0
|
91 * Processes this test, when one of its tokens is encountered.
|
Chris@0
|
92 *
|
Chris@17
|
93 * @param \PHP_CodeSniffer\Files\File $phpcsFile The current file being processed.
|
Chris@17
|
94 * @param int $stackPtr The position of the current token
|
Chris@17
|
95 * in the stack passed in $tokens.
|
Chris@0
|
96 *
|
Chris@0
|
97 * @return void
|
Chris@0
|
98 */
|
Chris@17
|
99 public function process(File $phpcsFile, $stackPtr)
|
Chris@0
|
100 {
|
Chris@0
|
101 $tokens = $phpcsFile->getTokens();
|
Chris@0
|
102
|
Chris@0
|
103 $varToken = $stackPtr;
|
Chris@0
|
104 // Find variable names until we hit a semicolon.
|
Chris@17
|
105 $ignore = Tokens::$emptyTokens;
|
Chris@0
|
106 $ignore[] = T_SEMICOLON;
|
Chris@0
|
107 while (($varToken = $phpcsFile->findNext($ignore, ($varToken + 1), null, true, null, true)) !== false) {
|
Chris@0
|
108 if ($tokens[$varToken]['code'] === T_VARIABLE
|
Chris@0
|
109 && in_array($tokens[$varToken]['content'], $this->coreGlobals) === false
|
Chris@0
|
110 && $tokens[$varToken]['content']{1} !== '_'
|
Chris@0
|
111 ) {
|
Chris@0
|
112 $error = 'global variables should start with a single underscore followed by the module and another underscore';
|
Chris@0
|
113 $phpcsFile->addError($error, $varToken, 'GlobalUnderScore');
|
Chris@0
|
114 }
|
Chris@0
|
115 }
|
Chris@0
|
116
|
Chris@0
|
117 }//end process()
|
Chris@0
|
118
|
Chris@0
|
119
|
Chris@0
|
120 }//end class
|