summaryrefslogtreecommitdiff
path: root/lisp/progmodes/ruby-mode.el
diff options
context:
space:
mode:
Diffstat (limited to 'lisp/progmodes/ruby-mode.el')
-rw-r--r--lisp/progmodes/ruby-mode.el12
1 files changed, 10 insertions, 2 deletions
diff --git a/lisp/progmodes/ruby-mode.el b/lisp/progmodes/ruby-mode.el
index 75c59ebe1fd..1c9663cc22c 100644
--- a/lisp/progmodes/ruby-mode.el
+++ b/lisp/progmodes/ruby-mode.el
@@ -393,7 +393,12 @@ explicitly declared in magic comment."
(let ((pos (point)))
(skip-chars-forward " \t")
(cond
- ((looking-at "\\s\"") "") ;A heredoc or a string.
+ ((looking-at "\\s\"") ;A heredoc or a string.
+ (if (not (looking-at "\n"))
+ ""
+ ;; Tokenize the whole heredoc as semicolon.
+ (goto-char (scan-sexps (point) 1))
+ ";"))
((and (looking-at "[\n#]")
(ruby-smie--implicit-semi-p)) ;Only add implicit ; when needed.
(if (eolp) (forward-char 1) (forward-comment 1))
@@ -435,7 +440,10 @@ explicitly declared in magic comment."
(cond
((and (> pos (line-end-position)) (ruby-smie--implicit-semi-p))
(skip-chars-forward " \t") ";")
- ((and (bolp) (not (bobp))) "") ;Presumably a heredoc.
+ ((and (bolp) (not (bobp))) ;Presumably a heredoc.
+ ;; Tokenize the whole heredoc as semicolon.
+ (goto-char (scan-sexps (point) -1))
+ ";")
((and (> pos (point)) (not (bolp))
(ruby-smie--args-separator-p pos))
;; We have "ID SPC ID", which is a method call, but it binds less tightly