changed git call from https to git readonly
[atutor.git] / mods / phpdoc / PHPDoc / parser / PhpdocVariableParser.php
1 <?php\r
2 /**\r
3 * Extract class variables and their documentation from phpcode\r
4 *\r
5 * @version  $Id: PhpdocVariableParser.php,v 1.3 2000/12/03 22:37:37 uw Exp $\r
6 */\r
7 class PhpdocVariableParser extends PhpdocModuleParser {\r
8 \r
9         /**\r
10         * Array with default values of a variable\r
11         * \r
12         * @var  array           $emptyVariable\r
13         */\r
14         var $emptyVariable = array(\r
15                                                                                                                         "name"                                  => "",\r
16                                                                                                                         "undoc"                                 => true\r
17                                                                                                 );\r
18 \r
19         /**\r
20         * Array of tags that are allowed in front of the var keyword\r
21         * @var  array   $variableTags\r
22         * @see  analyseVariableParagraph()\r
23         */\r
24         var $variableTags = array(\r
25                                                                                                                         "access"                        => true,\r
26                                                                                                                         "abstract"              => true,\r
27                                                                                                                         "static"                        => true,\r
28                                                                                                                         "final"                         => true,\r
29                                                                                                                         \r
30                                                                                                                         "see"                                   => true,\r
31                                                                                                                         "link"                          => true,\r
32                                                                                                                         \r
33                                                                                                                         "var"                                   => true,\r
34                                                                                                                         \r
35                                                                                                                         "version"                       => true,\r
36                                                                                                                         "since"                         => true,\r
37                                                                                                                         \r
38                                                                                                                         "deprecated"    => true,\r
39                                                                                                                         "deprec"                        => true,\r
40                                                                                                                         \r
41                                                                                                                         "brother"                       => true, \r
42                                                                                                                         "sister"                        => true,\r
43                                                                                                                         \r
44                                                                                                                         "exclude"                       => true,\r
45                                                                                                                         "magic"                         => true,\r
46                                                                                                                         "todo"                          => true\r
47                                                                                         );                                                                                              \r
48 \r
49         /**\r
50         * Analyses a variable doc comment\r
51         * @param        array   Hash returned by getPhpdocParagraph()\r
52         * @return       array \r
53         */                                                                                      \r
54   function analyseVariable($para) {\r
55                 \r
56                 $variable = $this->emptyVariable;\r
57                 $variable["name"] = $para["name"];\r
58                 \r
59                 if ("" != $para["doc"]) {\r
60                         \r
61                         $variable = $this->analyseTags($this->getTags($para["doc"]), $variable, $this->variableTags);\r
62                         \r
63                         list($msg, $variable) = $this->checkParserErrors($variable, "variable");\r
64                         if ("" != $msg)\r
65                                 $this->warn->addDocWarning($this->currentFile, "variable", $variable["name"], $msg, "mismatch");\r
66                                 \r
67                         list($variable["sdesc"], $variable["desc"]) = $this->getDescription($para["doc"]);\r
68                         \r
69                         $variable["undoc"] = false;\r
70                         \r
71                 }\r
72                 \r
73                 list($type, $value, $raw_value) = $this->getVariableTypeAndValue($para["value"], false);\r
74                 $variable["type"]       = $type;\r
75                 \r
76                 if ("unknown" != $value) \r
77                         $variable["value"] = $value;\r
78                 \r
79                 $variable = $this->checkVarDocs($variable);\r
80                 \r
81                 return $variable;\r
82         } // end func analyseVariables\r
83         \r
84         /**\r
85         * Compares the var tag informations with the analyse of the source code.\r
86         *\r
87         * @param        array $variable\r
88         * @return array $variable\r
89         */\r
90         function checkVarDocs($variable) {\r
91                 \r
92                 if (!isset($variable["var"]))\r
93                         return $variable;\r
94                         \r
95                 if ("unknown" != $variable["type"] && "mixed" != $variable["type"] && $variable["var"]["type"] != $variable["type"]) {\r
96                         \r
97                         $msg = sprintf("The documented class variable type does not match the type found. Update the tag to '@var %s [%s]%s'.",\r
98                                                                                                 $variable["type"],\r
99                                                                                                 $variable["name"],\r
100                                                                                                 (isset($variable["var"]["desc"])) ? " " . $variable["var"]["desc"] : ""\r
101                                                                                 );\r
102                         $this->warn->addDocWarning($this->currentFile, "variable", $variable["name"], $msg, "mismatch");\r
103                         \r
104                 } else if ("unknown" == $variable["type"] && "" != $variable["var"]["type"]) {\r
105                         \r
106                         $variable["type"] = $variable["var"]["type"];\r
107                         \r
108                 }\r
109                 \r
110                 if ("" != $variable["var"]["name"] && $variable["var"]["name"] != $variable["name"]) {\r
111                         \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
114                                                                                                 $variable["name"],\r
115                                                                                                 (isset($variable["var"]["desc"])) ? " " . $variable["var"]["desc"] : ""\r
116                                                                                         );\r
117                         $this->warn->addDocWarning($this->currentFile, "variable", $variable["name"], $msg, "mismatch");\r
118                 }\r
119                 \r
120                                 \r
121                 unset($variable["var"]);\r
122                 \r
123                 return $variable;\r
124         } // end func checkVarDocs\r
125 \r
126 } // end class PhpdocVariableParser\r
127 ?>