Chris@0
|
1 <?php
|
Chris@0
|
2 /**
|
Chris@17
|
3 * \Drupal\Sniffs\Semantics\FunctionAliasSniff
|
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\Semantics;
|
Chris@17
|
11
|
Chris@17
|
12 use Drupal\Sniffs\Semantics\FunctionCall;
|
Chris@17
|
13 use PHP_CodeSniffer\Files\File;
|
Chris@17
|
14
|
Chris@0
|
15 /**
|
Chris@0
|
16 * Checks that no PHP function name aliases are used.
|
Chris@0
|
17 *
|
Chris@0
|
18 * @category PHP
|
Chris@0
|
19 * @package PHP_CodeSniffer
|
Chris@0
|
20 * @link http://pear.php.net/package/PHP_CodeSniffer
|
Chris@0
|
21 */
|
Chris@17
|
22 class FunctionAliasSniff extends FunctionCall
|
Chris@0
|
23 {
|
Chris@0
|
24
|
Chris@0
|
25 /**
|
Chris@0
|
26 * Holds all PHP function name aliases (keys) and originals (values). See
|
Chris@0
|
27 * http://php.net/manual/en/aliases.php
|
Chris@0
|
28 *
|
Chris@0
|
29 * @var array
|
Chris@0
|
30 */
|
Chris@0
|
31 protected $aliases = array(
|
Chris@0
|
32 '_' => 'gettext',
|
Chris@0
|
33 'chop' => 'rtrim',
|
Chris@0
|
34 'close' => 'closedir',
|
Chris@0
|
35 'com_get' => 'com_propget',
|
Chris@0
|
36 'com_propset' => 'com_propput',
|
Chris@0
|
37 'com_set' => 'com_propput',
|
Chris@0
|
38 'die' => 'exit',
|
Chris@0
|
39 'diskfreespace' => 'disk_free_space',
|
Chris@0
|
40 'doubleval' => 'floatval',
|
Chris@0
|
41 'fbsql' => 'fbsql_db_query',
|
Chris@0
|
42 'fputs' => 'fwrite',
|
Chris@0
|
43 'gzputs' => 'gzwrite',
|
Chris@0
|
44 'i18n_convert' => 'mb_convert_encoding',
|
Chris@0
|
45 'i18n_discover_encoding' => 'mb_detect_encoding',
|
Chris@0
|
46 'i18n_http_input' => 'mb_http_input',
|
Chris@0
|
47 'i18n_http_output' => 'mb_http_output',
|
Chris@0
|
48 'i18n_internal_encoding' => 'mb_internal_encoding',
|
Chris@0
|
49 'i18n_ja_jp_hantozen' => 'mb_convert_kana',
|
Chris@0
|
50 'i18n_mime_header_decode' => 'mb_decode_mimeheader',
|
Chris@0
|
51 'i18n_mime_header_encode' => 'mb_encode_mimeheader',
|
Chris@0
|
52 'imap_create' => 'imap_createmailbox',
|
Chris@0
|
53 'imap_fetchtext' => 'imap_body',
|
Chris@0
|
54 'imap_getmailboxes' => 'imap_list_full',
|
Chris@0
|
55 'imap_getsubscribed' => 'imap_lsub_full',
|
Chris@0
|
56 'imap_header' => 'imap_headerinfo',
|
Chris@0
|
57 'imap_listmailbox' => 'imap_list',
|
Chris@0
|
58 'imap_listsubscribed' => 'imap_lsub',
|
Chris@0
|
59 'imap_rename' => 'imap_renamemailbox',
|
Chris@0
|
60 'imap_scan' => 'imap_listscan',
|
Chris@0
|
61 'imap_scanmailbox' => 'imap_listscan',
|
Chris@0
|
62 'ini_alter' => 'ini_set',
|
Chris@0
|
63 'is_double' => 'is_float',
|
Chris@0
|
64 'is_integer' => 'is_int',
|
Chris@0
|
65 'is_long' => 'is_int',
|
Chris@0
|
66 'is_real' => 'is_float',
|
Chris@0
|
67 'is_writeable' => 'is_writable',
|
Chris@0
|
68 'join' => 'implode',
|
Chris@0
|
69 'key_exists' => 'array_key_exists',
|
Chris@0
|
70 'ldap_close' => 'ldap_unbind',
|
Chris@0
|
71 'magic_quotes_runtime' => 'set_magic_quotes_runtime',
|
Chris@0
|
72 'mbstrcut' => 'mb_strcut',
|
Chris@0
|
73 'mbstrlen' => 'mb_strlen',
|
Chris@0
|
74 'mbstrpos' => 'mb_strpos',
|
Chris@0
|
75 'mbstrrpos' => 'mb_strrpos',
|
Chris@0
|
76 'mbsubstr' => 'mb_substr',
|
Chris@0
|
77 'ming_setcubicthreshold' => 'ming_setCubicThreshold',
|
Chris@0
|
78 'ming_setscale' => 'ming_setScale',
|
Chris@0
|
79 'msql' => 'msql_db_query',
|
Chris@0
|
80 'msql_createdb' => 'msql_create_db',
|
Chris@0
|
81 'msql_dbname' => 'msql_result',
|
Chris@0
|
82 'msql_dropdb' => 'msql_drop_db',
|
Chris@0
|
83 'msql_fieldflags' => 'msql_field_flags',
|
Chris@0
|
84 'msql_fieldlen' => 'msql_field_len',
|
Chris@0
|
85 'msql_fieldname' => 'msql_field_name',
|
Chris@0
|
86 'msql_fieldtable' => 'msql_field_table',
|
Chris@0
|
87 'msql_fieldtype' => 'msql_field_type',
|
Chris@0
|
88 'msql_freeresult' => 'msql_free_result',
|
Chris@0
|
89 'msql_listdbs' => 'msql_list_dbs',
|
Chris@0
|
90 'msql_listfields' => 'msql_list_fields',
|
Chris@0
|
91 'msql_listtables' => 'msql_list_tables',
|
Chris@0
|
92 'msql_numfields' => 'msql_num_fields',
|
Chris@0
|
93 'msql_numrows' => 'msql_num_rows',
|
Chris@0
|
94 'msql_regcase' => 'sql_regcase',
|
Chris@0
|
95 'msql_selectdb' => 'msql_select_db',
|
Chris@0
|
96 'msql_tablename' => 'msql_result',
|
Chris@0
|
97 'mssql_affected_rows' => 'sybase_affected_rows',
|
Chris@0
|
98 'mssql_affected_rows' => 'sybase_affected_rows',
|
Chris@0
|
99 'mssql_close' => 'sybase_close',
|
Chris@0
|
100 'mssql_close' => 'sybase_close',
|
Chris@0
|
101 'mssql_connect' => 'sybase_connect',
|
Chris@0
|
102 'mssql_connect' => 'sybase_connect',
|
Chris@0
|
103 'mssql_data_seek' => 'sybase_data_seek',
|
Chris@0
|
104 'mssql_data_seek' => 'sybase_data_seek',
|
Chris@0
|
105 'mssql_fetch_array' => 'sybase_fetch_array',
|
Chris@0
|
106 'mssql_fetch_array' => 'sybase_fetch_array',
|
Chris@0
|
107 'mssql_fetch_field' => 'sybase_fetch_field',
|
Chris@0
|
108 'mssql_fetch_field' => 'sybase_fetch_field',
|
Chris@0
|
109 'mssql_fetch_object' => 'sybase_fetch_object',
|
Chris@0
|
110 'mssql_fetch_object' => 'sybase_fetch_object',
|
Chris@0
|
111 'mssql_fetch_row' => 'sybase_fetch_row',
|
Chris@0
|
112 'mssql_fetch_row' => 'sybase_fetch_row',
|
Chris@0
|
113 'mssql_field_seek' => 'sybase_field_seek',
|
Chris@0
|
114 'mssql_field_seek' => 'sybase_field_seek',
|
Chris@0
|
115 'mssql_free_result' => 'sybase_free_result',
|
Chris@0
|
116 'mssql_free_result' => 'sybase_free_result',
|
Chris@0
|
117 'mssql_get_last_message' => 'sybase_get_last_message',
|
Chris@0
|
118 'mssql_get_last_message' => 'sybase_get_last_message',
|
Chris@0
|
119 'mssql_min_client_severity' => 'sybase_min_client_severity',
|
Chris@0
|
120 'mssql_min_error_severity' => 'sybase_min_error_severity',
|
Chris@0
|
121 'mssql_min_message_severity' => 'sybase_min_message_severity',
|
Chris@0
|
122 'mssql_min_server_severity' => 'sybase_min_server_severity',
|
Chris@0
|
123 'mssql_num_fields' => 'sybase_num_fields',
|
Chris@0
|
124 'mssql_num_fields' => 'sybase_num_fields',
|
Chris@0
|
125 'mssql_num_rows' => 'sybase_num_rows',
|
Chris@0
|
126 'mssql_num_rows' => 'sybase_num_rows',
|
Chris@0
|
127 'mssql_pconnect' => 'sybase_pconnect',
|
Chris@0
|
128 'mssql_pconnect' => 'sybase_pconnect',
|
Chris@0
|
129 'mssql_query' => 'sybase_query',
|
Chris@0
|
130 'mssql_query' => 'sybase_query',
|
Chris@0
|
131 'mssql_result' => 'sybase_result',
|
Chris@0
|
132 'mssql_result' => 'sybase_result',
|
Chris@0
|
133 'mssql_select_db' => 'sybase_select_db',
|
Chris@0
|
134 'mssql_select_db' => 'sybase_select_db',
|
Chris@0
|
135 'mysql' => 'mysql_db_query',
|
Chris@0
|
136 'mysql_createdb' => 'mysql_create_db',
|
Chris@0
|
137 'mysql_db_name' => 'mysql_result',
|
Chris@0
|
138 'mysql_dbname' => 'mysql_result',
|
Chris@0
|
139 'mysql_dropdb' => 'mysql_drop_db',
|
Chris@0
|
140 'mysql_fieldflags' => 'mysql_field_flags',
|
Chris@0
|
141 'mysql_fieldlen' => 'mysql_field_len',
|
Chris@0
|
142 'mysql_fieldname' => 'mysql_field_name',
|
Chris@0
|
143 'mysql_fieldtable' => 'mysql_field_table',
|
Chris@0
|
144 'mysql_fieldtype' => 'mysql_field_type',
|
Chris@0
|
145 'mysql_freeresult' => 'mysql_free_result',
|
Chris@0
|
146 'mysql_listdbs' => 'mysql_list_dbs',
|
Chris@0
|
147 'mysql_listfields' => 'mysql_list_fields',
|
Chris@0
|
148 'mysql_listtables' => 'mysql_list_tables',
|
Chris@0
|
149 'mysql_numfields' => 'mysql_num_fields',
|
Chris@0
|
150 'mysql_numrows' => 'mysql_num_rows',
|
Chris@0
|
151 'mysql_selectdb' => 'mysql_select_db',
|
Chris@0
|
152 'mysql_tablename' => 'mysql_result',
|
Chris@0
|
153 'oci8append' => 'ocicollappend',
|
Chris@0
|
154 'oci8assign' => 'ocicollassign',
|
Chris@0
|
155 'oci8assignelem' => 'ocicollassignelem',
|
Chris@0
|
156 'oci8close' => 'ocicloselob',
|
Chris@0
|
157 'oci8free' => 'ocifreecoll',
|
Chris@0
|
158 'oci8free' => 'ocifreedesc',
|
Chris@0
|
159 'oci8getelem' => 'ocicollgetelem',
|
Chris@0
|
160 'oci8load' => 'ociloadlob',
|
Chris@0
|
161 'oci8max' => 'ocicollmax',
|
Chris@0
|
162 'oci8ocifreecursor' => 'ocifreestatement',
|
Chris@0
|
163 'oci8save' => 'ocisavelob',
|
Chris@0
|
164 'oci8savefile' => 'ocisavelobfile',
|
Chris@0
|
165 'oci8size' => 'ocicollsize',
|
Chris@0
|
166 'oci8trim' => 'ocicolltrim',
|
Chris@0
|
167 'oci8writetemporary' => 'ociwritetemporarylob',
|
Chris@0
|
168 'oci8writetofile' => 'ociwritelobtofile',
|
Chris@0
|
169 'odbc_do' => 'odbc_exec',
|
Chris@0
|
170 'odbc_field_precision' => 'odbc_field_len',
|
Chris@0
|
171 'pdf_add_outline' => 'pdf_add_bookmark',
|
Chris@0
|
172 'pg_clientencoding' => 'pg_client_encoding',
|
Chris@0
|
173 'pg_setclientencoding' => 'pg_set_client_encoding',
|
Chris@0
|
174 'pos' => 'current',
|
Chris@0
|
175 'recode' => 'recode_string',
|
Chris@0
|
176 'show_source' => 'highlight_file',
|
Chris@0
|
177 'sizeof' => 'count',
|
Chris@0
|
178 'snmpwalkoid' => 'snmprealwalk',
|
Chris@0
|
179 'strchr' => 'strstr',
|
Chris@0
|
180 'xptr_new_context' => 'xpath_new_context',
|
Chris@0
|
181 );
|
Chris@0
|
182
|
Chris@0
|
183
|
Chris@0
|
184 /**
|
Chris@0
|
185 * Returns an array of function names this test wants to listen for.
|
Chris@0
|
186 *
|
Chris@0
|
187 * @return array
|
Chris@0
|
188 */
|
Chris@0
|
189 public function registerFunctionNames()
|
Chris@0
|
190 {
|
Chris@0
|
191 return array_keys($this->aliases);
|
Chris@0
|
192
|
Chris@0
|
193 }//end registerFunctionNames()
|
Chris@0
|
194
|
Chris@0
|
195
|
Chris@0
|
196 /**
|
Chris@0
|
197 * Processes this function call.
|
Chris@0
|
198 *
|
Chris@17
|
199 * @param \PHP_CodeSniffer\Files\File $phpcsFile The file being scanned.
|
Chris@17
|
200 * @param int $stackPtr The position of the function call in
|
Chris@17
|
201 * the stack.
|
Chris@17
|
202 * @param int $openBracket The position of the opening
|
Chris@17
|
203 * parenthesis in the stack.
|
Chris@17
|
204 * @param int $closeBracket The position of the closing
|
Chris@17
|
205 * parenthesis in the stack.
|
Chris@0
|
206 *
|
Chris@0
|
207 * @return void
|
Chris@0
|
208 */
|
Chris@0
|
209 public function processFunctionCall(
|
Chris@17
|
210 File $phpcsFile,
|
Chris@0
|
211 $stackPtr,
|
Chris@0
|
212 $openBracket,
|
Chris@0
|
213 $closeBracket
|
Chris@0
|
214 ) {
|
Chris@0
|
215 $tokens = $phpcsFile->getTokens();
|
Chris@0
|
216 $error = '%s() is a function name alias, use %s() instead';
|
Chris@0
|
217 $name = $tokens[$stackPtr]['content'];
|
Chris@0
|
218 $data = array(
|
Chris@0
|
219 $name,
|
Chris@0
|
220 $this->aliases[$name],
|
Chris@0
|
221 );
|
Chris@0
|
222 $phpcsFile->addError($error, $stackPtr, 'FunctionAlias', $data);
|
Chris@0
|
223
|
Chris@0
|
224 }//end processFunctionCall()
|
Chris@0
|
225
|
Chris@0
|
226
|
Chris@0
|
227 }//end class
|