4件の投稿を表示中 - 1 - 4件目 (全4件中)
  • 投稿者
    投稿
  • #8481

    takuya
    参加者

    Rubyのインデントがおかしい。
    メソッドチェインで書いたときに、Tabがはいってしまう。
    バグというか、正規表現設定が変なのでしょうか。標準のまま変えておりません。EmEditor9.05 winVISTAです。

    Rubyで次のようなコードを書いていました。

    #!/usr/bin/env ruby
    $KCODE = “u”
    p [0,1,2,3,4,5,6,7,8,9].select do |i| i%2 == 0 end.collect do |i| i*i end.each do |i| p i end

    #上記のコードをインデントを使うように書いていった場合。

    p [0,1,2,3,4,5,6,7,8,9].select do |i|
    i%2 == 0
    end.c o l l e c t #タブが入ってしまう。

    様々な入力を試みるがうまくいかない
    また、バックスペースで消去するなどして、書き進めても、1文字書くごとにタブがはいってしまいます。

    インデントのタブ(空白)補完がないと書きづらいのですが、動作が変だともっと辛いです。

    Rubyは文法の柔軟さが魅力なので、修正していただけると助かります。

    また、
    自力で、正規表現を修正しようとしましたが、あまりの長さに挫折しました。
    インデントの終了・開始の正規表現のルールもよく解りませんでした。
    また、インデントの終了・開始の記述方法のヘルプのURLを教えていただければと思います。

    江村様よろしくお願いします。

    #8486

    chobie
    メンバー

    インデント開始
    ^(
    .*([|({|do)s*(|.*|)?)s*
    |
    (s*(module|class|def|unless|if|else|elsif|case|when|begin|rescue|ensure|for|while|until).*)
    )$

    インデント終了
    ^s*(
    [}]]s*
    |
    (end|rescue|ensure|else|elsif|when)b
    )

    こんな形にすれば読みやすいのではないでしょうか?

    ステートメント開始のほうはエスケープシーケンスが多いので多少読みにくいかもしれませんが単純なので説明は割愛させていただきます。
    構文については下記を参照していただければすぐ読めるかと思いますので参考にしてみてください。
    http://jp.emeditor.com/help/howto/search/search_regexp_syntax.htm

    version9.06で同じようなタイプをすると

    #!/usr/bin/env ruby
    $KCODE = “u”
    p [0,1,2,3,4,5,6,7,8,9].select do |i|
    i%2 == 0
    end.collect d o

    doのoをタイプした際にインデントされてしまうようです。

    EmEditorの自前の自動インデントの構文解析と
    正規表現での自動インデントが衝突しているのですかね?

    ちなみにruby詳しくないんでよくわからないんですが

    p [0,1,2,3,4,5,6,7,8,9].select do |i|
    i%2 == 0
    end.collect do |i|
    i*i
    end.each do |i|
    p i
    end

    今回の想定したインデントってこんな感じなのでしょうか?

    #8487

    匿名

    この問題は他の言語の設定でも再現しており、EmEditor本体に問題がありそうです。
    ステートメント終了にあたる記述がない、またはステートメント終了の設定項目が空の場合(今回はこちらに該当)に再現します。

    例えばC#で

    if (cond) {
    foo();
    } else

    と記述した状態で{を打てば正しく動作しますが、以下のようにセミコロンを外すと、

    if (cond) {
    foo()
    } else

    {を打ったときに不自然なタブが入力されます。

    ご確認をよろしくお願いします。

    #8501

    takuya
    参加者

    想定してたのは、もう少し深いインデントです。

    p [0,1,2,3,4,5,6,7,8,9].select do |i|
                      i%2 == 0
              end.collect do |i|
                      i*i
              end.each do |i|
                      p i
              end

    他の言語でも再発するようですね。

    Snippetsなど関連ありそうなものを全てオフにしても発生しました。

    chobieさんは書きました:

    ちなみにruby詳しくないんでよくわからないんですが

    p [0,1,2,3,4,5,6,7,8,9].select do |i|
    i%2 == 0
    end.collect do |i|
    i*i
    end.each do |i|
    p i
    end

    今回の想定したインデントってこんな感じなのでしょうか?

4件の投稿を表示中 - 1 - 4件目 (全4件中)

このトピックに返信するにはログインが必要です。

友達に知らせる... Tweet about this on TwitterShare on FacebookShare on Google+Email this to someone