branch: elpa/php-mode commit 651d524bdbf4083ea35e1b1db4cbf0d090cd595f Author: USAMI Kenta <tad...@zonu.me> Commit: USAMI Kenta <tad...@zonu.me>
Add script/extract_functions.php --- .gitignore | 1 + script/README.md | 40 ++ script/data/module_id_prefixes.php | 846 +++++++++++++++++++++++++++++++++++++ script/extract_functions.php | 111 +++++ script/module_id_prefixes.php | 806 +++++++++++++++++++++++++++++++++++ 5 files changed, 1804 insertions(+) diff --git a/.gitignore b/.gitignore index 783efce946..f1e2797e02 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,4 @@ /.keg/* /.php-cs-fixer.cache php-mode-autoloads.el +php_manual_en.json diff --git a/script/README.md b/script/README.md new file mode 100644 index 0000000000..e9406e742b --- /dev/null +++ b/script/README.md @@ -0,0 +1,40 @@ + +# Maintenance script for PHP Mode + +These scripts are provided for maintenance of PHP Mode. + +## Extract PHP Functions + +This script extract PHP function names from <http://doc.php.net/downloads/json/php_manual_en.json>. + +### Usage + +``` +Usage: + ./script/extract_functions.php count < php_manual_en.json + ./script/extract_functions.php modules < php_manual_en.json + ./script/extract_functions.php functions < php_manual_en.json > result.json + ./script/extract_functions.php functions-sexp < php_manual_en.json > result.el +``` + +### Data + +A pattern for grouping function modules by function-id is written in `data/module_id_prefixes.php`. + + * All entries are combined as prefix matching patterns + * The meanings of `.` and `\.` (matches) in the regular expression are swapped + * `\.` matches any one character + * `.` matches only `"."` + * An alphanumeric-terminated entry requires an exact match + * Other entries require a [`\b`(word boundary)](https://www.php.net/manual/regexp.reference.escape.php) at the end + +```php +return [ + 'apache' => [ + 'function.apache-', // matches all "apache-" prefixed IDs + 'function.virtual', // matches only "function.virtual" + ], + 'bcmath' => [ + 'function.bc\.+', // matches "function.bcadd", "function.bccomp", ...etc + ], +``` diff --git a/script/data/module_id_prefixes.php b/script/data/module_id_prefixes.php new file mode 100644 index 0000000000..cef2a14a41 --- /dev/null +++ b/script/data/module_id_prefixes.php @@ -0,0 +1,846 @@ +<?php + +/** + * Classify function modules by function-id + * + * @copyright 2022 Friends of Emacs-PHP development + * @author USAMI Kenta <tad...@zonu.me> + * @license FSFAP https://spdx.org/licenses/FSFAP.html + */ + +// Copying and distribution of this file, with or without modification, +// are permitted in any medium without royalty provided the copyright +// notice and this notice are preserved. This file is offered as-is, +// without any warranty. + +return [ + 'apache' => [ + 'function.apache-', + 'function.virtual', + ], + 'apcu' => [ + 'function.apcu-', + ], + 'bcmath' => [ + 'function.bc\.+', + ], + 'bzip2' => [ + 'function.bz\.+', + ], + 'calendar' => [ + 'function.cal-', + 'function.easter-date', + 'function.easter-days', + 'function.frenchtojd', + 'function.gregoriantojd', + 'function.jddayofweek', + 'function.jdmonthname', + 'function.jdtofrench', + 'function.jdtogregorian', + 'function.jdtojewish', + 'function.jdtojulian', + 'function.jdtounix', + 'function.jewishtojd', + 'function.unixtojd', + ], + 'commonmark' => [ + 'function.commonmark-', + ], + 'com_dotnet' => [ + 'function.com-', + 'function.variant-', + ], + 'componere' => [ + 'componere.', + ], + 'core' => [ + 'function.abs', + 'function.acos', + 'function.acosh', + 'function.addcslashes', + 'function.addslashes', + 'function.array-', + 'function.arsort', + 'function.asin', + 'function.asinh', + 'function.asort', + 'function.assert-options', + 'function.atan', + 'function.atan2', + 'function.atanh', + 'function.base-convert', + 'function.base64-', + 'function.basename', + 'function.bin2hex', + 'function.bindec', + 'function.boolval', + 'function.call-user-func', + 'function.call-user-func-array', + 'function.ceil', + 'function.chdir', + 'function.checkdate', + 'function.checkdnsrr', + 'function.chgrp', + 'function.chmod', + 'function.chop', + 'function.chown', + 'function.chr', + 'function.chroot', + 'function.chunk-split', + 'function.class-alias', + 'function.class-exists', + 'function.class-implements', + 'function.class-parents', + 'function.class-uses', + 'function.clearstatcache', + 'function.cli-', + 'function.closedir', + 'function.closelog', + 'function.compact', + 'function.connection-', + 'function.constant', + 'function.convert-cyr-string', + 'function.convert-uudecode', + 'function.convert-uuencode', + 'function.copy', + 'function.cos', + 'function.cosh', + 'function.count', + 'function.count-chars', + 'function.crc32', + 'function.create-function', + 'function.crypt', + 'function.ctype-', + 'function.current', + 'function.date', + 'function.date-', + 'function.debug-', + 'function.decbin', + 'function.dechex', + 'function.decoct', + 'function.define', + 'function.defined', + 'function.deg2rad', + 'function.delete', + 'function.die', + 'function.dir', + 'function.dirname', + 'function.disk-', + 'function.diskfreespace', + 'function.dl', + 'function.dns-check-record', + 'function.dns-get-mx', + 'function.dns-get-record', + 'function.doubleval', + 'function.each', + 'function.enum-exists', + 'function.error-', + 'function.escapeshellarg', + 'function.escapeshellcmd', + 'function.eval', + 'function.exec', + 'function.exit', + 'function.exp', + 'function.explode', + 'function.expm1', + 'function.extension-loaded', + 'function.extract', + 'function.fastcgi-', + 'function.fclose', + 'function.fdatasync', + 'function.fdiv', + 'function.feof', + 'function.fflush', + 'function.fgetc', + 'function.fgetcsv', + 'function.fgets', + 'function.fgetss', + 'function.file', + 'function.file\.+', + 'function.filter-', + 'function.finfo-', + 'function.floatval', + 'function.flock', + 'function.floor', + 'function.flush', + 'function.fmod', + 'function.fnmatch', + 'function.fopen', + 'function.forward-static-call', + 'function.forward-static-call-array', + 'function.fpassthru', + 'function.fprintf', + 'function.fputcsv', + 'function.fputs', + 'function.fread', + 'function.fscanf', + 'function.fseek', + 'function.fsockopen', + 'function.fstat', + 'function.fsync', + 'function.ftell', + 'function.ftruncate', + 'function.func-get-arg', + 'function.func-get-args', + 'function.func-num-args', + 'function.function-exists', + 'function.fwrite', + 'function.gc-', + 'function.get-', + 'function.getallheaders', + 'function.getcwd', + 'function.getdate', + 'function.getenv', + 'function.gethostbyaddr', + 'function.gethostbyname', + 'function.gethostbynamel', + 'function.gethostname', + 'function.getlastmod', + 'function.getmxrr', + 'function.getmygid', + 'function.getmyinode', + 'function.getmypid', + 'function.getmyuid', + 'function.getopt', + 'function.getprotobyname', + 'function.getprotobynumber', + 'function.getrandmax', + 'function.getrusage', + 'function.getservbyname', + 'function.getservbyport', + 'function.gettimeofday', + 'function.gettype', + 'function.glob', + 'function.gmdate', + 'function.gmmktime', + 'function.gmstrftime', + 'function.hash', + 'function.hash-', + 'function.header', + 'function.header-register-callback', + 'function.header-remove', + 'function.headers-list', + 'function.headers-sent', + 'function.hebrev', + 'function.hebrevc', + 'function.hex2bin', + 'function.hexdec', + 'function.highlight-file', + 'function.highlight-string', + 'function.hrtime', + 'function.html-entity-decode', + 'function.htmlentities', + 'function.htmlspecialchars', + 'function.htmlspecialchars-decode', + 'function.http-build-query', + 'function.http-response-code', + 'function.hypot', + 'function.idate', + 'function.ignore-user-abort', + 'function.implode', + 'function.in-array', + 'function.inet-', + 'function.ini-', + 'function.intdiv', + 'function.interface-exists', + 'function.intval', + 'function.ip2long', + 'function.is-a', + 'function.is-array', + 'function.is-bool', + 'function.is-callable', + 'function.is-countable', + 'function.is-dir', + 'function.is-double', + 'function.is-executable', + 'function.is-file', + 'function.is-finite', + 'function.is-float', + 'function.is-infinite', + 'function.is-int', + 'function.is-integer', + 'function.is-iterable', + 'function.is-link', + 'function.is-long', + 'function.is-nan', + 'function.is-null', + 'function.is-numeric', + 'function.is-object', + 'function.is-readable', + 'function.is-resource', + 'function.is-scalar', + 'function.is-string', + 'function.is-subclass-of', + 'function.is-uploaded-file', + 'function.is-writable', + 'function.is-writeable', + 'function.iterator-', + 'function.join', + 'function.json-', + 'function.juliantojd', + 'function.key', + 'function.key-exists', + 'function.krsort', + 'function.ksort', + 'function.lcfirst', + 'function.lcg-value', + 'function.lchgrp', + 'function.lchown', + 'function.levenshtein', + 'function.link', + 'function.linkinfo', + 'function.list', + 'function.localeconv', + 'function.localtime', + 'function.log', + 'function.log10', + 'function.log1p', + 'function.long2ip', + 'function.lstat', + 'function.ltrim', + 'function.mail', + 'function.max', + 'function.md5', + 'function.md5-file', + 'function.memory-', + 'function.metaphone', + 'function.method-exists', + 'function.microtime', + 'function.mime-content-type', + 'function.min', + 'function.mkdir', + 'function.mktime', + 'function.money-format', + 'function.move-uploaded-file', + 'function.mt-', + 'function.natcasesort', + 'function.natsort', + 'function.net-get-interfaces', + 'function.next', + 'function.nl-langinfo', + 'function.nl2br', + 'function.number-format', + 'function.ob-', + 'function.octdec', + 'function.opcache-', + 'function.opendir', + 'function.openlog', + 'function.ord', + 'function.output-', + 'function.pack', + 'function.parse-ini-', + 'function.parse-str', + 'function.parse-url', + 'function.passthru', + 'function.password-', + 'function.pathinfo', + 'function.pclose', + 'function.pfsockopen', + 'function.php-ini-', + 'function.php-sapi-name', + 'function.php-strip-whitespace', + 'function.php-uname', + 'function.phpcredits', + 'function.phpdbg-', + 'function.phpinfo', + 'function.phpversion', + 'function.pi', + 'function.popen', + 'function.pos', + 'function.pow', + 'function.preg-', + 'function.prev', + 'function.print-r', + 'function.printf', + 'function.proc-', + 'function.property-exists', + 'function.putenv', + 'function.quoted-printable-', + 'function.quotemeta', + 'function.rad2deg', + 'function.rand', + 'function.random-', + 'function.range', + 'function.rawurldecode', + 'function.rawurlencode', + 'function.readdir', + 'function.readfile', + 'function.readlink', + 'function.realpath', + 'function.realpath-', + 'function.register-shutdown-function', + 'function.register-tick-function', + 'function.rename', + 'function.reset', + 'function.restore-', + 'function.rewind', + 'function.rewinddir', + 'function.rmdir', + 'function.round', + 'function.rsort', + 'function.rtrim', + 'function.sapi-', + 'function.scandir', + 'function.seaslog-get-author', + 'function.seaslog-get-version', + 'function.serialize', + 'function.session-', + 'function.set-', + 'function.setcookie', + 'function.setlocale', + 'function.setrawcookie', + 'function.settype', + 'function.sha1', + 'function.sha1-file', + 'function.shell-exec', + 'function.show-source', + 'function.shuffle', + 'function.similar-text', + 'function.sin', + 'function.sinh', + 'function.sizeof', + 'function.sleep', + 'function.sort', + 'function.soundex', + 'function.spl-', + 'function.sprintf', + 'function.sqrt', + 'function.srand', + 'function.sscanf', + 'function.stat', + 'function.str-', + 'function.strcasecmp', + 'function.strchr', + 'function.strcmp', + 'function.strcoll', + 'function.strcspn', + 'function.stream-', + 'function.strftime', + 'function.strip-tags', + 'function.stripcslashes', + 'function.stripos', + 'function.stripslashes', + 'function.stristr', + 'function.strlen', + 'function.strnatcasecmp', + 'function.strnatcmp', + 'function.strncasecmp', + 'function.strncmp', + 'function.strpbrk', + 'function.strpos', + 'function.strptime', + 'function.strrchr', + 'function.strrev', + 'function.strripos', + 'function.strrpos', + 'function.strspn', + 'function.strstr', + 'function.strtok', + 'function.strtolower', + 'function.strtotime', + 'function.strtoupper', + 'function.strtr', + 'function.strval', + 'function.substr', + 'function.substr-compare', + 'function.substr-count', + 'function.substr-replace', + 'function.symlink', + 'function.sys-get-temp-dir', + 'function.sys-getloadavg', + 'function.syslog', + 'function.system', + 'function.tan', + 'function.tanh', + 'function.tempnam', + 'function.time', + 'function.time-', + 'function.timezone-', + 'function.tmpfile', + 'function.token-get-all', + 'function.token-name', + 'function.touch', + 'function.trait-exists', + 'function.trigger-error', + 'function.trim', + 'function.uasort', + 'function.ucfirst', + 'function.ucwords', + 'function.uksort', + 'function.umask', + 'function.uniqid', + 'function.unlink', + 'function.unpack', + 'function.unregister-tick-function', + 'function.unserialize', + 'function.unset', + 'function.urldecode', + 'function.urlencode', + 'function.user-error', + 'function.usleep', + 'function.usort', + 'function.var-dump', + 'function.var-export', + 'function.version-compare', + 'function.vfprintf', + 'function.vprintf', + 'function.vsprintf', + 'function.wordwrap', + 'function.zend-thread-id', + 'function.zend-version', + 'pdo.getavailabledrivers', + ], + 'cubrid' => [ + 'function.cubrid-', + ], + 'curl' => [ + 'curlfile.', + 'function.curl-', + ], + 'dba' => [ + 'function.dba-', + ], + 'dbase' => [ + 'function.dbase-', + ], + 'dio' => [ + 'function.dio-', + ], + 'eio' => [ + 'function.eio-', + ], + 'enchant' => [ + 'function.enchant-', + ], + 'exif' => [ + 'function.exif-', + 'function.read-exif-', + ], + 'expect' => [ + 'function.expect-', + ], + 'fann' => [ + 'function.fann-', + ], + 'fdf' => [ + 'function.fdf-', + ], + 'fpm' => [ + 'function.fpm-' + ], + 'ftp' => [ + 'function.ftp-', + ], + 'gearman' => [ + 'gearmanclient.', + 'gearmantask.', + ], + 'gettext' => [ + 'function.bind-textdomain-codeset', + 'function.bindtextdomain', + 'function.dcgettext', + 'function.dcngettext', + 'function.dgettext', + 'function.dngettext', + 'function.gettext', + 'function.ngettext', + 'function.textdomain', + ], + 'gd' => [ + 'function.gd-', + 'function.getimagesize', + 'function.getimagesizefromstring', + 'function.image\.+', + 'function.iptcembed', + 'function.iptcparse', + ], + 'gmp' => [ + 'function.gmp-', + ], + 'geoip' => [ + 'function.geoip-', + ], + 'gnupg' => [ + 'function.gnupg-', + ], + 'ibase' => [ + 'function.fbird-', + 'function.ibase-', + ], + 'ibm_db2' => [ + 'function.db2-', + ], + 'iconv' => [ + 'function.iconv', + 'function.iconv-', + ], + 'igbinary' => [ + 'function.igbinary-', + ], + 'imap' => [ + 'function.imap-', + ], + 'inotify' => [ + 'function.inotify-', + ], + 'intl' => [ + 'collator.', + 'function.grapheme-', + 'function.idn-', + 'function.intl-', + 'intlcalendar.', + 'intldateformatter.', + 'intltimezone.', + 'locale.', + 'messageformatter.', + 'normalizer.', + 'numberformatter.', + 'resourcebundle.', + 'transliterator.', + ], + 'language' => [ + 'function.array', + 'function.assert', + 'function.echo', + 'function.empty', + 'function.halt-compiler', + 'function.isset', + 'function.print', + ], + 'ldap' => [ + 'function.ldap-', + ], + 'libxml' => [ + 'function.libxml-', + ], + 'lzf' => [ + 'function.lzf-', + ], + 'mailparse' => [ + 'function.mailparse-', + ], + 'mbstring' => [ + 'function.mb-', + ], + 'memcache' => [ + 'function.memcache-', + ], + 'mongodb' => [ + 'function.mongodb.', + ], + 'mqseries' => [ + 'function.mqseries-', + ], + 'mysqli' => [ + 'mysqli-', + 'mysqli.', + 'function.mysqli-', + ], + 'mysql-obsolete' => [ + 'function.mysql-', + ], + 'oauth' => [ + 'function.oauth-', + ], + 'obsolete_7' => [ + 'function.autoload', + 'function.end', + 'function.ezmlm-hash', + 'function.is-real', + 'function.jpeg2wbmp', + 'function.mcrypt-', + 'function.mdecrypt-', + 'function.png2wbmp', + 'function.wddx-', + ], + 'obsolete_8' => [ + 'function.mhash', + 'function.mhash-', + 'function.utf8-decode', + 'function.utf8-encode', + 'function.zip-', + ], + 'oci8' => [ + 'function.oci\.+', + ], + 'odbc' => [ + 'function.odbc-', + ], + 'openal' => [ + 'function.openal-', + ], + 'openssl' => [ + 'function.openssl-', + ], + 'parallel' => [ + 'parallel.', + ], + 'pcntl' => [ + 'function.pcntl-', + ], + 'pgsql' => [ + 'function.pg-', + ], + 'posix' => [ + 'function.posix-', + ], + 'ps' => [ + 'function.ps-', + ], + 'pspell' => [ + 'function.pspell-', + ], + 'radius' => [ + 'function.radius-', + ], + 'rar' => [ + 'function.rar-', + 'rararchive.', + ], + 'readline' => [ + 'function.readline', + 'function.readline-', + ], + 'recode' => [ + 'function.recode', + 'function.recode-', + ], + 'runkit7' => [ + 'function.runkit7-', + ], + 'rpminfo' => [ + 'function.rpm\.+', + ], + 'rrd' => [ + 'function.rrd-', + 'function.rrdc-', + ], + 'scoutapm' => [ + 'function.scoutapm-', + ], + 'shmop' => [ + 'function.shmop-', + ], + 'simplexml' => [ + 'function.dom-import-simplexml', + 'function.simplexml-', + ], + 'sqlsrv' => [ + 'function.sqlsrv-', + ], + 'smnp' => [ + 'function.snmp-', + 'function.snmp2-', + 'function.snmp3-', + 'function.snmp\.+', + ], + 'sodium' => [ + 'function.sodium-', + ], + 'soap' => [ + 'function.is-soap-fault', + 'function.use-soap-error-handler', + ], + 'socket' => [ + 'function.socket-', + ], + 'solr' => [ + 'function.solr-', + ], + 'ssdeep' => [ + 'function.ssdeep-', + ], + 'ssh2' => [ + 'function.ssh2-', + ], + 'stats' => [ + 'function.stats-', + ], + 'stomp' => [ + 'function.stomp-', + 'stomp.', + ], + 'svn' => [ + 'function.svn-', + ], + 'swoole' => [ + 'function.swoole-', + 'swoole-server.', + ], + 'sysvshm' => [ + 'function.ftok', + 'function.sem-', + 'function.shm-', + 'function.msg-get-queue', + 'function.msg-queue-exists', + 'function.msg-receive', + 'function.msg-remove-queue', + 'function.msg-send', + 'function.msg-set-queue', + 'function.msg-stat-queue', + ], + 'taint' => [ + 'function.is-tainted', + 'function.taint', + 'function.untaint', + ], + 'tcpwrap' => [ + 'function.tcpwrap-', + ], + 'tidy' => [ + 'function.tidy-', + 'tidy.', + ], + 'trader' => [ + 'function.trader-', + ], + 'ui' => [ + 'function.ui-', + ], + 'uopz' => [ + 'function.uopz-', + ], + 'var_representation' => [ + 'function.var-representation', + ], + 'win32service' => [ + 'function.win32-', + ], + 'wincache' => [ + 'function.wincache-', + ], + 'xattr' => [ + 'function.xattr-', + ], + 'xdiff' => [ + 'function.xdiff-', + ], + 'xhprof' => [ + 'function.xhprof-', + ], + 'xml' => [ + 'function.xml-', + ], + 'xmlrpc' => [ + 'function.xmlrpc-', + ], + 'xmlwriter' => [ + 'xmlwriter.', + ], + 'yaml' => [ + 'function.yaml-', + ], + 'yaz' => [ + 'function.yaz-', + ], + 'zlib' => [ + 'function.deflate-', + 'function.gz\.+', + 'function.inflate-', + 'function.readgzfile', + 'function.zlib-', + ], + 'zookeeper' => [ + 'function.zookeeper-', + ] +]; diff --git a/script/extract_functions.php b/script/extract_functions.php new file mode 100755 index 0000000000..ae3471710e --- /dev/null +++ b/script/extract_functions.php @@ -0,0 +1,111 @@ +#!/usr/bin/env php +<?php + +/** + * Extract PHP Functions + * + * @copyright 2022 Friends of Emacs-PHP development + * @author USAMI Kenta <tad...@zonu.me> + * @license FSFAP https://spdx.org/licenses/FSFAP.html + */ + +// Copying and distribution of this file, with or without modification, +// are permitted in any medium without royalty provided the copyright +// notice and this notice are preserved. This file is offered as-is, +// without any warranty. + +declare(strict_types=1); + +error_reporting(E_ALL); + +$functions = json_decode(stream_get_contents(STDIN), true); + +$command = $argv[0]; +$subcommand = $argv[1] ?? null; + +$subcommands = [ + 'count' => function (array $extracted) { + echo json_encode(array_map(count(...), $extracted), JSON_PRETTY_PRINT), PHP_EOL; + }, + 'modules' => function (array $extracted) { + echo implode(PHP_EOL, array_keys($extracted)), PHP_EOL; + }, + 'functions' => function (array $extracted) { + echo json_encode(array_map(array_keys(...), $extracted), JSON_PRETTY_PRINT), PHP_EOL; + }, + 'functions-sexp' => function (array $extracted) { + echo " '("; + foreach ($extracted as $module => $functions) { + echo "\n ({$module}"; + // ksort($functions); + foreach ($functions as $name => $function) { + $escaped_name = strtr($name, ['\\' => '\\\\']); + echo "\n \"{$escaped_name}\""; + } + echo ")"; + } + echo ")"; + }, +]; + +if (!isset($subcommands[$subcommand])) { + $json_url = 'http://doc.php.net/downloads/json/php_manual_en.json'; + fwrite(STDERR, implode(PHP_EOL, [ + "[Extract PHP Functions]\n", + "This script extract PHP function names from <{$json_url}>.\n", + "Usage:", + "\t{$command} count < php_manual_en.json", + "\t{$command} modules < php_manual_en.json", + "\t{$command} functions < php_manual_en.json > result.json", + "\t{$command} functions-sexp < php_manual_en.json > result.el", + '', + ])); + exit(1); +} + +$module_id_patterns = array_map( + fn($allowlist) => '/\A(?:' . implode('|', array_map( + fn($preg) => strtr($preg, ['\.' => '.', '.' => '\.']) . + (preg_match('/[0-9a-z]\z/', $preg) ? '\z' : '\b'), + $allowlist) + ) . ')/', + include __DIR__ . '/data/module_id_prefixes.php' +); + +$extracted = []; + +foreach ($functions as $name => $function) { + if (str_contains($name, '::')) { + continue; + } + + $module = get_module($function, $module_id_patterns); + + if ($module === null) { + fwrite(STDERR, "{$name}: {$function['id']}\n"); + } else { + $extracted[$module][$name] = $function; + } +} + +ksort($extracted); +array_walk($extracted, function (&$functions) { + ksort($functions); +}); + +call_user_func($subcommands[$subcommand], $extracted); + +/** + * @param array{id: non-empty-string} $function + * @param array<non-empty-string, non-empty-string> $function + */ +function get_module(array $function, array $patterns): ?string +{ + foreach ($patterns as $module => $pattern) { + if (preg_match($pattern, $function['id'])) { + return $module; + } + } + + return null; +} diff --git a/script/module_id_prefixes.php b/script/module_id_prefixes.php new file mode 100644 index 0000000000..4809a9d1cc --- /dev/null +++ b/script/module_id_prefixes.php @@ -0,0 +1,806 @@ +<?php + +return [ + 'apache' => [ + 'function.apache-', + 'function.virtual', + ], + 'apcu' => [ + 'function.apcu-', + ], + 'bcmath' => [ + 'function.bc\.+', + ], + 'bzip2' => [ + 'function.bz\.+', + ], + 'commonmark' => [ + 'function.commonmark-', + ], + 'com_dotnet' => [ + 'function.com-', + 'function.variant-', + ], + 'componere' => [ + 'componere.', + ], + 'core' => [ + 'function.abs', + 'function.acos', + 'function.acosh', + 'function.addcslashes', + 'function.addslashes', + 'function.array-', + 'function.arsort', + 'function.asin', + 'function.asinh', + 'function.asort', + 'function.atan', + 'function.atan2', + 'function.atanh', + 'function.base-convert', + 'function.base64-', + 'function.basename', + 'function.bin2hex', + 'function.bindec', + 'function.boolval', + 'function.cal-', + 'function.call-user-func', + 'function.call-user-func-array', + 'function.ceil', + 'function.chdir', + 'function.checkdate', + 'function.checkdnsrr', + 'function.chgrp', + 'function.chmod', + 'function.chop', + 'function.chown', + 'function.chr', + 'function.chroot', + 'function.chunk-split', + 'function.class-alias', + 'function.class-exists', + 'function.class-implements', + 'function.class-parents', + 'function.class-uses', + 'function.clearstatcache', + 'function.cli-', + 'function.closedir', + 'function.closelog', + 'function.compact', + 'function.connection-', + 'function.constant', + 'function.convert-cyr-string', + 'function.convert-uudecode', + 'function.convert-uuencode', + 'function.copy', + 'function.cos', + 'function.cosh', + 'function.count', + 'function.count-chars', + 'function.crc32', + 'function.create-function', + 'function.crypt', + 'function.ctype-', + 'function.current', + 'function.date', + 'function.debug-', + 'function.decbin', + 'function.dechex', + 'function.decoct', + 'function.define', + 'function.defined', + 'function.deg2rad', + 'function.delete', + 'function.die', + 'function.dir', + 'function.dirname', + 'function.disk-', + 'function.diskfreespace', + 'function.dl', + 'function.dns-check-record', + 'function.dns-get-mx', + 'function.dns-get-record', + 'function.dom-import-simplexml', + 'function.doubleval', + 'function.each', + 'function.easter-date', + 'function.easter-days', + 'function.enum-exists', + 'function.error-', + 'function.escapeshellarg', + 'function.escapeshellcmd', + 'function.eval', + 'function.exec', + 'function.exit', + 'function.exp', + 'function.explode', + 'function.expm1', + 'function.extension-loaded', + 'function.extract', + 'function.fastcgi-', + 'function.fclose', + 'function.fdatasync', + 'function.fdiv', + 'function.feof', + 'function.fflush', + 'function.fgetc', + 'function.fgetcsv', + 'function.fgets', + 'function.fgetss', + 'function.file', + 'function.file\.+', + 'function.filter-', + 'function.finfo-', + 'function.floatval', + 'function.flock', + 'function.floor', + 'function.flush', + 'function.fmod', + 'function.fnmatch', + 'function.fopen', + 'function.forward-static-call', + 'function.forward-static-call-array', + 'function.fpassthru', + 'function.fprintf', + 'function.fputcsv', + 'function.fputs', + 'function.fread', + 'function.frenchtojd', + 'function.fscanf', + 'function.fseek', + 'function.fsockopen', + 'function.fstat', + 'function.fsync', + 'function.ftell', + 'function.ftruncate', + 'function.func-get-arg', + 'function.func-get-args', + 'function.func-num-args', + 'function.function-exists', + 'function.fwrite', + 'function.gc-', + 'function.get-', + 'function.getallheaders', + 'function.getcwd', + 'function.getdate', + 'function.getenv', + 'function.gethostbyaddr', + 'function.gethostbyname', + 'function.gethostbynamel', + 'function.gethostname', + 'function.getlastmod', + 'function.getmxrr', + 'function.getmygid', + 'function.getmyinode', + 'function.getmypid', + 'function.getmyuid', + 'function.getopt', + 'function.getprotobyname', + 'function.getprotobynumber', + 'function.getrandmax', + 'function.getrusage', + 'function.getservbyname', + 'function.getservbyport', + 'function.gettimeofday', + 'function.gettype', + 'function.glob', + 'function.gmdate', + 'function.gmmktime', + 'function.gmstrftime', + 'function.gregoriantojd', + 'function.hash', + 'function.header', + 'function.header-register-callback', + 'function.header-remove', + 'function.headers-list', + 'function.headers-sent', + 'function.hebrev', + 'function.hebrevc', + 'function.hex2bin', + 'function.hexdec', + 'function.highlight-file', + 'function.highlight-string', + 'function.hrtime', + 'function.html-entity-decode', + 'function.htmlentities', + 'function.htmlspecialchars', + 'function.htmlspecialchars-decode', + 'function.http-build-query', + 'function.http-response-code', + 'function.hypot', + 'function.idate', + 'function.ignore-user-abort', + 'function.implode', + 'function.in-array', + 'function.inet-', + 'function.ini-', + 'function.intdiv', + 'function.interface-exists', + 'function.intval', + 'function.ip2long', + 'function.is-a', + 'function.is-array', + 'function.is-bool', + 'function.is-callable', + 'function.is-countable', + 'function.is-dir', + 'function.is-double', + 'function.is-executable', + 'function.is-file', + 'function.is-finite', + 'function.is-float', + 'function.is-infinite', + 'function.is-int', + 'function.is-integer', + 'function.is-iterable', + 'function.is-link', + 'function.is-long', + 'function.is-nan', + 'function.is-null', + 'function.is-numeric', + 'function.is-object', + 'function.is-readable', + 'function.is-resource', + 'function.is-scalar', + 'function.is-string', + 'function.is-subclass-of', + 'function.is-uploaded-file', + 'function.is-writable', + 'function.is-writeable', + 'function.iterator-', + 'function.jddayofweek', + 'function.jdmonthname', + 'function.jdtofrench', + 'function.jdtogregorian', + 'function.jdtojewish', + 'function.jdtojulian', + 'function.jdtounix', + 'function.jewishtojd', + 'function.join', + 'function.json-', + 'function.juliantojd', + 'function.key', + 'function.key-exists', + 'function.krsort', + 'function.ksort', + 'function.lcfirst', + 'function.lcg-value', + 'function.lchgrp', + 'function.lchown', + 'function.levenshtein', + 'function.libxml-', + 'function.link', + 'function.linkinfo', + 'function.list', + 'function.localeconv', + 'function.localtime', + 'function.log', + 'function.log10', + 'function.log1p', + 'function.long2ip', + 'function.lstat', + 'function.ltrim', + 'function.mail', + 'function.max', + 'function.md5', + 'function.md5-file', + 'function.memory-', + 'function.metaphone', + 'function.method-exists', + 'function.microtime', + 'function.mime-content-type', + 'function.min', + 'function.mkdir', + 'function.mktime', + 'function.money-format', + 'function.move-uploaded-file', + 'function.mt-', + 'function.natcasesort', + 'function.natsort', + 'function.net-get-interfaces', + 'function.next', + 'function.nl-langinfo', + 'function.nl2br', + 'function.number-format', + 'function.ob-', + 'function.octdec', + 'function.opcache-', + 'function.opendir', + 'function.openlog', + 'function.ord', + 'function.output-', + 'function.pack', + 'function.parse-ini-', + 'function.parse-str', + 'function.parse-url', + 'function.passthru', + 'function.password-', + 'function.pathinfo', + 'function.pclose', + 'function.pfsockopen', + 'function.php-ini-', + 'function.php-sapi-name', + 'function.php-strip-whitespace', + 'function.php-uname', + 'function.phpcredits', + 'function.phpdbg-', + 'function.phpinfo', + 'function.phpversion', + 'function.pi', + 'function.popen', + 'function.pos', + 'function.posix-', + 'function.pow', + 'function.preg-', + 'function.prev', + 'function.print-r', + 'function.printf', + 'function.proc-', + 'function.property-exists', + 'function.putenv', + 'function.quoted-printable-', + 'function.quotemeta', + 'function.rad2deg', + 'function.rand', + 'function.random-', + 'function.range', + 'function.rawurldecode', + 'function.rawurlencode', + 'function.readdir', + 'function.readfile', + 'function.readlink', + 'function.realpath', + 'function.register-shutdown-function', + 'function.register-tick-function', + 'function.rename', + 'function.reset', + 'function.restore-', + 'function.rewind', + 'function.rewinddir', + 'function.rmdir', + 'function.round', + 'function.rsort', + 'function.rtrim', + 'function.sapi-', + 'function.scandir', + 'function.seaslog-get-author', + 'function.seaslog-get-version', + 'function.serialize', + 'function.session-', + 'function.set-', + 'function.setcookie', + 'function.setlocale', + 'function.setrawcookie', + 'function.settype', + 'function.sha1', + 'function.sha1-file', + 'function.shell-exec', + 'function.show-source', + 'function.shuffle', + 'function.similar-text', + 'function.simplexml-', + 'function.sin', + 'function.sinh', + 'function.sizeof', + 'function.sleep', + 'function.socket-', + 'function.sodium-', + 'function.sort', + 'function.soundex', + 'function.spl-', + 'function.sprintf', + 'function.sqrt', + 'function.srand', + 'function.sscanf', + 'function.stat', + 'function.str-', + 'function.strcasecmp', + 'function.strchr', + 'function.strcmp', + 'function.strcoll', + 'function.strcspn', + 'function.stream-', + 'function.strftime', + 'function.strip-tags', + 'function.stripcslashes', + 'function.stripos', + 'function.stripslashes', + 'function.stristr', + 'function.strlen', + 'function.strnatcasecmp', + 'function.strnatcmp', + 'function.strncasecmp', + 'function.strncmp', + 'function.strpbrk', + 'function.strpos', + 'function.strptime', + 'function.strrchr', + 'function.strrev', + 'function.strripos', + 'function.strrpos', + 'function.strspn', + 'function.strstr', + 'function.strtok', + 'function.strtolower', + 'function.strtotime', + 'function.strtoupper', + 'function.strtr', + 'function.strval', + 'function.substr', + 'function.substr-compare', + 'function.substr-count', + 'function.substr-replace', + 'function.symlink', + 'function.sys-get-temp-dir', + 'function.sys-getloadavg', + 'function.syslog', + 'function.system', + 'function.tan', + 'function.tanh', + 'function.tempnam', + 'function.time', + 'function.timezone-', + 'function.tmpfile', + 'function.token-get-all', + 'function.token-name', + 'function.touch', + 'function.trait-exists', + 'function.trigger-error', + 'function.trim', + 'function.uasort', + 'function.ucfirst', + 'function.ucwords', + 'function.uksort', + 'function.umask', + 'function.uniqid', + 'function.unixtojd', + 'function.unlink', + 'function.unpack', + 'function.unregister-tick-function', + 'function.unserialize', + 'function.unset', + 'function.urldecode', + 'function.urlencode', + 'function.user-error', + 'function.usleep', + 'function.usort', + 'function.var-dump', + 'function.var-export', + 'function.version-compare', + 'function.vfprintf', + 'function.vprintf', + 'function.vsprintf', + 'function.wordwrap', + 'function.xml-', + 'function.zend-thread-id', + 'function.zend-version', + 'pdo.getavailabledrivers', + 'xmlwriter.', + ], + 'cubrid' => [ + 'function.cubrid-', + ], + 'curl' => [ + 'curlfile.', + 'function.curl-', + ], + 'dba' => [ + 'function.dba-', + ], + 'dbase' => [ + 'function.dbase-', + ], + 'dio' => [ + 'function.dio-', + ], + 'eio' => [ + 'function.eio-', + ], + 'enchant' => [ + 'function.enchant-', + ], + 'exif' => [ + 'function.exif-', + 'function.read-exif-', + ], + 'expect' => [ + 'function.expect-', + ], + 'fann' => [ + 'function.fann-', + ], + 'fdf' => [ + 'function.fdf-', + ], + 'fpm' => [ + 'function.fpm-' + ], + 'ftp' => [ + 'function.ftp-', + ], + 'gearman' => [ + 'gearmanclient.', + 'gearmantask.', + ], + 'gettext' => [ + 'function.bind-textdomain-codeset', + 'function.bindtextdomain', + 'function.dcgettext', + 'function.dcngettext', + 'function.dgettext', + 'function.dngettext', + 'function.gettext', + 'function.ngettext', + 'function.textdomain', + ], + 'gd' => [ + 'function.gd-', + 'function.getimagesize', + 'function.getimagesizefromstring', + 'function.image\.+', + 'function.iptcembed', + 'function.iptcparse', + ], + 'gmp' => [ + 'function.gmp-', + ], + 'geoip' => [ + 'function.geoip-', + ], + 'gnupg' => [ + 'function.gnupg-', + ], + 'ibase' => [ + 'function.fbird-', + 'function.ibase-', + ], + 'ibm_db2' => [ + 'function.db2-', + ], + 'iconv' => [ + 'function.iconv', + ], + 'igbinary' => [ + 'function.igbinary-', + ], + 'imap' => [ + 'function.imap-', + ], + 'inotify' => [ + 'function.inotify-', + ], + 'intl' => [ + 'collator.', + 'function.grapheme-', + 'function.idn-', + 'function.intl-', + 'intlcalendar.', + 'intldateformatter.', + 'intltimezone.', + 'locale.', + 'messageformatter.', + 'normalizer.', + 'numberformatter.', + 'resourcebundle.', + 'transliterator.', + ], + 'language' => [ + 'function.array\z', + 'function.assert', + 'function.echo', + 'function.empty', + 'function.halt-compiler', + 'function.isset', + 'function.print\z', + ], + 'ldap' => [ + 'function.ldap-', + ], + 'lzf' => [ + 'function.lzf-', + ], + 'mailparse' => [ + 'function.mailparse-', + ], + 'mbstring' => [ + 'function.mb-', + ], + 'memcache' => [ + 'function.memcache-', + ], + 'mongodb' => [ + 'function.mongodb.', + ], + 'mqseries' => [ + 'function.mqseries-', + ], + 'mysqli' => [ + 'mysqli-', + 'mysqli.', + 'function.mysqli-', + ], + 'mysql-obsolete' => [ + 'function.mysql-', + ], + 'oauth' => [ + 'function.oauth-', + ], + 'obsolete_7' => [ + 'function.autoload', + 'function.end', + 'function.ezmlm-hash', + 'function.is-real', + 'function.jpeg2wbmp', + 'function.mcrypt-', + 'function.mdecrypt-', + 'function.png2wbmp', + 'function.wddx-', + ], + 'obsolete_8' => [ + 'function.mhash', + 'function.utf8-decode', + 'function.utf8-encode', + 'function.zip-', + ], + 'oci8' => [ + 'function.oci\.+', + ], + 'odbc' => [ + 'function.odbc-', + ], + 'openal' => [ + 'function.openal-', + ], + 'openssl' => [ + 'function.openssl-', + ], + 'parallel' => [ + 'parallel.', + ], + 'pcntl' => [ + 'function.pcntl-', + ], + 'pgsql' => [ + 'function.pg-', + ], + 'ps' => [ + 'function.ps-', + ], + 'pspell' => [ + 'function.pspell-', + ], + 'radius' => [ + 'function.radius-', + ], + 'rar' => [ + 'function.rar-', + 'rararchive.', + ], + 'readline' => [ + 'function.readline', + ], + 'recode' => [ + 'function.recode', + ], + 'runkit7' => [ + 'function.runkit7-', + ], + 'rpminfo' => [ + 'function.rpm\.+', + ], + 'rrd' => [ + 'function.rrd-', + 'function.rrdc-', + ], + 'scoutapm' => [ + 'function.scoutapm-', + ], + 'shmop' => [ + 'function.shmop-', + ], + 'sqlsrv' => [ + 'function.sqlsrv-', + ], + 'smnp' => [ + 'function.snmp-', + 'function.snmp2-', + 'function.snmp3-', + 'function.snmp\.+', + ], + 'soap' => [ + 'function.is-soap-fault', + 'function.use-soap-error-handler', + ], + 'solr' => [ + 'function.solr-', + ], + 'ssdeep' => [ + 'function.ssdeep-', + ], + 'ssh2' => [ + 'function.ssh2-', + ], + 'stats' => [ + 'function.stats-', + ], + 'stomp' => [ + 'function.stomp-', + 'stomp.', + ], + 'svn' => [ + 'function.svn-', + ], + 'swoole' => [ + 'function.swoole-', + 'swoole-server.', + ], + 'sysvshm' => [ + 'function.ftok', + 'function.sem-', + 'function.shm-', + 'function.msg-get-queue', + 'function.msg-queue-exists', + 'function.msg-receive', + 'function.msg-remove-queue', + 'function.msg-send', + 'function.msg-set-queue', + 'function.msg-stat-queue', + ], + 'taint' => [ + 'function.is-tainted', + 'function.taint', + 'function.untaint', + ], + 'tcpwrap' => [ + 'function.tcpwrap-', + ], + 'tidy' => [ + 'function.tidy-', + 'tidy.', + ], + 'trader' => [ + 'function.trader-', + ], + 'ui' => [ + 'function.ui-', + ], + 'uopz' => [ + 'function.uopz-', + ], + 'var_representation' => [ + 'function.var-representation', + ], + 'win32service' => [ + 'function.win32-', + ], + 'wincache' => [ + 'function.wincache-', + ], + 'xattr' => [ + 'function.xattr-', + ], + 'xdiff' => [ + 'function.xdiff-', + ], + 'xhprof' => [ + 'function.xhprof-', + ], + 'xmlrpc' => ['function.xmlrpc-'], + 'yaml' => [ + 'function.yaml-', + ], + 'yaz' => [ + 'function.yaz-', + ], + 'zlib' => [ + 'function.deflate-', + 'function.gz\.+', + 'function.inflate-', + 'function.readgzfile', + 'function.zlib-', + ], + 'zookeeper' => [ + 'function.zookeeper-', + ] +];