class-funcのdirectTagJumpに不要entryNo.12424
inouen さん 02/07/13 11:33
 
ダイレクトタグジャンプで パラメータ、リターンタイプも候補となって
しまうようです。

javaの 関数(例:classAbc class constructor)の参照時に、
パラメータ、リターンデータタイプとしても classAbc が tagsファイル
中に複数箇所登録されており、それらがすべて飛び先指定に表示されて
しまいます。

パラメータ数、パラメータタイプが異なる複数の同一名称のconstructor
が表示され選択するのは当然と思いますが、
パラメータタイプ、リターンタイプとして使用されるclass名に関しては
省いていただくようにお願いいたします。

[ ]
RE:12424 class-funcのdirectTagJumpに不No.12428
アルビレオ さん 02/07/13 15:50
 
アルビレオです。

>パラメータ数、パラメータタイプが異なる複数の同一名称のconstructor
>が表示され選択するのは当然と思いますが、
>パラメータタイプ、リターンタイプとして使用されるclass名に関しては
>省いていただくようにお願いいたします。

単なるテキストエディタの支援機能にそこまで特定の言語に依存したものを望むのは
ちょっと酷な気がします。
行単位の判定しか行なっていないので複数行にまたがったものは正しく判定できない
ことが多く、パラメータ部やその後ろまで判断材料に加えると大きく判定精度が落ち
ることは容易に想像できます。
そんなわけで「他の言語で不都合が起きる恐れがある」という理由からあまり賛成で
きません。

どうしてもというのならマクロで実装することになるでしょうか。
選択ダイアログを出そうとすると田楽DLLあたりも使用しないと厳しそうですが。

[ ]
RE:12428 class-funcのdirectTagJumpに不No.12433
inouen さん 02/07/14 16:19
 
inouenです。

アルビレオさんからのコメントにつき、以下の通り考えますので、再検討お願いしま
す。

class-func name がパラメータタイプ等として使用されるのは Java, C++, C#, そ
の他の関数型言語等
多くのものがあり、普通に使用されているものと考えています。

