3 * Extract class variables and their documentation from phpcode
\r
5 * @version $Id: PhpdocVariableParser.php,v 1.3 2000/12/03 22:37:37 uw Exp $
\r
7 class PhpdocVariableParser extends PhpdocModuleParser {
\r
10 * Array with default values of a variable
\r
12 * @var array $emptyVariable
\r
14 var $emptyVariable = array(
\r
20 * Array of tags that are allowed in front of the var keyword
\r
21 * @var array $variableTags
\r
22 * @see analyseVariableParagraph()
\r
24 var $variableTags = array(
\r
38 "deprecated" => true,
\r
50 * Analyses a variable doc comment
\r
51 * @param array Hash returned by getPhpdocParagraph()
\r
54 function analyseVariable($para) {
\r
56 $variable = $this->emptyVariable;
\r
57 $variable["name"] = $para["name"];
\r
59 if ("" != $para["doc"]) {
\r
61 $variable = $this->analyseTags($this->getTags($para["doc"]), $variable, $this->variableTags);
\r
63 list($msg, $variable) = $this->checkParserErrors($variable, "variable");
\r
65 $this->warn->addDocWarning($this->currentFile, "variable", $variable["name"], $msg, "mismatch");
\r
67 list($variable["sdesc"], $variable["desc"]) = $this->getDescription($para["doc"]);
\r
69 $variable["undoc"] = false;
\r
73 list($type, $value, $raw_value) = $this->getVariableTypeAndValue($para["value"], false);
\r
74 $variable["type"] = $type;
\r
76 if ("unknown" != $value)
\r
77 $variable["value"] = $value;
\r
79 $variable = $this->checkVarDocs($variable);
\r
82 } // end func analyseVariables
\r
85 * Compares the var tag informations with the analyse of the source code.
\r
87 * @param array $variable
\r
88 * @return array $variable
\r
90 function checkVarDocs($variable) {
\r
92 if (!isset($variable["var"]))
\r
95 if ("unknown" != $variable["type"] && "mixed" != $variable["type"] && $variable["var"]["type"] != $variable["type"]) {
\r
97 $msg = sprintf("The documented class variable type does not match the type found. Update the tag to '@var %s [%s]%s'.",
\r
100 (isset($variable["var"]["desc"])) ? " " . $variable["var"]["desc"] : ""
\r
102 $this->warn->addDocWarning($this->currentFile, "variable", $variable["name"], $msg, "mismatch");
\r
104 } else if ("unknown" == $variable["type"] && "" != $variable["var"]["type"]) {
\r
106 $variable["type"] = $variable["var"]["type"];
\r
110 if ("" != $variable["var"]["name"] && $variable["var"]["name"] != $variable["name"]) {
\r
112 $msg = sprintf("The documented class variable name does not match the name found. Update the tag to '@var %s [%s]%s'.",
\r
113 ("" != $variable["var"]["type"]) ? $variable["var"]["type"] : $variable["type"],
\r
115 (isset($variable["var"]["desc"])) ? " " . $variable["var"]["desc"] : ""
\r
117 $this->warn->addDocWarning($this->currentFile, "variable", $variable["name"], $msg, "mismatch");
\r
121 unset($variable["var"]);
\r
124 } // end func checkVarDocs
\r
126 } // end class PhpdocVariableParser
\r