yasnippetのインデントはやっぱりおかしい

たとえばブロック付きメソッド呼び出しのdoを定義してみる。

#name : do ... end
# --
do $0
end

で、doを展開させるとこんなインデントになってしまう。

def x
  hogehoge do 
           end
end

ソースを読んだが、narrow-to-regionでnarrowingしてsnippetを挿入し、挿入開始時点のインデントをやっているからおかしい。

ruby-electric-spaceと相性が悪いのでyasnippetに置き換えようと思ったが、こんなんじゃだめだ。
snippet挿入開始ポイントと終了ポイントがわかれば、indent-regionできるのだが…。インデントするようなmetadataを作成するパッチを書くべきかな。

あと、injectのsnippetで初期値を入力しなかったらカッコごと省略するようなsnippetは作れないものか。そうすればMochaのmockやstubのsnippetもいい具合に作れるのだが。

#name : inject(...) {|...| ... }
# --
inject(${1:0}) {|${2:s}, ${3:x}| $0 }

便利そうなのだが、現時点では正直まだ興奮するほどではない。興奮しないのはskeletonを常用してるからかな…

なにはともあれこれからの発展が楽しみだ。

追記:解決した?

こんな設定を加えておけばきちんとindentされるようになった。でもインデントしてほしくないsnippetとかはどうなんだろうね。

(defun yas/indent-snippet ()
  (indent-region yas/snippet-beg yas/snippet-end)
  (indent-according-to-mode))
(add-hook 'yas/after-exit-snippet-hook 'yas/indent-snippet)