飛び先指定の窓に入りきれない場合も多く、異なった長さのファイル名の次に 
public static synchronized TargetClass OtherClass(... 等と関数名に複数の修
飾が付いた参照行が数多く
ある場合、public TargetClass( の行を見つけるのにも一苦労で 参照のみの他の関
数宣言が省かれると助かります。

実現方法は tags fileの nameの一致後、次の有効文字が '(' であることを確認
することで可能です。
 宣言に '(' を使用しない言語もしある場合、行末までに '(' が全く出てこない
場合も有効とする ?

この機能を標準としても、他の言語で不都合が起きる恐れ、これまでの使い方との矛
盾は起きないと思います。

さらに複数行の一致先が見つかった場合で、同一の1個のファイルにまとまっている
場合は、
その先頭のものに飛ばすことも考えられます。
(パラメータ数、パラメータタイプの異なる同一名の関数の場合:この項はなくても
かまいません)

マクロでは実行時間もかかりますし、かえって難しく、僕のようにマクロを使いこな
せない者には
どのようにしたら良いのか分かりません。

以上のように数行の追加で簡単に実現でき、多くの人が便利に使用出来ると思います
ので、
次のバージョンでの実現をぜひご検討お願いします。

[ ]
RE:12433 class-funcのdirectTagJumpに不No.12434
アルビレオ さん 02/07/14 22:28
 
アルビレオです。

言われていることはだいたい予想通りなんですが…
こちらの説明が悪かったです。

「ダイレクトタグジャンプ」というのは何もプログラム/スクリプト言語のためだけ
にある機能じゃありません。
たとえば用語集のようなテキストからtagsファイルを作成し、別ファイルを参照中に
調べたい単語があったらダイレクトタグジャンプで意味を調べるような使い方もでき
ます。
ダイレクトタグジャンプの使い方を「関数」に限定したくないんですよ。

>参照のみの他の関数宣言が省かれると助かります。

これだけならtagsファイルに対してマクロを実行し、参照する必要の無い行を削除し
てしまえば、ダイレクトタグジャンプ自体はそのままつかえますしtagsファイルが小
さくなる分高速になります。
こういう「参照したくない行」は言語やコーディングスタイルによって細かい違いが
出やすいため、秀丸エディタに組み込んでしまうよりは自分で細かくルールを設定で
きた方が融通がききます。
一度秀丸エディタに組み込んでしまうと「こういう場合が対応できていない」という
例が次々と出てきて修正に際限が無くなる恐れがあります。
現に「コメント/文字列の色付け」で同じようなことが起こっています。

> 宣言に '(' を使用しない言語もしある場合、行末までに '(' が全く出てこな
>い場合も有効とする?

これはそもそもtagsファイルに含まれないので無効です。(C言語の関数一覧でtagsを
作成した場合)

簡単に言えば
> 以上のように数行の追加で簡単に実現でき、多くの人が便利に使用出来ると思いま
>すので、
のはずが、とても数行の追加で収まるようなものではなくなる恐れがあるというのが
積極的に賛成できない理由です。

[ ]
RE:12434 class-funcのdirectTagJumpに不No.12441
秀丸担当 さん 02/07/15 18:26
 
>> 宣言に '(' を使用しない言語もしある場合、行末までに '(' が全く出てこな
>い場合も有効とする?
>
>これはそもそもtagsファイルに含まれないので無効です。(C言語の関数一覧でtags
>を作成した場合)

これは自分のそうだったような気がするのですが、やってみたら
「C言語の関数一覧」でtagsを作成しても'('が含まれていました。

inouenさんの言われているのは具体的にどのような記述なのでしょうか?
「C言語の関数一覧」でtagsを作成して'('までで行が終了するtagsファ
イルが作成されれば解決するのでしょうか?

[ ]
RE:12441 class-funcのdirectTagJumpに不No.12443
inouen さん 02/07/15 22:57
 
inouenです。

>>宣言に'('を使用しない言語(が)もしある場合...
と書きましたのは、Assembler/macro のような言語、その他の一般のファイルについて
tags fileを作成して directTagJumpを使用する場合には...
といったケースを仮定した場合についての意味です。

java, c++, c# 等では ファイル名、行番号、関数名、'(' 以降も含めて宣言行の
最後迄
出力されている現在の tags file形式のままで問題ありません。

これまで tags fileの作成では ルールを(自動)でしか使ったことがなく、*.hiligh
t file
等を使用して色々な使い方が出来ることは意識していませんでしたのですみませんで
した。

これらの各種の使用法と '(' が後に続く行のみを対象にしたい java,c++,c#等の
のケースが両立
出来ないのであれば、tag file 作成時のルールをコメントとしてtag file の先頭行
にセットして残し、
  //rule=auto (必要があれば 対象ファイル *.java;*.c;*.cc;*.cpp...の部分
も含める)
の行が最初にあった場合、関数名サーチ後 次に '(' が続くことを確認するといっ
たような処理を
追加していただけたらと思います。

これは tags fileに関連した別件の要望ですが、複数のtags fileの選択指定が簡単
に出来たらと
思います。

用途は 自分の作成したファイル、project file, project library, java standard
 library
(Sun)のもの等 複数個の別個のdirectoryに属するファイルから宣言関数を参照した
いためです。
通常は自分のdirectoryのみ、場合によっては旧版のdirectory、standard library等
と選択
したいわけです。4−5種類のdirectory:tags fileを登録しておき、チェックを入
れた単独
或いは複数の tags file についてサーチが出来たらより便利になると思います。

以上よろしくお願いします。

[ ]
RE:12443 class-funcのdirectTagJumpに不No.12448
秀丸担当 さん 02/07/16 18:27
 
>java, c++, c# 等では ファイル名、行番号、関数名、'(' 以降も含めて宣言行の
>最後迄
>出力されている現在の tags file形式のままで問題ありません。

>これらの各種の使用法と '(' が後に続く行のみを対象にしたい java,c++,c#等の
>のケースが両立
>出来ないのであれば

ということですが、ダイレクトタグジャンプをしたときに'('の有り無しを
判断しようとするのであれば、お察しの通り、両立できない不都合が起き
ます。

tagsファイルの作成時にルールを「C言語の関数一覧」とすれば'('を含ま
ない関数名だけのtagsファイルを作成できるようにすれば、解決するので
はないかと思いますが、どうでしょうか?


>これは tags fileに関連した別件の要望ですが、複数のtags fileの選択指定が簡
>単に出来たらと
>思います。

用途に適うかどうかわかりませんが、[その他]→[動作環境]→[パス]→
[環境]→[tagsファイル]の隣にある[上の階層もチェックする]を有効に
しておくと、複数のディレクトリに散らばるものもダイレクトタグジャ
ンプできます。

カレントディレクトリにtagsファイルがあればそれを参照し、無い場合
は親ディレクトリのtagsファイルを参照するようになります。


[ ]
RE:12448 class-funcのdirectTagJumpに不No.12481
inouen さん 02/07/19 21:34
 
inouenです。

秀丸担当さんのコメントにつき以下の通り考えています。よろしくご検討お願いしま
す。

tags file 形式は現在のままでお願いします。
パラメータも含めた関数一覧表的な見方をすることもありますし、名前は同一でパラ
メータ数、
パラメータタイプの異なるルーチンの一つを選ぶ場合、パラメータもあるほうが良い
からです。

tags ファイルの「上の階層もチェックする」機能は使用させてもらっています。
c-diskにメーカ供給標準ライブラリソース、d-diskにプロジェクトソース、e-diskに
自分の
ソース等となっている場合にはそれでは解決せず、別々に指定する必要があります。

現状では別directoryのtags fileを同時に開いておき、関数名 コピー、検索窓に
ペースト +'('、
サーチ、タグジャンプの形で使っています。一番使うものは当然directTagJumpで使
いますが。

tags file作成時のルールが自動(ruletype=auto)の場合に '(' が関数検出の条件の
一つに
なっていると思います。
以下のような処理(擬似コーディング)で要望は実現できると考えられます。
(tags fileに "*" 一文字のみの行はあり得ないのでこれでもOKと考えました)
(そこまで書かなくても解りますよと言われるかもしれませんが、その場合ごめんな
さい)

1.tags file の最初の行に ruletype=auto の判定コメント行追加
    if (ruletype==auto)     write(fileid, "*\n");

2.tags file open後最初の行読み込み時に ruletype判定を追加
    if (readbuff[0]=='*')   ruletype=auto;
    else                    ruletype=other;

3.target function nameが見つかった場合に ruletype 判定他を追加
    /* cptr=buffer ptr:  next to target function name */
    if (ruletype==auto) {
        while (*cptr==' '|| *cptr=='\t') cptr++; // ブランクを許さなければこ
の行不要
        if (*cptr != '(' )  goto next_line_search;
    }

以上の通り、10行前後で実現出来るように思います。


例えば "Event" のclass関数宣言を参照した場合は次のようになります。
この内 event.java(8): に飛ばしたいわけです。

inchannel.java(21) :    public Event[] activeEvents()    {
inchannel.java(35) :    protected void enchain_activeProcess(Event event)   {
inchannel.java(51) :    protected void enq_inchEventQ(Event event)    {
arrays.java(8) :    public static void sort(Event[] a, Event[] aux, int leng
th) {
arrays.java(13) :   private static void mergeSort(Event src[],Event dest[],i
nt low,int high) {
event.java(8) :     public Event(int id)    {
event.java(12) :    public Event save() {
evtw.java(14) :     protected Event evw_extract_topevent()  {
evtw.java(20) :     protected void evw_insq(Event event)    {
evtw.java(44) :     protected Event evw_get_topevent()  {   //  get top time
stamp event
outchannel.java(34) :   public void write(Event event, long delay)  {
outchannel.java(49) :   public void write(Event event)  {
threadw.java(26) :  protected void threadw_ins_timestep_eventq(Event event) {

[ ]
RE:12481 class-funcのdirectTagJumpに不No.12502
秀丸担当 さん 02/07/22 18:05
 
>tags file 形式は現在のままでお願いします。
>パラメータも含めた関数一覧表的な見方をすることもありますし、名前は同一でパ
>ラメータ数、
>パラメータタイプの異なるルーチンの一つを選ぶ場合、パラメータもあるほうが良
>いからです。

そういやそうですね。区別が付かなかったら意味が無いですね。

案はとても素晴らしいと思います。
とりあえず欠点は見当たりません。
検討します。

[ ]