Chris@0
|
1 <?php
|
Chris@0
|
2 /**
|
Chris@17
|
3 * ThemeSniff
|
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 DrupalPractice\Sniffs\FunctionCalls;
|
Chris@17
|
11
|
Chris@17
|
12 use PHP_CodeSniffer\Files\File;
|
Chris@17
|
13 use Drupal\Sniffs\Semantics\FunctionCall;
|
Chris@17
|
14
|
Chris@0
|
15 /**
|
Chris@17
|
16 * \DrupalPractice\Sniffs\FunctionCalls\Checks that theme functions are not directly called.
|
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 ThemeSniff extends FunctionCall
|
Chris@0
|
23 {
|
Chris@0
|
24
|
Chris@0
|
25 /**
|
Chris@0
|
26 * List of functions starting with "theme_" that don't generate theme output.
|
Chris@0
|
27 *
|
Chris@0
|
28 * @var array
|
Chris@0
|
29 */
|
Chris@0
|
30 protected $reservedFunctions = array(
|
Chris@0
|
31 'theme_get_registry',
|
Chris@0
|
32 'theme_get_setting',
|
Chris@0
|
33 'theme_render_template',
|
Chris@0
|
34 'theme_enable',
|
Chris@0
|
35 'theme_disable',
|
Chris@0
|
36 'theme_get_suggestions',
|
Chris@0
|
37 );
|
Chris@0
|
38
|
Chris@0
|
39
|
Chris@0
|
40 /**
|
Chris@0
|
41 * Processes this function call.
|
Chris@0
|
42 *
|
Chris@17
|
43 * @param \PHP_CodeSniffer\Files\File $phpcsFile The file being scanned.
|
Chris@17
|
44 * @param int $stackPtr The position of the function call in
|
Chris@17
|
45 * the stack.
|
Chris@0
|
46 *
|
Chris@0
|
47 * @return void
|
Chris@0
|
48 */
|
Chris@17
|
49 public function process(File $phpcsFile, $stackPtr)
|
Chris@0
|
50 {
|
Chris@0
|
51 $tokens = $phpcsFile->getTokens();
|
Chris@0
|
52 $functionName = $tokens[$stackPtr]['content'];
|
Chris@0
|
53 if (strpos($functionName, 'theme_') !== 0
|
Chris@0
|
54 || in_array($functionName, $this->reservedFunctions) === true
|
Chris@0
|
55 || $this->isFunctionCall($phpcsFile, $stackPtr) === false
|
Chris@0
|
56 ) {
|
Chris@0
|
57 return;
|
Chris@0
|
58 }
|
Chris@0
|
59
|
Chris@0
|
60 $themeName = substr($functionName, 6);
|
Chris@0
|
61 $warning = "Do not call theme functions directly, use theme('%s', ...) instead";
|
Chris@0
|
62 $phpcsFile->addWarning($warning, $stackPtr, 'ThemeFunctionDirect', array($themeName));
|
Chris@0
|
63
|
Chris@0
|
64 }//end process()
|
Chris@0
|
65
|
Chris@0
|
66
|
Chris@0
|
67 }//end class
|