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