annotate vendor/squizlabs/php_codesniffer/src/Generators/Generator.php @ 4:a9cd425dd02b

Update, including to Drupal core 8.6.10
author Chris Cannam
date Thu, 28 Feb 2019 13:11:55 +0000
parents
children
rev   line source
Chris@4 1 <?php
Chris@4 2 /**
Chris@4 3 * The base class for all PHP_CodeSniffer documentation generators.
Chris@4 4 *
Chris@4 5 * Documentation generators are used to print documentation about code sniffs
Chris@4 6 * in a standard.
Chris@4 7 *
Chris@4 8 * @author Greg Sherwood <gsherwood@squiz.net>
Chris@4 9 * @copyright 2006-2015 Squiz Pty Ltd (ABN 77 084 670 600)
Chris@4 10 * @license https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt BSD Licence
Chris@4 11 */
Chris@4 12
Chris@4 13 namespace PHP_CodeSniffer\Generators;
Chris@4 14
Chris@4 15 use PHP_CodeSniffer\Ruleset;
Chris@4 16 use PHP_CodeSniffer\Autoload;
Chris@4 17
Chris@4 18 abstract class Generator
Chris@4 19 {
Chris@4 20
Chris@4 21 /**
Chris@4 22 * The ruleset used for the run.
Chris@4 23 *
Chris@4 24 * @var \PHP_CodeSniffer\Ruleset
Chris@4 25 */
Chris@4 26 public $ruleset = null;
Chris@4 27
Chris@4 28 /**
Chris@4 29 * XML documentation files used to produce the final output.
Chris@4 30 *
Chris@4 31 * @var string[]
Chris@4 32 */
Chris@4 33 public $docFiles = [];
Chris@4 34
Chris@4 35
Chris@4 36 /**
Chris@4 37 * Constructs a doc generator.
Chris@4 38 *
Chris@4 39 * @param \PHP_CodeSniffer\Ruleset $ruleset The ruleset used for the run.
Chris@4 40 *
Chris@4 41 * @see generate()
Chris@4 42 */
Chris@4 43 public function __construct(Ruleset $ruleset)
Chris@4 44 {
Chris@4 45 $this->ruleset = $ruleset;
Chris@4 46
Chris@4 47 foreach ($ruleset->sniffs as $className => $sniffClass) {
Chris@4 48 $file = Autoload::getLoadedFileName($className);
Chris@4 49 $docFile = str_replace(
Chris@4 50 DIRECTORY_SEPARATOR.'Sniffs'.DIRECTORY_SEPARATOR,
Chris@4 51 DIRECTORY_SEPARATOR.'Docs'.DIRECTORY_SEPARATOR,
Chris@4 52 $file
Chris@4 53 );
Chris@4 54 $docFile = str_replace('Sniff.php', 'Standard.xml', $docFile);
Chris@4 55
Chris@4 56 if (is_file($docFile) === true) {
Chris@4 57 $this->docFiles[] = $docFile;
Chris@4 58 }
Chris@4 59 }
Chris@4 60
Chris@4 61 }//end __construct()
Chris@4 62
Chris@4 63
Chris@4 64 /**
Chris@4 65 * Retrieves the title of the sniff from the DOMNode supplied.
Chris@4 66 *
Chris@4 67 * @param \DOMNode $doc The DOMNode object for the sniff.
Chris@4 68 * It represents the "documentation" tag in the XML
Chris@4 69 * standard file.
Chris@4 70 *
Chris@4 71 * @return string
Chris@4 72 */
Chris@4 73 protected function getTitle(\DOMNode $doc)
Chris@4 74 {
Chris@4 75 return $doc->getAttribute('title');
Chris@4 76
Chris@4 77 }//end getTitle()
Chris@4 78
Chris@4 79
Chris@4 80 /**
Chris@4 81 * Generates the documentation for a standard.
Chris@4 82 *
Chris@4 83 * It's probably wise for doc generators to override this method so they
Chris@4 84 * have control over how the docs are produced. Otherwise, the processSniff
Chris@4 85 * method should be overridden to output content for each sniff.
Chris@4 86 *
Chris@4 87 * @return void
Chris@4 88 * @see processSniff()
Chris@4 89 */
Chris@4 90 public function generate()
Chris@4 91 {
Chris@4 92 foreach ($this->docFiles as $file) {
Chris@4 93 $doc = new \DOMDocument();
Chris@4 94 $doc->load($file);
Chris@4 95 $documentation = $doc->getElementsByTagName('documentation')->item(0);
Chris@4 96 $this->processSniff($documentation);
Chris@4 97 }
Chris@4 98
Chris@4 99 }//end generate()
Chris@4 100
Chris@4 101
Chris@4 102 /**
Chris@4 103 * Process the documentation for a single sniff.
Chris@4 104 *
Chris@4 105 * Doc generators must implement this function to produce output.
Chris@4 106 *
Chris@4 107 * @param \DOMNode $doc The DOMNode object for the sniff.
Chris@4 108 * It represents the "documentation" tag in the XML
Chris@4 109 * standard file.
Chris@4 110 *
Chris@4 111 * @return void
Chris@4 112 * @see generate()
Chris@4 113 */
Chris@4 114 abstract protected function processSniff(\DOMNode $doc);
Chris@4 115
Chris@4 116
Chris@4 117 }//end class