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