ソースコードを検索する
PHP で書かれたソースコードを解析している。ある関数、クラスがどこで定義され、どこで使われているのか調べたい。PHP 用の統合開発環境を使えばきっとそんなことは簡単にできるのだろうけれど。Emacs の PHP 開発モードでも便利なものはアリそうだけれど。とりあえず今は次のようなシェルスクリプトを使っている。
#!/bin/bash target_dir=src grep_opts="-r" while getopts "fci" OPT; do case $OPT in "c" ) prefix='class' ;; "f" ) prefix='function' ;; "i" ) grep_opts="$grep_opts -i" ;; * ) ;; esac done shift `expr $OPTIND - 1` needle="${1}" if [ -n "$prefix" ] ; then echo grep $grep_opts "$prefix $needle" $target_dir '| grep -v \\.php~' grep $grep_opts "$prefix $needle" $target_dir | grep -v \\.php~ else echo grep $grep_opts "$needle" $target_dir '| grep -v \\.php~' grep $grep_opts "$needle" $target_dir | grep -v \\.php~ fi # end of file
たとえば、getRedStuff という関数が定義されているところを調べたいときには
$ grep.sh -f getRedStuff
とやる。GreenStuff というクラスが定義されているところを調べたいときには
$ grep.sh -c GreenStuff
とやる。
PHP は変数名は case sensitive だけど、関数は case insensitive らしく、定義時と大文字小文字が違う呼出し方をされているかもしれない。たとえば、truncate_fileName という関数がどこで定義されているか、
$ grep.sh -f truncate_fileName
で探しても見つからない場合、case を無視して探すと見つかる (と期待される)。
$ grep.sh -if truncate_fileName src/path/to/file/func.php:function truncate_filename()