permafrost-dev / php-code-search
搜索PHP代码中的函数和方法调用、变量赋值等
Requires
- php: ^7.4|^8.0
- nikic/php-parser: ^5.0
- permafrost-dev/code-snippets: ^1.2.0
Requires (Dev)
This package is auto-updated.
Last update: 2024-09-03 04:35:01 UTC
README
直接从PHP中搜索PHP源代码中的函数和方法调用、变量赋值、类等。
安装
composer require permafrost-dev/php-code-search
搜索
要搜索文件,请使用 search
方法。它的唯一参数可以是包含有效文件名的字符串或 \Permafrost\PhpCodeSearch\Support\File
的实例。
要搜索字符串,请使用 searchCode
方法。
搜索方法返回一个 Permafrost\PhpCodeSearch\Results\FileSearchResults
的实例,该实例具有一个 results
属性。
每个 result
是一个具有以下属性的 Permafrost\PhpCodeSearch\Results\SearchResult
的实例
node
- 找到的特定项node->name(): string
location
- 项在文件中的位置location->startLine(): int
location->endLine(): int
snippet
- 包含结果行的代码行的片段snippet->toString(): string
file()
(方法) - 提供对搜索的文件的访问
搜索
要搜索字符串或文件中的代码,请使用 Searcher
类
use Permafrost\PhpCodeSearch\Searcher; $searcher = new Searcher();
要搜索文件,请使用 search
方法,并使用 searchCode
方法搜索代码字符串。
$searcher ->functions(['strtolower', 'strtoupper']) ->search('./file1.php'); $searcher ->variables(['/^one[A-Z]$/']) ->searchCode('<?php $oneA = "1a";');
使用任何可用的方法进行搜索时,可以使用正则表达式,方法是使用斜杠 /
包围名称,例如 /test\d+/
。
变量名
要按名称搜索变量,请使用 variables
方法。
$results = $searcher ->variables(['twoA', '/^one.$/']) ->searchCode('<?php '. ' $oneA = "1a";'. ' $oneB = "1b";'. ' $twoA = "2a";'. ' $twoB = "2b";'. ''); foreach($results->results as $result) { echo "Found '{$result->node->name()}' on line {$result->location->startLine}" . PHP_EOL; }
函数
要搜索函数调用或定义,请使用 functions
方法。
// search for references AND definitions for 'strtolower' and/or 'myfunc' $searcher ->functions(['strtolower', 'myfunc']) ->search('file1.php');
方法调用
要按名称搜索方法调用,请使用 methods
方法。
方法调用节点具有一个 args
属性,可以循环遍历以检索方法调用的参数。
$results = $searcher ->methods(['/test(One|Two)/']) ->searchCode('<?php '. ' $obj->testOne("hello world 1"); '. ' $obj->testTwo("hello world", 2); '. '' ); foreach($results->results as $result) { echo "Found '{$result->node->name()}' on line {$result->location->startLine}" . PHP_EOL; foreach($result->node->args as $arg) { echo " argument: '{$arg->value}'" . PHP_EOL; } }
静态调用
要搜索静态方法或属性调用,请使用 static
方法。
有效的搜索词可以是类名,如 Cache
,或类名和方法名,如 Cache::remember
。
$searcher ->static(['Ray', 'Cache::has', 'Request::$myProperty']) ->search('./app/Http/Controllers/MyController.php');
类
要搜索类定义或由 new
关键字创建的类,请使用 classes
方法。
$searcher ->classes(['MyController']) ->search('./app/Http/Controllers/MyController.php');
变量赋值
要按变量名搜索变量赋值,请使用 assignments
方法。注意:应省略 $
。
$searcher ->assignments(['myVar']) ->search('./app/Http/Controllers/MyController.php');
不带代码片段的结果
要返回不带相关代码片段的搜索结果,请使用 withoutSnippets
方法
$searcher ->withoutSnippets() ->functions(['strtolower']) ->search('file1.php');
测试
./vendor/bin/phpunit
变更日志
请参阅 CHANGELOG 了解最近更改的更多信息。
贡献
请参阅 CONTRIBUTING 了解详细信息。
安全漏洞
请查看 我们的安全策略 了解如何报告安全漏洞。
致谢
许可协议
MIT 许可协议 (MIT)。请参阅 许可文件 了解更多信息。