home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC World 2001 August
/
PCWorld_2001-08_cd.bin
/
Komunikace
/
phptriad
/
phptriadsetup2-11.exe
/
php
/
pear
/
PHPDoc
/
parser
/
PhpdocVariableParser.php
< prev
Wrap
PHP Script
|
2001-02-18
|
5KB
|
129 lines
<?php
/**
* Extract class variables and their documentation from phpcode
*
* @version $Id: PhpdocVariableParser.php,v 1.4 2001/02/18 14:45:28 uw Exp $
*/
class PhpdocVariableParser extends PhpdocModuleParser {
/**
* Array with default values of a variable
*
* @var array $emptyVariable
*/
var $emptyVariable = array(
"name" => "",
"undoc" => true
);
/**
* Array of tags that are allowed in front of the var keyword
*
* @var array $variableTags
* @see analyseVariableParagraph()
*/
var $variableTags = array(
"access" => true,
"abstract" => true,
"static" => true,
"final" => true,
"see" => true,
"link" => true,
"var" => true,
"version" => true,
"since" => true,
"deprecated" => true,
"deprec" => true,
"brother" => true,
"sister" => true,
"exclude" => true,
"magic" => true,
"todo" => true
);
/**
* Analyses a variable doc comment
*
* @param array Hash returned by getPhpdocParagraph()
* @return array
*/
function analyseVariable($para) {
$variable = $this->emptyVariable;
$variable["name"] = $para["name"];
if ("" != $para["doc"]) {
$variable = $this->analyseTags($this->getTags($para["doc"]), $variable, $this->variableTags);
list($msg, $variable) = $this->checkParserErrors($variable, "variable");
if ("" != $msg)
$this->warn->addDocWarning($this->currentFile, "variable", $variable["name"], $msg, "mismatch");
list($variable["sdesc"], $variable["desc"]) = $this->getDescription($para["doc"]);
$variable["undoc"] = false;
}
list($type, $value, $raw_value) = $this->getVariableTypeAndValue($para["value"], false);
$variable["type"] = $type;
if ("unknown" != $value)
$variable["value"] = $value;
$variable = $this->checkVarDocs($variable);
return $variable;
} // end func analyseVariables
/**
* Compares the var tag informations with the analyse of the source code.
*
* @param array $variable
* @return array $variable
*/
function checkVarDocs($variable) {
if (!isset($variable["var"]))
return $variable;
if ("unknown" != $variable["type"] && "mixed" != $variable["type"] && $variable["var"]["type"] != $variable["type"]) {
$msg = sprintf("The documented class variable type does not match the type found. Update the tag to '@var %s [%s]%s'.",
$variable["type"],
$variable["name"],
(isset($variable["var"]["desc"])) ? " " . $variable["var"]["desc"] : ""
);
$this->warn->addDocWarning($this->currentFile, "variable", $variable["name"], $msg, "mismatch");
} else if ("unknown" == $variable["type"] && "" != $variable["var"]["type"]) {
$variable["type"] = $variable["var"]["type"];
}
if ("" != $variable["var"]["name"] && $variable["var"]["name"] != $variable["name"]) {
$msg = sprintf("The documented class variable name does not match the name found. Update the tag to '@var %s [%s]%s'.",
("" != $variable["var"]["type"]) ? $variable["var"]["type"] : $variable["type"],
$variable["name"],
(isset($variable["var"]["desc"])) ? " " . $variable["var"]["desc"] : ""
);
$this->warn->addDocWarning($this->currentFile, "variable", $variable["name"], $msg, "mismatch");
}
unset($variable["var"]);
return $variable;
} // end func checkVarDocs
} // end class PhpdocVariableParser
?>