tagsファイルのフォーマット拡張とダイレNo.32787
NORI_ さん 13/12/19 23:56
 
tagsファイルのフォーマット拡張とダイレクトタグジャンプ機能強化の依頼です。

具体的には、ダイレクトタグジャンプ時にマッチングさせるワードと、
[ダイレクトタグジャンプ飛び先指定] ダイアログの [内容] 列に
表示される文字列をそれぞれ、tags ファイルの各行に記載できるように
していただきたいです。

現状、マッチングに利用される文字列も [内容] 列に表示される文字列も同一です。


出来るだけ [ダイレクトタグジャンプ飛び先指定] ダイアログには
表示されて欲しくありませんし、表示される場合でも飛び先候補は
本当の定義位置だけに絞り込みたいですので、マッチングに使用される
文字列は必要なワードだけにしたいです。
一方、メソッドのオーバーロードやオーバーライドを使用している
場合などで、本当に定義位置(飛び先候補)が複数ある場合には、
そのメソッドの引数なども [内容] 列に表示されて欲しいです。

現状ではどちらかの利便性を犠牲にするしか無いように思われます。
ダイレクトタグジャンプはコーディング中頻繁に使用する機能ですので、
機能強化していただけると大変助かります。

ご検討よろしくお願いいたします。

[ ]
RE:32787 tagsファイルのフォーマット拡張No.32788
秀丸担当 さん 13/12/20 09:55
 

確かに通常のままだと関数名以外のところもマッチしてしまいます。

関数名だけを対象にするための設定があって、
[その他]→[動作環境]で左下の「上級者向け設定」をONにして、
[その他]→[動作環境]→[その他のコマンド]→[tagsファイル]のところに、「関
数名のみをジャンプの対象にする」にしておくと、関数名と思わしき部分だけが
対象になります。

C言語やJava等の言語であればこれで対応できると思います。
もしうまくいかなかったら言語や具体的な記述のされ方など教えてもらえると助
かります。

[ ]
RE:32788 tagsファイルのフォーマット拡張No.32791
NORI_ さん 13/12/23 18:25
 
助言ありがとうございます。
「関数名のみをジャンプの対象にする」の設定知りませんでした。

数日間試してみた結果、うまくいかなかった例をご報告いたします。


■例1
私はクラス定義へもジャンプできるよう、クラス定義の開始位置も
tags ファイルに抽出しています。この時、クラスの継承を行っていると
ジャンプ先の候補が期待通りに絞り込まれません。

具体的には、PHP の場合クラス定義を次の様に書き始めます。

 > class ChildClass extends ParentClass {

これは ChildClass の定義開始位置ですが、ParentClass でダイレクトタグジャンプ
を試みた時にもジャンプ先の候補に表示されてしまいます。


■例2
私は最近 Delphi 言語を利用しており、Delphi ではクラス定義を次の様に
書き始めます。

 > ChildClass = class(ParentClass)

「関数名のみをジャンプの対象にする」を有効にすると、ChildClass の
ジャンプ候補に上記の行が表示されません。


■例3
Delphi のプロシージャ(関数の様なもの)の定義は次の様に書き始めます。

 > procedure SomeClass.SomeProcedure(引数...);

引数がない場合は次の様に書き始めます。

 > procedure SomeClass.SomeProcedure;

この時、「関数名のみをジャンプの対象にする」が有効になっている場合でも、
SomeClass のジャンプ先候補に上記の行が表示されてしまいます。



いろいろなフォーマットの言語や文章があるため、tags ファイルを作成する側で
マッチに用いるワードと、[ダイレクトタグジャンプ飛び先指定] ダイアログの
[内容] 列に表示される文字列をそれぞれ指定できると、編集対象ごとにユーザー側で
対応できて便利だと思います。

ダイレクトタグジャンプは本当に頻繁に使う機能であるため、これは私にとって切実
な問題です。
ご検討よろしくお願いいたします。

[ ]
RE:32791 tagsファイルのフォーマット拡張No.32793
秀丸担当 さん 13/12/24 11:17
 

具体的な例などありがとうございます。
PHP(というかC言語等でも)のclassの定義は関数名の判断にはしていないのと、
Delphiは現状では対応していないです。

tagsファイル内の関数と思わしき場所は単純に次に「(」があるかどうかで判断
しています。
それぞれご指摘いただいた点を個別に対応することは修正して可能だと思います
が、言われているように様々なケースがあると思うので、これだけを対応しても
他の様々なケースには対応できないです。

ctagsやその派生などの形式もあるようで、そういった形式も使えるようになる
と組み合わて使えたりできると思うので、今後のバージョンで検討したいと思い
ます。


参考までの情報として、現状で無理矢理なんとかするとしたら、対象となる単語
の次に「(」が付いていたら関数と判断されるので、それに合うような形式にな
っていると一応それっぽくできてしまいます。
例:
hoge.php(12) : ChildClass( class ChildClass extends ParentClass {
hoge.php(34) : TestFunc( 説明1
hoge.php(56) : TestFunc( 説明2

[ ]
RE:32793 tagsファイルのフォーマット拡張No.32795
NORI_ さん 13/12/24 18:23
 
>ctagsやその派生などの形式もあるようで、そういった形式も使えるようになる
>と組み合わて使えたりできると思うので、今後のバージョンで検討したいと思い
>ます。

ありがとうございます!


>参考までの情報として、現状で無理矢理なんとかするとしたら、対象となる単語
>の次に「(」が付いていたら関数と判断されるので、それに合うような形式にな
>っていると一応それっぽくできてしまいます。
>例:
>hoge.php(12) : ChildClass( class ChildClass extends ParentClass {
>hoge.php(34) : TestFunc( 説明1
>hoge.php(56) : TestFunc( 説明2

なるほど、試してみます。

[ ]