「関数パラメータはジャンプの対象としなNo.03093
Iranoan さん 03/09/26 17:45
 
 皆さん今日は、Iranoan です。
 β版の会議室に質問というのもなんですが、β16から追加された「関数パラ
メータはジャンプの対象としない」は、一体何のための設定なのでしょう?
http://www.maruo.co.jp/hidesoft/2/x12424_.html
http://www.maruo.co.jp/turukame/3/x02619_.html
特に後者の
http://www.maruo.co.jp/turukame/3/x02619_.html#2849
以降のスレッドの要望による追加だと思い、読み直したのですが、実際に使っ
てみると、どうもよく解りません。
 このオプションを ON にして、「ダイレクトタグジャンプ」を実行した時、
カーソル位置の単語が tags ファイルに含まれていても、引数の部分ならジャ
ンプしないという理解で良いのでしょうか?

 「tags ファイルに出力されていても、関数の返り値、引数として書き込ま
れている場合は、飛び先の候補としない」という仕様なら便利そうなのですが、
上記の私の解釈している仕様だと、何が便利になるのか...。

[ ]
RE:03093 「関数パラメータはジャンプの対No.03110
inouen さん 03/09/27 09:32
 
Inanoranさん

> 「tags ファイルに出力されていても、関数の返り値、引数として書き込ま
>れている場合は、飛び先の候補としない」という仕様なら便利そうなのですが、
>上記の私の解釈している仕様だと、何が便利になるのか...。


http://www.maruo.co.jp/turukame/3/x02594_.html#2594
で記していますが Inanoranさんが便利そうだと考えられている機能を
追加して頂いたわけです。

>target method/function 以外に return parameter, input parameter も
>jump 対象とされてしまいますので、target method/functionの宣言部
>のみに jump先を制限するようにお願いします。

[ ]
RE:03110 「関数パラメータはジャンプの対No.03111
Iranoan さん 03/09/27 12:28
 
 inouen さん今日は、Iranoan です。
 回答有り難うございます。
> http://www.maruo.co.jp/turukame/3/x02594_.html#2594
> で記していますが Inanoranさんが便利そうだと考えられている機能を
> 追加して頂いたわけです。
>
> >target method/function 以外に return parameter, input parameter も
> >jump 対象とされてしまいますので、target method/functionの宣言部
> >のみに jump先を制限するようにお願いします。
 β19 では引数の位置で「ダイレクトタグジャンプ」が出来ない (ジャンプ
元が制限されている) だけで、ジャンプ先が制限されているわけではないよう
ですが...。

[ ]
RE:03111 「関数パラメータはジャンプの対No.03127
秀丸担当 さん 03/09/29 16:08
 

> β19 では引数の位置で「ダイレクトタグジャンプ」が出来ない (ジャンプ
>元が制限されている) だけで、ジャンプ先が制限されているわけではないよう
>ですが...。

「関数パラメータはジャンプの対象としない」をチェックしたときは、ジャンプ元が
制限
されるのではなく、ジャンプ先(tagsファイル内)の引数が無視されるようになると
いう
ことです。

[ ]
RE:03127 「関数パラメータはジャンプの対No.03128
Iranoan さん 03/09/29 17:06
 
 秀丸担当さん今日は、Iranoan です。
> 「関数パラメータはジャンプの対象としない」をチェックしたときは、ジャンプ元が
> 制限されるのではなく、ジャンプ先(tagsファイル内)の引数が無視されるようにな
> るということです。
 それならば、
