Mercurial > hg > isophonics-drupal-site
comparison vendor/squizlabs/php_codesniffer/CodeSniffer/DocGenerators/Generator.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 * The base class for all PHP_CodeSniffer documentation generators. | |
4 * | |
5 * PHP version 5 | |
6 * | |
7 * @category PHP | |
8 * @package PHP_CodeSniffer | |
9 * @author Greg Sherwood <gsherwood@squiz.net> | |
10 * @author Marc McIntyre <mmcintyre@squiz.net> | |
11 * @copyright 2006-2014 Squiz Pty Ltd (ABN 77 084 670 600) | |
12 * @license https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt BSD Licence | |
13 * @link http://pear.php.net/package/PHP_CodeSniffer | |
14 */ | |
15 | |
16 /** | |
17 * The base class for all PHP_CodeSniffer documentation generators. | |
18 * | |
19 * Documentation generators are used to print documentation about code sniffs | |
20 * in a standard. | |
21 * | |
22 * @category PHP | |
23 * @package PHP_CodeSniffer | |
24 * @author Greg Sherwood <gsherwood@squiz.net> | |
25 * @author Marc McIntyre <mmcintyre@squiz.net> | |
26 * @copyright 2006-2014 Squiz Pty Ltd (ABN 77 084 670 600) | |
27 * @license https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt BSD Licence | |
28 * @version Release: @package_version@ | |
29 * @link http://pear.php.net/package/PHP_CodeSniffer | |
30 */ | |
31 abstract class PHP_CodeSniffer_DocGenerators_Generator | |
32 { | |
33 | |
34 /** | |
35 * The name of the coding standard we are generating docs for. | |
36 * | |
37 * @var string | |
38 */ | |
39 private $_standard = ''; | |
40 | |
41 /** | |
42 * An array of sniffs that we are limiting the generated docs to. | |
43 * | |
44 * If this array is empty, docs are generated for all sniffs in the | |
45 * supplied coding standard. | |
46 * | |
47 * @var string | |
48 */ | |
49 private $_sniffs = array(); | |
50 | |
51 | |
52 /** | |
53 * Constructs a PHP_CodeSniffer_DocGenerators_Generator object. | |
54 * | |
55 * @param string $standard The name of the coding standard to generate | |
56 * docs for. | |
57 * @param array $sniffs An array of sniffs that we are limiting the | |
58 * generated docs to. | |
59 * | |
60 * @see generate() | |
61 */ | |
62 public function __construct($standard, array $sniffs=array()) | |
63 { | |
64 $this->_standard = $standard; | |
65 $this->_sniffs = $sniffs; | |
66 | |
67 }//end __construct() | |
68 | |
69 | |
70 /** | |
71 * Retrieves the title of the sniff from the DOMNode supplied. | |
72 * | |
73 * @param DOMNode $doc The DOMNode object for the sniff. | |
74 * It represents the "documentation" tag in the XML | |
75 * standard file. | |
76 * | |
77 * @return string | |
78 */ | |
79 protected function getTitle(DOMNode $doc) | |
80 { | |
81 return $doc->getAttribute('title'); | |
82 | |
83 }//end getTitle() | |
84 | |
85 | |
86 /** | |
87 * Retrieves the name of the standard we are generating docs for. | |
88 * | |
89 * @return string | |
90 */ | |
91 protected function getStandard() | |
92 { | |
93 return $this->_standard; | |
94 | |
95 }//end getStandard() | |
96 | |
97 | |
98 /** | |
99 * Generates the documentation for a standard. | |
100 * | |
101 * It's probably wise for doc generators to override this method so they | |
102 * have control over how the docs are produced. Otherwise, the processSniff | |
103 * method should be overridden to output content for each sniff. | |
104 * | |
105 * @return void | |
106 * @see processSniff() | |
107 */ | |
108 public function generate() | |
109 { | |
110 $standardFiles = $this->getStandardFiles(); | |
111 | |
112 foreach ($standardFiles as $standard) { | |
113 $doc = new DOMDocument(); | |
114 $doc->load($standard); | |
115 $documentation = $doc->getElementsByTagName('documentation')->item(0); | |
116 $this->processSniff($documentation); | |
117 } | |
118 | |
119 }//end generate() | |
120 | |
121 | |
122 /** | |
123 * Returns a list of paths to XML standard files for all sniffs in a standard. | |
124 * | |
125 * Any sniffs that do not have an XML standard file are obviously not included | |
126 * in the returned array. If documentation is only being generated for some | |
127 * sniffs (ie. $this->_sniffs is not empty) then all others sniffs will | |
128 * be filtered from the results as well. | |
129 * | |
130 * @return string[] | |
131 */ | |
132 protected function getStandardFiles() | |
133 { | |
134 $phpcs = new PHP_CodeSniffer(); | |
135 $phpcs->process(array(), $this->_standard); | |
136 $sniffs = $phpcs->getSniffs(); | |
137 | |
138 $standardFiles = array(); | |
139 foreach ($sniffs as $className => $sniffClass) { | |
140 $object = new ReflectionObject($sniffClass); | |
141 $sniff = $object->getFilename(); | |
142 if (empty($this->_sniffs) === false) { | |
143 // We are limiting the docs to certain sniffs only, so filter | |
144 // out any unwanted sniffs. | |
145 $parts = explode('_', $className); | |
146 $sniffName = $parts[0].'.'.$parts[2].'.'.substr($parts[3], 0, -5); | |
147 if (in_array($sniffName, $this->_sniffs) === false) { | |
148 continue; | |
149 } | |
150 } | |
151 | |
152 $standardFile = str_replace( | |
153 DIRECTORY_SEPARATOR.'Sniffs'.DIRECTORY_SEPARATOR, | |
154 DIRECTORY_SEPARATOR.'Docs'.DIRECTORY_SEPARATOR, | |
155 $sniff | |
156 ); | |
157 $standardFile = str_replace('Sniff.php', 'Standard.xml', $standardFile); | |
158 | |
159 if (is_file($standardFile) === true) { | |
160 $standardFiles[] = $standardFile; | |
161 } | |
162 }//end foreach | |
163 | |
164 return $standardFiles; | |
165 | |
166 }//end getStandardFiles() | |
167 | |
168 | |
169 /** | |
170 * Process the documentation for a single sniff. | |
171 * | |
172 * Doc generators must implement this function to produce output. | |
173 * | |
174 * @param DOMNode $doc The DOMNode object for the sniff. | |
175 * It represents the "documentation" tag in the XML | |
176 * standard file. | |
177 * | |
178 * @return void | |
179 * @see generate() | |
180 */ | |
181 protected abstract function processSniff(DOMNode $doc); | |
182 | |
183 | |
184 }//end class |