switch/caseのインデントに関する要望No.12418
izumi さん 02/07/12 18:32
 
「switch」に対する「case」のインデントの有無は、動作環境から指定できます。
しかし、「case」に対する「caseの次行」のインデントは指定できず、同一カラムと
なっています。
switch (i) {
case 1:
....
break;
}

ここで要望なのですが、
「case」に対する「caseの次行」のインデントの有無を指定できるようにしていただ
けないでしょうか。
個人的には、以下のようなレイアウトになることを希望しています。
switch (i) {
case 1:
....
break;
}

また組み合わせにより、VS.NETのようなレイアウトを指定することも可能になると思
います。
switch (i) {
case 1:
....
break;
}

検討していただけると幸いです。

[ ]
RE:12418 switch/caseのインデントに関すNo.12422
izumi さん 02/07/13 05:50
 
tabは表現できないようですね。スペースは大丈夫でしょうか。

    switch (i) {
    case 1:
        ....
        break;
    }

[ ]
RE:12422 switch/caseのインデントに関すNo.12423
三月 さん 02/07/13 10:42
 
>tabは表現できないようですね。スペースは大丈夫でしょうか。
>
>    switch (i) {
>    case 1:
>        ....
>        break;
>    }

私見を少々。
    switch (i) {
    case 1:
    case 2:
    case 3:
    case 4:
        ....
        break;
    }
のときかえって困りませんか?

[ ]
RE:12422 switch/caseのインデントに関すNo.12425
Arimac さん 02/07/13 13:49
 
