Mercurial > hg > isophonics-drupal-site
comparison vendor/squizlabs/php_codesniffer/CodeSniffer/Standards/AbstractScopeSniff.php @ 0:4c8ae668cc8c
Initial import (non-working)
author | Chris Cannam |
---|---|
date | Wed, 29 Nov 2017 16:09:58 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:4c8ae668cc8c |
---|---|
1 <?php | |
2 /** | |
3 * An AbstractScopeTest allows for tests that extend from this class to | |
4 * listen for tokens within a particular scope. | |
5 * | |
6 * PHP version 5 | |
7 * | |
8 * @category PHP | |
9 * @package PHP_CodeSniffer | |
10 * @author Greg Sherwood <gsherwood@squiz.net> | |
11 * @author Marc McIntyre <mmcintyre@squiz.net> | |
12 * @copyright 2006-2014 Squiz Pty Ltd (ABN 77 084 670 600) | |
13 * @license https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt BSD Licence | |
14 * @link http://pear.php.net/package/PHP_CodeSniffer | |
15 */ | |
16 | |
17 /** | |
18 * An AbstractScopeTest allows for tests that extend from this class to | |
19 * listen for tokens within a particular scope. | |
20 * | |
21 * Below is a test that listens to methods that exist only within classes: | |
22 * <code> | |
23 * class ClassScopeTest extends PHP_CodeSniffer_Standards_AbstractScopeSniff | |
24 * { | |
25 * public function __construct() | |
26 * { | |
27 * parent::__construct(array(T_CLASS), array(T_FUNCTION)); | |
28 * } | |
29 * | |
30 * protected function processTokenWithinScope(PHP_CodeSniffer_File $phpcsFile, $) | |
31 * { | |
32 * $className = $phpcsFile->getDeclarationName($currScope); | |
33 * echo 'encountered a method within class '.$className; | |
34 * } | |
35 * } | |
36 * </code> | |
37 * | |
38 * @category PHP | |
39 * @package PHP_CodeSniffer | |
40 * @author Greg Sherwood <gsherwood@squiz.net> | |
41 * @author Marc McIntyre <mmcintyre@squiz.net> | |
42 * @copyright 2006-2014 Squiz Pty Ltd (ABN 77 084 670 600) | |
43 * @license https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt BSD Licence | |
44 * @version Release: @package_version@ | |
45 * @link http://pear.php.net/package/PHP_CodeSniffer | |
46 */ | |
47 abstract class PHP_CodeSniffer_Standards_AbstractScopeSniff implements PHP_CodeSniffer_Sniff | |
48 { | |
49 | |
50 /** | |
51 * The token types that this test wishes to listen to within the scope. | |
52 * | |
53 * @var array | |
54 */ | |
55 private $_tokens = array(); | |
56 | |
57 /** | |
58 * The type of scope opener tokens that this test wishes to listen to. | |
59 * | |
60 * @var string | |
61 */ | |
62 private $_scopeTokens = array(); | |
63 | |
64 /** | |
65 * True if this test should fire on tokens outside of the scope. | |
66 * | |
67 * @var boolean | |
68 */ | |
69 private $_listenOutside = false; | |
70 | |
71 | |
72 /** | |
73 * Constructs a new AbstractScopeTest. | |
74 * | |
75 * @param array $scopeTokens The type of scope the test wishes to listen to. | |
76 * @param array $tokens The tokens that the test wishes to listen to | |
77 * within the scope. | |
78 * @param boolean $listenOutside If true this test will also alert the | |
79 * extending class when a token is found outside | |
80 * the scope, by calling the | |
81 * processTokenOutsideScope method. | |
82 * | |
83 * @see PHP_CodeSniffer.getValidScopeTokeners() | |
84 * @throws PHP_CodeSniffer_Exception If the specified tokens array is empty. | |
85 */ | |
86 public function __construct( | |
87 array $scopeTokens, | |
88 array $tokens, | |
89 $listenOutside=false | |
90 ) { | |
91 if (empty($scopeTokens) === true) { | |
92 $error = 'The scope tokens list cannot be empty'; | |
93 throw new PHP_CodeSniffer_Exception($error); | |
94 } | |
95 | |
96 if (empty($tokens) === true) { | |
97 $error = 'The tokens list cannot be empty'; | |
98 throw new PHP_CodeSniffer_Exception($error); | |
99 } | |
100 | |
101 $invalidScopeTokens = array_intersect($scopeTokens, $tokens); | |
102 if (empty($invalidScopeTokens) === false) { | |
103 $invalid = implode(', ', $invalidScopeTokens); | |
104 $error = "Scope tokens [$invalid] can't be in the tokens array"; | |
105 throw new PHP_CodeSniffer_Exception($error); | |
106 } | |
107 | |
108 $this->_listenOutside = $listenOutside; | |
109 $this->_scopeTokens = array_flip($scopeTokens); | |
110 $this->_tokens = $tokens; | |
111 | |
112 }//end __construct() | |
113 | |
114 | |
115 /** | |
116 * The method that is called to register the tokens this test wishes to | |
117 * listen to. | |
118 * | |
119 * DO NOT OVERRIDE THIS METHOD. Use the constructor of this class to register | |
120 * for the desired tokens and scope. | |
121 * | |
122 * @return int[] | |
123 * @see __constructor() | |
124 */ | |
125 public final function register() | |
126 { | |
127 return $this->_tokens; | |
128 | |
129 }//end register() | |
130 | |
131 | |
132 /** | |
133 * Processes the tokens that this test is listening for. | |
134 * | |
135 * @param PHP_CodeSniffer_File $phpcsFile The file where this token was found. | |
136 * @param int $stackPtr The position in the stack where this | |
137 * token was found. | |
138 * | |
139 * @return void | |
140 * @see processTokenWithinScope() | |
141 */ | |
142 public final function process(PHP_CodeSniffer_File $phpcsFile, $stackPtr) | |
143 { | |
144 $tokens = $phpcsFile->getTokens(); | |
145 | |
146 $foundScope = false; | |
147 foreach ($tokens[$stackPtr]['conditions'] as $scope => $code) { | |
148 if (isset($this->_scopeTokens[$code]) === true) { | |
149 $this->processTokenWithinScope($phpcsFile, $stackPtr, $scope); | |
150 $foundScope = true; | |
151 } | |
152 } | |
153 | |
154 if ($this->_listenOutside === true && $foundScope === false) { | |
155 $this->processTokenOutsideScope($phpcsFile, $stackPtr); | |
156 } | |
157 | |
158 }//end process() | |
159 | |
160 | |
161 /** | |
162 * Processes a token that is found within the scope that this test is | |
163 * listening to. | |
164 * | |
165 * @param PHP_CodeSniffer_File $phpcsFile The file where this token was found. | |
166 * @param int $stackPtr The position in the stack where this | |
167 * token was found. | |
168 * @param int $currScope The position in the tokens array that | |
169 * opened the scope that this test is | |
170 * listening for. | |
171 * | |
172 * @return void | |
173 */ | |
174 protected abstract function processTokenWithinScope( | |
175 PHP_CodeSniffer_File $phpcsFile, | |
176 $stackPtr, | |
177 $currScope | |
178 ); | |
179 | |
180 | |
181 /** | |
182 * Processes a token that is found outside the scope that this test is | |
183 * listening to. | |
184 * | |
185 * @param PHP_CodeSniffer_File $phpcsFile The file where this token was found. | |
186 * @param int $stackPtr The position in the stack where this | |
187 * token was found. | |
188 * | |
189 * @return void | |
190 */ | |
191 protected function processTokenOutsideScope( | |
192 PHP_CodeSniffer_File $phpcsFile, | |
193 $stackPtr | |
194 ) { | |
195 | |
196 }//end processTokenOutsideScope() | |
197 | |
198 | |
199 }//end class |