sample.cpp(3) : int main(
sample.cpp(11) : void func( ABC a ){
sample.h(2) : struct ABC{
という内容の tags ファイルがあった場合、
void func( ABC a ){
という行で、ABC の位置にカーソルを置いて、「ダイレクトタグジャンプ」を
実行すれば、sample.h の 2 行目、
struct ABC{
にジャンプしますよね。これがしないで、「tags ファイル内に...」というエ
ラーになります???

[ ]
RE:03128 「関数パラメータはジャンプの対No.03145
秀丸担当 さん 03/09/30 11:30
 

>struct ABC{
>にジャンプしますよね。これがしないで、「tags ファイル内に...」というエ
>ラーになります???

同じようにしてやってみたところ、再現できました。
「関数パラメータはジャンプの対象としない」のではなく、「関数名のみをジャンプ
の対
象とする」ように動作していました。
いちおう当初の要望通りには動いています。
構造体の宣言にも使いたい場合もあると思うので、理想的ではないようです。
とりあえずチェックボタンの名前を「関数名のみをジャンプの対象とする」にして、
デフ
ォルトでONになっていたのをOFFにしようと思います。

[ ]
RE:03145 「関数パラメータはジャンプの対No.03147
Iranoan さん 03/09/30 12:01
 
 秀丸担当さん今日は、Iranoan です。
> 「関数パラメータはジャンプの対象としない」のではなく、「関数名のみをジャンプ
> の対象とする」ように動作していました。
 納得しました。

> いちおう当初の要望通りには動いています。
 inouen さんの要望通りなら良いですが、やはり関数の返り値/引数が構造体
の場合にも、構造体の定義に飛びたいときは、
void func(
  ABC x
){
といった書き方をするしかないですね。

 P.S 最近、秀丸担当さんの投稿の改行位置が、ちょっとおかしくなっている
気が...。

[ ]
RE:03147 「関数パラメータはジャンプの対No.03157
秀丸担当 さん 03/09/30 18:17
 

> inouen さんの要望通りなら良いですが、やはり関数の返り値/引数が構造体
>の場合にも、構造体の定義に飛びたいときは、
>void func(
>  ABC x
>){
>といった書き方をするしかないですね。

ダイレクトタグジャンプする元の書き方は関係ないです。
構造体も対象としたい場合は、動作環境の「関数パラメータはジャンプの対象と
しない」(「関数名のみをジャンプの対象とする」に変更予定)のチェックをは
ずすしかないということになります。

[ ]
RE:03157 「関数パラメータはジャンプの対No.03160
Iranoan さん 03/09/30 18:38
 
 秀丸担当さん今日は、Iranoan です。
> ダイレクトタグジャンプする元の書き方は関係ないです。
> 構造体も対象としたい場合は、動作環境の「関数パラメータはジャンプの対象と
> しない」(「関数名のみをジャンプの対象とする」に変更予定)のチェックをは
> ずすしかないということになります。
 これは承知しています。私が言いたかったのは、
> >void func(
> >  ABC x
> >){
と書けば、tags ファイルの内容は、
sample.cpp(11) : void func(
sample.h(2) : struct ABC{
となるので (もちろん「関数名のみをジャンプの対象とする」が OFF である
ことは大前提ですが、)、ABC で
> 構造体の定義に飛びたい
が、飛び先が複数表示されることなく実現できる、ということです。

 何にしても、私が勘違いしている可能性を考慮して回答頂き有り難うござい
ます。

[ ]
RE:03160 「関数パラメータはジャンプの対No.03166
秀丸担当 さん 03/10/01 18:11
 

>と書けば、tags ファイルの内容は、
>sample.cpp(11) : void func(
>sample.h(2) : struct ABC{
>となるので (もちろん「関数名のみをジャンプの対象とする」が OFF である
>ことは大前提ですが、)、ABC で
>> 構造体の定義に飛びたい
>が、飛び先が複数表示されることなく実現できる、ということです。

なるほど。そういうことでしたか。すみません。
確かにそれで回避できます。

[ ]
RE:03166 「関数パラメータはジャンプの対No.03189
inouen さん 03/10/03 18:39
 
inouenです。

話題になっている 関数宣言以外に構造体など(struct, class, enum,
union...)の宣言もジャンプの対象とすることを考えてみました。


tagsファイル内でsearch word が見つかった場合、以下のチェックを行う。

; ( { /  のいずれかが最初に見つかる位置をチェックする。

見つからない場合、  宣言文
           次の行に ( 或いは { が続くものとみなす

;が見つかった場合、 参照文

( が見つかった場合、 search wordの次の有効文字として
           ( が続く場合、関数宣言文
           そうでなければ リターン値、関数パラメータ

{ が見つかった場合、 search wordよりも後に { が続く場合
           構造体等宣言文

/ が見つかった場合、 コメントが続くはずだからコメント部分を省いて
           再度 ( { ; / の位置チェックを続ける。

以上のようなチェックで関数、構造体等宣言文の検出が可能だと思います。
構造体等に関しては C-header.hilight : "21,^(struct|class|enum|union)"
によりtagsファイルが作成されたものとして考えました。
 (*.hilightの 21, 33, 97 等の説明が見当たらなかったのですが)

上記チェック条件、tagsファイルへの宣言文出力条件等に関してもっと
追加すべき項目があるように考えられます。
(同じような宣言文検出用のmacroファイルを作成された方もおられるようです)
上記のやり方でまずはかなりの部分目的の達成が可能と思います。
検討して頂くよう希望します。

[ ]
RE:03189 「関数パラメータはジャンプの対No.03192
inouen さん 03/10/04 17:50
 
inouenです。

#03189 で関数宣言文の検出条件を追加いたしましたが
一部説明不十分の部分があったので下記に読みかえて下さい。

'(' が見つかった場合、search wordの次の有効文字として
          "今見つかった最初の" ( が続く場合 関数宣言文
                    そうでなければ 関数リターン値、関数パラメータ

関数宣言文へジャンプしようとして次のような複数のエントリが表示されました。

###### inGraph ################################################

1.tester.java(66) :           new process(inGraph()) {
                              // make new timer object 
2.flowcollector.java(272) :   dumpTimer = new Timer(inGraph(), interval) {
                              ...
                              // start timer
                              dumpTimer.set(dumpInterval);

3.flowcollector.java(452) :   public ProtocolGraph inGraph()
4.configurator.java(170) :       timer = new OS.Timer(inGraph(), exp_time){

####### Timer ####################################################
5.OS\timer.java(87) :    public Timer(ProtocolGraph e, long dt) {
6.tcpclient.java(142) :     (new OS.Timer(localHost, start_time){
7.tcpclient.java(184) :     (new OS.Timer(localHost, Net.seconds(sleeptime

3, 5行が    inGraph, Timer 関数の宣言文に相当します。
1,2,4行のinGraph()はリターン値を関数コールパラメータとして使用しています。

2,4,6,7, new Timer(...) の行は Timer Objectの生成文で関数宣言文ではありませ
んが、
#30189の条件のみでは関数宣言文と見なされてしまうようです。

これらの例は Javaの場合ですが、C++, C# 等でも同じようなことがあると思います。
(多少形式が違うかも知れませんが)
関数宣言文等のみを検出しようとすると 構文解析をする必要があるのでしょうが
エディタにそれを要求するのは さすがに行き過ぎですから...

#30189での関数宣言文等検出方法は、多少のもれ、行き過ぎはあるでしょうが
比較的容易に実現出来る方法はないか考えたものです。

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


[ ]
RE:03192 「関数パラメータはジャンプの対No.03199
秀丸担当 さん 03/10/06 17:43
 

もともと、このオプションは、C言語の関数一覧として作成したtagsファイルに
対応するものなので、それ以外を考え出すときりがない気がします。

classの場合、

 class AAA : public BBB {

とか、テンプレートを使って

 class AAA<CCC> : public BBB {

とかも有り得るようです。
もしやるなら、強調表示の判断と同じように行頭にclassがあって、その次の単
語かどうかで判断するのがいいと思います。
#define や typedef に飛びたい場合もあるかもしれません。
http://www.maruo.co.jp/hidesoft/2/x15430_.html#15430
の書き込みにあるように、また飛べるものと飛べないものが出てきました、なん
てことになりかねないので、この機能は標準ではオフにして、C言語の関数名だ
けを対象とする機能が一番すっきりすると思います。

[ ]