stronk7 / php-search
Semantic-like PHP searches using AST structures generated by php-parser
v0.2.9
2024-06-19 12:04 UTC
Requires
- php: >=7.0
- nikic/php-parser: ^4.10|^5
README
composer require stronk7/php-search
;-)
USAGE
Usage: php-search [operations] file1.php [file2.php ...]
or: php-search [operations] "<?php code"
Perform some accurate PHP searches using AST structures generated by php-parser.
Operations is a list of the following options:
-e, --expression Expression defining the search within the AST. Supports:
- statements (if, continue, foreach...).
- "loop" as equivalent of for|foreach|do|while
- functions and methods always specifying ():
- "function" for global function declarations.
- "method" for class method declarations.
- global, object (->) and class (::) method calls.
- / separator for nested searching.
- | separator for logical OR searching.
-d, --dump Dump AST nodes using NodeDumper.
-C, --with-comments Show comments/phpdocs in AST node dumps.
-P, --with-positions Show positions in AST node dumps.
-h, --help Display this page.
Examples:
php-search -e 'switch / case / continue' *.php
Search for all continue ocurrences within switch and case statements.
php-search -e 'loop / \->get_recordset()|\->get_records()' file.php
Search for all the calls to get_recordset() OR get_records() methods
within a loop (loop expands to for|foreach|while|do).
php-search -e 'method setUp() / \->resetAfterTest()' file.php
Search for all the setUp() method implementations performing
a call to resetAfterTest().
grep|ag -lr 'xxxx' * | xargs php-search -e 'something / complex / xxxx'
Tip: When there are many files it's recommended to reduce them by name (find)
or contents (grep, ag...) in order to pass to php-search a reduced list.
php-search -e 'something()' *.php | xargs do_something
Search for all the calls to something() returning 1-line matches
(like grep, ag...) for easier post-process.
php-search -d -C -P file.php
Dumps AST nodes, with comments and positions from file.php.
Expansions:
loop: for|foreach|while|do
use: use|traituse
LICENSE
Whatever you need, being OSI. BSD New (3-Clause) by default.