ruby-method-params-indent: New user option
* lisp/progmodes/ruby-mode.el (ruby-method-params-indent): New option (bug#60110). (ruby-smie-rules): Use it. * etc/NEWS: Mention it. * test/lisp/progmodes/ruby-mode-resources/ruby.rb: Ensure the var's value is default. * test/lisp/progmodes/ruby-mode-resources/ruby-method-params-indent.rb: New file. * test/lisp/progmodes/ruby-mode-tests.el (ruby-deftest-indent): New macro, use it to run the indentation test using the new file. Disable the :expensive-test tag, because neither runs for "longer than some few seconds", both take significantly below 1s.
This commit is contained in:
parent
b9e813f79f
commit
2b1fdbffcb
5 changed files with 62 additions and 13 deletions
3
etc/NEWS
3
etc/NEWS
|
@ -2761,6 +2761,9 @@ project-dedicated or global) is specified by the new
|
||||||
---
|
---
|
||||||
*** Support for endless methods.
|
*** Support for endless methods.
|
||||||
|
|
||||||
|
---
|
||||||
|
*** New user option 'ruby-method-params-indent'.
|
||||||
|
|
||||||
** Eshell
|
** Eshell
|
||||||
|
|
||||||
+++
|
+++
|
||||||
|
|
|
@ -268,6 +268,23 @@ Only has effect when `ruby-use-smie' is t."
|
||||||
:safe 'booleanp
|
:safe 'booleanp
|
||||||
:version "24.4")
|
:version "24.4")
|
||||||
|
|
||||||
|
(defcustom ruby-method-params-indent t
|
||||||
|
"Indentation of multiline method parameters.
|
||||||
|
|
||||||
|
When t, the parameters list is indented to the method name.
|
||||||
|
|
||||||
|
When a number, indent the parameters list this many columns
|
||||||
|
against the beginning of the method (the \"def\" keyword).
|
||||||
|
|
||||||
|
The value nil means the same as 0.
|
||||||
|
|
||||||
|
Only has effect when `ruby-use-smie' is t."
|
||||||
|
:type '(choice (const :tag "Indent to the method name" t)
|
||||||
|
(number :tag "Indent specified number of columns against def")
|
||||||
|
(const :tag "Indent to def" nil))
|
||||||
|
:safe (lambda (val) (or (memq val '(t nil)) (numberp val)))
|
||||||
|
:version 29.1)
|
||||||
|
|
||||||
(defcustom ruby-deep-arglist t
|
(defcustom ruby-deep-arglist t
|
||||||
"Deep indent lists in parenthesis when non-nil.
|
"Deep indent lists in parenthesis when non-nil.
|
||||||
Also ignores spaces after parenthesis when `space'.
|
Also ignores spaces after parenthesis when `space'.
|
||||||
|
@ -660,9 +677,12 @@ This only affects the output of the command `ruby-toggle-block'."
|
||||||
(unless (or (eolp) (forward-comment 1))
|
(unless (or (eolp) (forward-comment 1))
|
||||||
(cons 'column (current-column)))))
|
(cons 'column (current-column)))))
|
||||||
('(:before . " @ ")
|
('(:before . " @ ")
|
||||||
(save-excursion
|
(if (or (eq ruby-method-params-indent t)
|
||||||
(skip-chars-forward " \t")
|
(not (smie-rule-parent-p "def" "def=")))
|
||||||
(cons 'column (current-column))))
|
(save-excursion
|
||||||
|
(skip-chars-forward " \t")
|
||||||
|
(cons 'column (current-column)))
|
||||||
|
(smie-rule-parent (or ruby-method-params-indent 0))))
|
||||||
('(:before . "do") (ruby-smie--indent-to-stmt))
|
('(:before . "do") (ruby-smie--indent-to-stmt))
|
||||||
('(:before . ".")
|
('(:before . ".")
|
||||||
(if (smie-rule-sibling-p)
|
(if (smie-rule-sibling-p)
|
||||||
|
|
|
@ -0,0 +1,18 @@
|
||||||
|
class C
|
||||||
|
def self.foo(
|
||||||
|
baz,
|
||||||
|
bar
|
||||||
|
) =
|
||||||
|
what
|
||||||
|
|
||||||
|
def foo=(
|
||||||
|
baz,
|
||||||
|
bar
|
||||||
|
)
|
||||||
|
hello
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# Local Variables:
|
||||||
|
# ruby-method-params-indent: 0
|
||||||
|
# End:
|
|
@ -538,3 +538,7 @@ def baz.full_name = "#{bar} 3"
|
||||||
baz
|
baz
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Local Variables:
|
||||||
|
# ruby-method-params-indent: t
|
||||||
|
# End:
|
||||||
|
|
|
@ -943,16 +943,20 @@ VALUES-PLIST is a list with alternating index and value elements."
|
||||||
"Blub#bye"
|
"Blub#bye"
|
||||||
"Blub#hiding")))))
|
"Blub#hiding")))))
|
||||||
|
|
||||||
(ert-deftest ruby--indent/converted-from-manual-test ()
|
(defmacro ruby-deftest-indent (file)
|
||||||
:tags '(:expensive-test)
|
`(ert-deftest ,(intern (format "ruby-indent-test/%s" file)) ()
|
||||||
;; Converted from manual test.
|
;; :tags '(:expensive-test)
|
||||||
(let ((buf (find-file-noselect (ert-resource-file "ruby.rb"))))
|
(let ((buf (find-file-noselect (ert-resource-file ,file))))
|
||||||
(unwind-protect
|
(unwind-protect
|
||||||
(with-current-buffer buf
|
(with-current-buffer buf
|
||||||
(let ((orig (buffer-string)))
|
(let ((orig (buffer-string)))
|
||||||
(indent-region (point-min) (point-max))
|
;; Indent and check that we get the original text.
|
||||||
(should (equal (buffer-string) orig))))
|
(indent-region (point-min) (point-max))
|
||||||
(kill-buffer buf))))
|
(should (equal (buffer-string) orig))))
|
||||||
|
(kill-buffer buf)))))
|
||||||
|
|
||||||
|
(ruby-deftest-indent "ruby.rb")
|
||||||
|
(ruby-deftest-indent "ruby-method-params-indent.rb")
|
||||||
|
|
||||||
(ert-deftest ruby--test-chained-indentation ()
|
(ert-deftest ruby--test-chained-indentation ()
|
||||||
(with-temp-buffer
|
(with-temp-buffer
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue