Fix bug#16609
authorDmitry Gutov <dgutov@yandex.ru>
Sat, 1 Feb 2014 14:54:58 +0000 (16:54 +0200)
committerDmitry Gutov <dgutov@yandex.ru>
Sat, 1 Feb 2014 14:54:58 +0000 (16:54 +0200)
* lisp/progmodes/ruby-mode.el (ruby-smie--implicit-semi-p): Check for
`:' before binary operators.  Don't check for `:'
before `[' and `(', or their syntax status.  A percent literal
can't end with either.

lisp/ChangeLog
lisp/progmodes/ruby-mode.el
test/indent/ruby.rb

index 91b9aff..4903bfd 100644 (file)
@@ -1,3 +1,10 @@
+2014-02-01  Dmitry Gutov  <dgutov@yandex.ru>
+
+       * progmodes/ruby-mode.el (ruby-smie--implicit-semi-p): Check for
+       `:' before binary operators (bug#16609).  Don't check for `:'
+       before `[' and `(', or their syntax status.  A percent literal
+       can't end with either.
+
 2014-02-01  Lars Ingebrigtsen  <larsi@gnus.org>
 
        * subr.el (butlast): Document what an omitted N means (bug#13437).
index 1bce911..5cee77b 100644 (file)
@@ -422,14 +422,17 @@ It is used when `ruby-encoding-magic-comment-style' is set to `custom'."
   (save-excursion
     (skip-chars-backward " \t")
     (not (or (bolp)
+             (memq (char-before) '(?\[ ?\())
              (and (memq (char-before)
-                        '(?\; ?- ?+ ?* ?/ ?: ?. ?, ?\[ ?\( ?\\ ?& ?> ?< ?%
-                          ?~ ?^))
+                        '(?\; ?- ?+ ?* ?/ ?: ?. ?, ?\\ ?& ?> ?< ?% ?~ ?^))
+                  ;; Not a binary operator symbol.
+                  (not (eq (char-before (1- (point))) ?:))
                   ;; Not the end of a regexp or a percent literal.
                   (not (memq (car (syntax-after (1- (point)))) '(7 15))))
              (and (eq (char-before) ?\?)
                   (equal (save-excursion (ruby-smie--backward-token)) "?"))
              (and (eq (char-before) ?=)
+                  ;; Not a symbol :==, :!=, or a foo= method.
                   (string-match "\\`\\s." (save-excursion
                                             (ruby-smie--backward-token))))
              (and (eq (char-before) ?|)
index 49ed92f..cf6bcba 100644 (file)
@@ -135,6 +135,13 @@ end
 # Bug#15208
 if something == :==
   do_something
+
+  return false unless method == :+
+  x = y + z # Bug#16609
+
+  a = 1 ? 2 :(
+    2 + 3
+  )
 end
 
 # Example from http://www.ruby-doc.org/docs/ProgrammingRuby/html/language.html