Emacs ruby-mode indentation behavior

前端 未结 3 1862
悲哀的现实
悲哀的现实 2020-12-14 20:33
class Foo
  attr_accessor :a,
                :time, # ms since epoch
                :b,
                :c
end

In text mode, the variables listed after \'a\'

3条回答
  •  臣服心动
    2020-12-14 20:51

    This hack should work in the majority of cases.

    (defadvice ruby-indent-line (after line-up-args activate)
      (let (indent prev-indent arg-indent)
        (save-excursion
          (back-to-indentation)
          (when (zerop (car (syntax-ppss)))
            (setq indent (current-column))
            (skip-chars-backward " \t\n")
            (when (eq ?, (char-before))
              (ruby-backward-sexp)
              (back-to-indentation)
              (setq prev-indent (current-column))
              (skip-syntax-forward "w_.")
              (skip-chars-forward " ")
              (setq arg-indent (current-column)))))
        (when prev-indent
          (let ((offset (- (current-column) indent)))
            (cond ((< indent prev-indent)
                   (indent-line-to prev-indent))
                  ((= indent prev-indent)
                   (indent-line-to arg-indent)))
            (when (> offset 0) (forward-char offset))))))
    

    Example:

    class Comment < ActiveRecord::Base
      after_create :send_email_to_author,
                   :if => :author_wants_emails?,
                   :unless => Proc.new { |comment| comment.post.ignore_comments? }
    end
    

提交回复
热议问题