|
Java 用 tags ファイルの生成。
(1) Foo.java
public class Foo extends Hoge{
private bar;
Foo(){}
public void setBar(Bar bar){ this.bar = bar; }
public Bar getBar(){ return this.bar; }
}
class Hoge {
Hoge(){}
}
class Bar {
Bar(){}
}
(2) tags
「C 言語の関数一覧」で tags ファイルを作成すると以下のようになる。
C:\jdk1.3.1_02\demo\applets\foo.java(3) : Foo(){}
C:\jdk1.3.1_02\demo\applets\foo.java(4) : public void setBar(Bar bar){ t
his.bar = bar; }
C:\jdk1.3.1_02\demo\applets\foo.java(5) : public Bar getBar(){ return th
is.bar; }
C:\jdk1.3.1_02\demo\applets\foo.java(8) : Hoge(){}
C:\jdk1.3.1_02\demo\applets\foo.java(11) : Bar(){}
(3) Bar のダイレクトタグジャンプ
別のファイルの中、Bar にカーソルを置いて、directtagjump すると
ジャンプ先候補は、次の2つです。
C:\jdk1.3.1_02\demo\applets\foo.java(5) : public Bar getBar(){ return th
is.bar; }
C:\jdk1.3.1_02\demo\applets\foo.java(11) : Bar(){}
もし、戻り値が Bar であるメソッドが、他にも存在すれば、
それらは全て、ジャンプ先候補に挙がってしまいます。
(4) hidetags.js
// ============================================================================
// hidetags.js は、独自の Java 用 tags を作成します。
// ジャンプ先候補を絞るために、ジャンプに無関係な識別子を
// 取り除いた tags ファイルを作成します。
// 実行には WSH が必要です。
// 大抵の Windows には標準でインストールされています。
// Note:
// クラス定義用のタグを含みます。
// コンストラクタのタグは含みません。
// ============================================================================
function Find(strdir){
var folder = FSO.GetFolder( strdir );
var fname;
var files = new Enumerator( folder.Files );
while( ! files.atEnd() ){
fname = FSO.BuildPath( folder.Path, files.item().Name );
PutTag( fname );
files.moveNext();
}
if( ! SUBDIR ) return;
var folders = new Enumerator( folder.SubFolders );
while( ! folders.atEnd() ){
Find( folders.item().Path ); // recursively
folders.moveNext();
}
}
function PutTag(fname){
if( /.\.java$/i.test(fname)==false ) return;
var fin=null;
try{
fin = FSO.OpenTextFile(fname, 1, false);
}catch(e){ return; }
var line="";
var lineno=0;
while( ! fin.AtEndOfStream ){
line = fin.ReadLine();
lineno++;
if( RE2.test(line)==false && RE3.test(line)==false ) continue;
if( /\S+\s*\(/.test(line) ){
line = RegExp.lastMatch;
}else if( /\b(?:extends|implements)\b/.test(line) ){
line = RegExp.leftContext;
}
WScript.Echo(fname + "(" + lineno + ") : " + line);
}
fin.Close();
}
// main
var
RE2=/^\s*(?:(?:public|protected|private|static|abstract|final|native|synchro
nized)\s+)*(?:void|boolean|char|byte|short|int|long|floa
t|double|(?:[A-Za-z_][\w$]*\.)*[A-Z][\w$]*)(?:\[\])*\s+[a-z][\w$]*\s*\(/;
//var RE3=/\b(?:class|interface)\s+[A-Za-z_][^(]*$/
var RE3=/^\s*(?:[a-z]+\s+)*\b(?:class|interface)\s+[A-Za-z_][^(]*$/;
var FSO = new ActiveXObject( "Scripting.FileSystemObject" );
var SUBDIR=false;
var args=WScript.Arguments;
if( args.length > 0 && /^-r$/i.test(args.item(0)) ){ SUBDIR=true; }
Find( "." );
// ============================================================================
(5) 使い方。
c:\where>cscript hidetags.js >tags
c:\where>cscript hidetags.js -r >tags
後者は、サブディレクトリを再帰的に処理します。
実際は、以下のように、バッチファイルを使ってください。
C:\WINDOWS\COMMAND>dir hidetags*
-- 省略 --
HIDETAGS JS 1,569 03-08-16 8:33 hidetags.js
HIDETAGS BAT 48 03-08-16 5:27 hidetags.bat
-- 省略 --
C:\WINDOWS\COMMAND>type hidetags.bat
@echo off
cscript c:\windows\command\hidetags.js %1 >tags
C:\WINDOWS\COMMAND>cd c:\jdk1.3.1_02\demo\applets
C:\jdk1.3.1_02\demo\applets>hidetags -r
|
|