|
参考までに、if( a && b || c )といったような書き方をしているところを一覧
表示するマクロをちょっと前作っていたので書いておきます。
−−−−−−−−−
//演算子チェックマクロ
//「if( a && b || c )」のような書き方をしている部分をチェック
//します。現在のフォルダ内の該当するファイルをチェックしてgrep風
//の出力を出します。
$targetfiles = "*.mac;*.cpp;*.c;*.h";
//-----------
disablehistory 0x7f;
$s=searchbuffer;
#s=searchoption;
setclipboard "";
closenew;
grep ".",$targetfiles,".",regular,filelist;
#ifile=0;
#cfiles=linecount2;
#hgrep=hidemaruhandle(0);
#chit=0;
while(1){
setactivehidemaru #hgrep;
if(#ifile>=(linecount2-1))break;
moveto2 0,#ifile;
tagjump;
gofiletop;
disabledraw;
disableerrormsg;
while(1){
searchdown "(if|while|for)",word,regular;
if(result==false){
break;
}
escape;
moveto foundendx,foundendy;
searchdown2 "(";
if(result==false){
break;
}
if(tickcount>#ticknext){
#ticknext=tickcount+1000;
title str(lineno)+"/"+str(linecount2) + "line "
+ str(#ifile+1)+"/"+str(#cfiles)+"file";
}
escape;
#xtop=x;
#ytop=y;
gokakko;
#xend=x;
#yend=y;
moveto #xtop,#ytop;
#cAnd=0;
#cOr=0;
while(1){
searchdown "&&|\\|\\||\\(",regular;
if(result==false)break;
if(y>#yend)break;
if(y==#yend&&x>#xend)break;
if((colorcode & 0x1F)==3)continue;
escape;
moveto foundtopx,foundtopy;
if(code==0x26){ //&
#cAnd=#cAnd+1;
}else if(code==0x7c){ //|
#cOr=#cOr+1;
}else if(code==0x28){ //(
gokakko;
if(y>#yend)break;
if(y==#yend&&x>#xend)break;
}else {
break;
}
}
if( ((#cAnd+#cOr)>=2 && #cAnd>0 && #cOr>0)
|| (#cEqual>0) ){
moveto #xtop,#ytop;
addclipboard basename2+"("+str(lineno)+") : "
+ gettext(0,#ytop,linelen,#ytop)
+"\n";
#chit=#chit+1;
}
moveto #xend,#yend;
}
#hclose=hidemaruhandle(0);
setactivehidemaru #hgrep;
closehidemaru #hclose;
#ifile=#ifile+1;
}
setsearch $s, #s;
newfile;
if(#chit>0){
paste;
} else {
insert "該当なし\n";
}
clearupdated;
gofiletop;
closehidemaru #hgrep;
|
|