cvs: phpdoc /scripts check-references.php
| From: | Jakub Vrana | Date: | Tue, 21 Jun 2005 13:59:34 +0000 |
| Subject: | cvs: phpdoc /scripts check-references.php | ||
| Groups: | php.doc | ||
| Request: | Send a blank email to phpdoc+get-969368772@lists.php.net to get a copy of this message | ||
vrana Tue Jun 21 09:59:34 2005 EDT
Modified files:
/phpdoc/scripts check-references.php
Log:
Support for methods and PARAM_PASSTHRU
# generates a lot of false warnings yet
http://cvs.php.net/diff.php/phpdoc/scripts/check-references.php?r1=1.14&r2=1.15&ty=u
Index: phpdoc/scripts/check-references.php
diff -u phpdoc/scripts/check-references.php:1.14 phpdoc/scripts/check-references.php:1.15
--- phpdoc/scripts/check-references.php:1.14 Thu Jun 16 10:41:37 2005
+++ phpdoc/scripts/check-references.php Tue Jun 21 09:59:33 2005
@@ -134,6 +134,12 @@
"wddx_packet_end",
"apd_echo",
"fdf_set_on_import_javascript",
+ "easter_date",
+ "fbsql_fetch_assoc", "fbsql_fetch_row",
+ "msql_fetch_object", "msql_fetch_row",
+ "mssql_fetch_assoc", "mssql_fetch_object", "mssql_fetch_row",
+ "mysql_pconnect",
+ "pg_fetch_assoc", "pg_fetch_row",
);
$difficult_arg_count = array(
"getdate", "min", "max", "implode", "strtok",
"sybase_fetch_object",
@@ -165,19 +171,22 @@
}
// read parameters
- preg_match_all('~^(?:ZEND|PHP)(?:_NAMED)?_FUNCTION\\(([^)]+)\\)(.*)^\\}~msU', $file,
$matches, PREG_SET_ORDER | PREG_OFFSET_CAPTURE); // }}} is not in all sources so ^} is used instead
+ preg_match_all('~^(?:ZEND|PHP)(?:_NAMED)?_(?:FUNCTION|METHOD)\\(([^)]+)\\)(.*)^\\}~msU',
$file, $matches, PREG_SET_ORDER | PREG_OFFSET_CAPTURE); // }}} is not in all sources so ^} is used
instead
foreach ($matches as $val) {
- $function_name = strtolower(trim($val[1][0]));
+ $function_name = strtolower(trim(preg_replace('~\\s*,\\s*~', '::',
$val[1][0])));
+ if (preg_match('~(\\w+)\\(INTERNAL_FUNCTION_PARAM_PASSTHRU~', $val[2][0], $matches2)) {
+ preg_match('~(' . preg_quote($matches2[1], '~') .
')\\(INTERNAL_FUNCTION_PARAMETERS(.*)^\\}~msU', $file, $val, PREG_OFFSET_CAPTURE);
+ }
+
$lineno = substr_count(substr($file, 0, $val[2][1]), "\n") + 1;
$function_body = $val[2][0];
// types and optional
if (!in_array($function_name, $difficult_params)
&& strpos($function_body, 'zend_parse_parameters_ex') === false // indicate
difficulty
- &&
preg_match('~.*zend_parse_parameters\\([^,]*,\\s*"([^"]*)"~s',
$function_body, $matches2) // .* to catch last occurence
- // zend_parse_method_parameters is not yet supported
+ &&
preg_match('~.*zend_parse(_method)?_parameters\\([^,]*,\\s*"([^"]*)"~s',
$function_body, $matches2) // .* to catch last occurence
) {
- $source_types[$function_name] = array($matches2[1], $filename, $lineno);
+ $source_types[$function_name] = array(($matches2[1] ? substr($matches2[2], 1) : $matches2[2]),
$filename, $lineno);
} elseif (!in_array($function_name, $difficult_arg_count)) {
// arguments count
@@ -231,20 +240,33 @@
}
}
}
+ preg_match_all('~INIT(?:_OVERLOADED)?_CLASS_ENTRY\\(.*"([^"]+)"\\s*,\\s*([^)]+)~',
$file, $matches, PREG_SET_ORDER);
+ foreach ($matches as $val) {
+ if (preg_match('~' . preg_quote($val[2], '~') . '\\[\\](.*)\\}~sU',
$file, $matches2)) {
+ preg_match_all('~PHP_FALIAS\\((\\w+)\\s*,\\s*(\\w+)~', $matches2[1], $matches2,
PREG_SET_ORDER);
+ foreach ($matches2 as $val2) {
+ $function_name = strtolower($val2[2]);
+ $method_name = strtolower("$val[1]::$val2[1]");
+ if (isset($source_types[$function_name])) {
+ $source_types[$method_name] = $source_types[$function_name];
+ }
+ if ($source_arg_counts[$function_name]) {
+ $source_arg_counts[$method_name] = $source_arg_counts[$function_name];
+ }
+ }
+ }
+ }
}
echo "Sources were read.\n";
// compare with documentation
$counts = array("refs" => 0, "types" => 0, "arg_counts" =>
0);
foreach (glob("$phpdoc_dir/reference/*/functions/*.xml") as $filename) {
- if
(preg_match('~^(.*<methodsynopsis>(.*))<methodname>([^<]+)<(.*)</methodsynopsis>~sU',
file_get_contents($filename), $matches)) {
+ if
(preg_match('~^(.*(?:(\\w+)</classname></ooclass>\\s*)?<methodsynopsis>(.*))<methodname>([^<]+)<(.*)</methodsynopsis>~sU',
file_get_contents($filename), $matches)) {
$lineno = substr_count($matches[1], "\n") + 1;
- $return_type = $matches[2];
- $function_name = strtolower(trim($matches[3]));
- if (strpos($function_name, '-') || strpos($function_name, ':')) {
- continue; // methods are not supported
- }
- $methodsynopsis = $matches[4];
+ $return_type = $matches[3];
+ $function_name = strtolower(($matches[2] ? "$matches[2]::" : "") .
trim(preg_replace('~-(>|>)~', '::', $matches[4])));
+ $methodsynopsis = $matches[5];
// return type
if (preg_match("~<type>(callback|$invalid_types)</type>~", $return_type)) {