[bug?] tags file の作成、および direct No.05195
ひろ さん 00/03/01 15:06
 
 秀丸担当様今日は、ひろです。sample source を書き込んでいますので、
長文です。
 help には
> ●C言語ヘッダファイルでの強調指定
>
>  C 言語ヘッダファイルでは、「C-header.hilight」を読み込んでおくこと
> をお勧めします。これを読み込んだだけではstructやclassの型宣言が強調
> されるだけで、あまりメリットがありません。そこで、「その他・tagsファ
> イルの作成...」で、秀Tags を起動し、対象ファイルに「*.h;*.c;*.ccp」、
> ルールを「(自動)」にして tags ファイルを作成します。
>
>  こうしておいて、例えばC言語のソースコードで
> struct ABC  abc;
> のような宣言があった場合、「ABC」の上にカーソルを置いて「ダイレクトタ
> グジャンプ」とすれば、ABCの型宣言をしているヘッダファイルに即移動する
> ことができます。
>
>  もちろん、C 言語の関数へもダイレクトタグジャンプができて、とても便利です。
とありますが、上手くいかない事があります。具体的には次の file を用意
します。
/* sample.c (sample なので全く意味がない、compile すると warning がでる。*/
#include<stdio.h>
#include"sample.h"

int main(void){
struct abc a;

function(a);
exit(1);
}

void function(abc b){
return;
}
/* sample.c end */
/* sample.h */
typedef struct abc{
char *a;
unsigned int b;
double c;
};
/* sample.h end */
更に、C-header.hilight の内容を、
;; C-header.hilight を変更
51,^#define
53,^typedef
;; C-header.hilight end
とします。すると後 tags file の内容は、
sample.c(4) : int main(void){
sample.c(11) : void function(abc b){
となり、構造体の定義部分は list up されません。

 また仮に、C-header.hilight の内容を、
;; C-header.hilight 更に変更 */
53,^typedef
;;C-header.hilight end
に変更すると、tags file に list up されるようになりますが、abc に
cursor を合わせて direct tag jump を行うと、引数に abc 型を持っている
関数まで、候補として上がってしまいます。

 この 2 点はどうにかして改善できないでしょうか?

[ ]
RE:05195 [bug?] tags file の作成、およNo.05204
秀丸担当 さん 00/03/01 19:23
 
>;; C-header.hilight を変更
>51,^#define
>53,^typedef
>;; C-header.hilight end
>とします。すると後 tags file の内容は、
>sample.c(4) : int main(void){
>sample.c(11) : void function(abc b){
>となり、構造体の定義部分は list up されません。

試してみましたが、「51,^#define」が有る無いに係わらず、
 typedef struct abc{
の行はtagsファイルにリストアップされました。
tagsファイルの作成時に*.hを書き忘れたとか?

>に変更すると、tags file に list up されるようになりますが、abc に
>cursor を合わせて direct tag jump を行うと、引数に abc 型を持っている
>関数まで、候補として上がってしまいます。

引数にabcを持っている関数まで候補として上がってしまうのは、こちらでも
確認できました。
これは、汎用性を持たせている構造上、仕方が無いかもしれないです。
c言語と分かって処理しているわけではなく、強調表示で判断しているので。
なんとかこれを判断する方法があればいいのですが。

[ ]
RE:05204 [bug?] tags file の作成、およNo.05211
ひろ さん 00/03/02 18:57
 
 秀丸担当様今日は、ひろです。
> 試してみましたが、「51,^#define」が有る無いに係わらず、
>  typedef struct abc{
> の行はtagsファイルにリストアップされました。
 操作 miss をしていたようで、確かにあんな単純は hilight file では再
現しませんねm(_|_)m。ただやはり私は普段使っている hilight file では上
手くいきません。
 もちろん問題を起こす hilight file を使っても、「ルール」で明示的に
指定すれば、問題なく list up されます。

 必要ならば、hilight file をお送りしますので、解析していただけないで
しょうか?


> >に変更すると、tags file に list up されるようになりますが、abc に
> >cursor を合わせて direct tag jump を行うと、引数に abc 型を持っている
> >関数まで、候補として上がってしまいます。
>
> 引数にabcを持っている関数まで候補として上がってしまうのは、こちらでも
> 確認できました。
> これは、汎用性を持たせている構造上、仕方が無いかもしれないです。
> c言語と分かって処理しているわけではなく、強調表示で判断しているので。
> なんとかこれを判断する方法があればいいのですが。
 C 言語と決めてしまえば、簡単に思いつくのは list up されていても、候
補として認識されるのは最初の「({」だけであるという rule が考えられま
すが、汎用性を考えるとむつかしいですね。

[ ]
RE:05211 [bug?] tags file の作成、およNo.05214
秀丸担当 さん 00/03/02 19:25
 
> 必要ならば、hilight file をお送りしますので、解析していただけないで
>しょうか?

はい。送っていただけると助かります。
送り先はxxxxxxxx@nifty.ne.jpまでお願いします。

> C 言語と決めてしまえば、簡単に思いつくのは list up されていても、候
>補として認識されるのは最初の「({」だけであるという rule が考えられま
>すが、汎用性を考えるとむつかしいですね。

うむ、そうですね。
とりあえず例のヘルプの個所には注意書きを書くことにします。

[ ]