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)) {