Visual Studioではそうなりますね(^^;
caseの後インデントする場合の方が多いし、
tabはバックスペース1発で消えるし・・・

[ ]
RE:12423 switch/caseのインデントに関すNo.12427
Arimac さん 02/07/13 14:05
 
私はその場合は最初の行で「case :」まで打って
必要な行数コピーして、後で値を入れます(^^;

[ ]
RE:12423 switch/caseのインデントに関すNo.12429
izumi さん 02/07/14 01:40
 
> 私見を少々。
>     switch (i) {
>     case 1:
>     case 2:
>     case 3:
>     case 4:
>         ....
>         break;
>     }
> のときかえって困りませんか?

失礼ながら、何に「困る」のか、を良く考えてみました。(^^;
プログラマの視点から考えると、「caseの次行」が「case」だったときの判断方法、
でしょうか。
この場合、「caseなのかそうでないのか」と言うことを契機にすればよいでしょう。
具体的には、コロンの有無です。
コロンが入力されたとき、インデントを制御する方法を考えています。

また、ユーザの視点から考えると、コロンの入力によってインデントが変化すること
に違和感がないか、ということでしょうか。
この件について個人的には、慣れるしかない、と思います。


ん〜、どうでしょうか。これで三月さんへの答えになっていますでしょうか?
また、この件について良い判断方法などがありましたら、フォローしていただけると
幸いです。

[ ]
RE:12425 switch/caseのインデントに関すNo.12430
izumi さん 02/07/14 01:40
 
> caseの後インデントする場合の方が多いし、
> tabはバックスペース1発で消えるし・・・

tabは、書き足すのも削除するのも簡単です。最初はそう思っていました・・・。
しかし、連続していくつものコードを書いていて、手動でやっている「作業」が面倒
になってしまったのです。

ここで、ふと思いました。
「インデント制御がswitchにはある。しかしcaseにはない。」

さらに思いました。
「もし、この機能が追加されれば、switchブロックについて新たに2種類の形式がサ
ポートされることになる。他の人からも賛成してもらえそう(^^;」

もしかすると、ニーズがないのでしょうか。不安です。

[ ]
RE:12429 switch/caseのインデントに関すNo.12431
Arimac さん 02/07/14 10:21
 
>コロンが入力されたとき、インデントを制御する方法を考えています。

Visual Studioが

    switch (i) {
        case 1

の後コロンを打った時点で

    switch (i) {
    case 1:

となりますね(^^;
(なぜcaseがswitchと同じ位置か分かる瞬間でもある)

ここまでするとパクリと言われるかも(^^;

[ ]
RE:12429 switch/caseのインデントに関すNo.12432
三月 さん 02/07/14 10:24
 
>> 私見を少々。
>>     switch (i) {
>>     case 1:
>>     case 2:
>>     case 3:
>>     case 4:
>>         ....
>>         break;
>>     }
>> のときかえって困りませんか?
>
>失礼ながら、何に「困る」のか、を良く考えてみました。(^^;
>プログラマの視点から考えると、「caseの次行」が「case」だったときの判断方法、
>でしょうか。
>この場合、「caseなのかそうでないのか」と言うことを契機にすればよいでしょう。
>具体的には、コロンの有無です。
>コロンが入力されたとき、インデントを制御する方法を考えています。
>
caseでインデントが発生すると、
次のcaseを書くためにバックスペースを入れないといけないですよね。
それが、何度もあると面倒なんじゃないですか?と思っただけです。

[ ]
RE:12432 switch/caseのインデントに関すNo.12435
izumi さん 02/07/15 06:19
 
言葉が足らなかったようです。すみません。

> caseでインデントが発生すると、
> 次のcaseを書くためにバックスペースを入れないといけないですよね。
> それが、何度もあると面倒なんじゃないですか?と思っただけです。

caseキーワードに付随する「コロン」が入力されたとき、必要のないインデントを削
除します。
入力中は不自然ですが、入力し終わったswitchブロックは、指定通りに整形されると
思います。

[ ]
RE:12432 switch/caseのインデントに関すNo.12436
izumi さん 02/07/15 06:23
 
三月さんからのご指摘で、問題点に気がつきました。
「秀丸に言語の解釈する機能が必要」ということが私なりの結論なのですが、順を追
って書かせてください。

ここで、私からの要望をまとめさせてください。
「caseキーワードに対して、caseに続くステートメントのインデント有無を指定可能
にする」です。
これは、既存機能の「switchキーワードに対するcaseステートメントのインデント制
御」を拡張するものになると思います。
このため、指定方法として次のようなUIイメージが考えられます。

現在:「□ C言語インデントで、switchの場合はインデントしない」
案 :「□ switchキーワードに対してcaseキーワードをインデントす
る」..............(1)
   「□ caseキーワードに対してcaseに続くステートメントをインデントす
る」......(2)

これらの組み合わせによるコードイメージは、次の通りです。

<a> (1)on, (2)on
        switch (i) {
            case 1:
                ....
                break;
        }

<b> (1)off, (2)on
        switch (i) {
        case 1:
            ....
            break;
        }

<c> (1)on, (2)off
        switch (i) {
            case 1:
            ....
            break;
        }

<d> (1)off, (2)off
        switch (i) {
        case 1:
        ....
        break;
        }

ここまでの内容は、「指定方法」と「その結果」に関するものです。
次に、三月さんからご指摘がありました「入力中の動作」について考えてみました。

<a>または<b>のレイアウトを指定しているとき、caseキーワードの次行に進むとイン
デントされます。
しかし、No12423のようなコードの場合、2つ目のcaseからインデントが不必要になり
ます。

<No12423 三月さん より>
>     switch (i) {
>     case 1:
>     case 2:
>     case 3:
>         ....
>         break;
>     }

そこで、caseの後に続くコロンが入力されたことを契機にし、インデントを再調整す
る方法を書きました。
具体的には、コロンが入力されたときにインデントを1つ戻します(=削除します)。
しかし、インデントを「後(あと)」から調整する場合、その前にユーザが修正する
ケースも考えられます。

<No12432 三月さん より>
> caseでインデントが発生すると、
> 次のcaseを書くためにバックスペースを入れないといけないですよね。

ユーザが修正した場合は、余計にインデントを戻さないよう、注意が必要になります。
また、次のようなケースも考えられます。

<caseキーワードを同一の行に記述>
        switch (i) {
        case 1:case 2:case 3:
            ....
            break;
        }

<コメント内にコロンを記述>
        switch (i) {
        case 1:
            // コメント:
            ....
            break;
        }

つまり、switchブロックを解釈しないと、正確に制御できないでしょう。
ここで、別スレッドNo12428、アルビレオさんのコメントが気になります。

> 単なるテキストエディタの支援機能にそこまで特定の言語に依存したものを望むの
>はちょっと酷な気がします。

私も自分の要望にそう感じ始めました。
ただ、一旦提示したことなので、秀丸担当様からの何らかの回答をいただけると幸い
です。

[ ]
RE:12436 switch/caseのインデントに関すNo.12438
秀丸担当 さん 02/07/15 18:26
 
>現在:「□ C言語インデントで、switchの場合はインデントしない」
>案 :「□ switchキーワードに対してcaseキーワードをインデントす
>る」..............(1)
>   「□ caseキーワードに対してcaseに続くステートメントをインデントす
>る」......(2)

確かに、現在の機能より、caseの場合もインデント制御できればかなり
使いやすくなると思います。
ただ文法の解釈がよりややこしくなるので、難しいです。

[ ]
RE:12438 switch/caseのインデントに関すNo.12444
izumi さん 02/07/16 01:30
 
> 確かに、現在の機能より、caseの場合もインデント制御できればかなり
> 使いやすくなると思います。
> ただ文法の解釈がよりややこしくなるので、難しいです。

検討していただき、ありがとうございました。

[ ]