From: Bozhidar Batsov <bozhidar@tradeo.com>
Date: Mon, 22 Dec 2014 15:03:32 +0000 (+0200)
Subject: Simplify ruby--string-region
X-Git-Tag: emacs-25.0.90~2635^2~3
X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=fafba80d7353f4ab5c359df75798f8130599371a;p=emacs.git

Simplify ruby--string-region

* progmodes/ruby-mode.el (ruby--string-region): Simplify code
by leveraging `syntax-ppss'.
---

diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 37fbc6a5185..484ac1afada 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,8 @@
+2014-12-22  Bozhidar Batsov  <bozhidar@batsov.com>
+
+	* progmodes/ruby-mode.el (ruby--string-region): Simplify code
+	by leveraging `syntax-ppss'.
+
 2014-12-22  Artur Malabarba  <bruce.connor.am@gmail.com>
 
 	* let-alist.el (let-alist): Use `make-symbol' instead of `gensym'.
diff --git a/lisp/progmodes/ruby-mode.el b/lisp/progmodes/ruby-mode.el
index 225f1f62673..bf0884f3560 100644
--- a/lisp/progmodes/ruby-mode.el
+++ b/lisp/progmodes/ruby-mode.el
@@ -1768,17 +1768,12 @@ If the result is do-end block, it will always be multiline."
 
 (defun ruby--string-region ()
   "Return region for string at point."
-  (let ((orig-point (point)) (regex "'\\(\\(\\\\'\\)\\|[^']\\)*'\\|\"\\(\\(\\\\\"\\)\\|[^\"]\\)*\"") beg end)
-    (save-excursion
-      (goto-char (line-beginning-position))
-      (while (and (re-search-forward regex (line-end-position) t) (not (and beg end)))
-        (let ((match-beg (match-beginning 0)) (match-end (match-end 0)))
-          (when (and
-                 (> orig-point match-beg)
-                 (< orig-point match-end))
-            (setq beg match-beg)
-            (setq end match-end))))
-      (and beg end (list beg end)))))
+  (let ((state (syntax-ppss)))
+    (when (memq (nth 3 state) '(?' ?\"))
+      (save-excursion
+        (goto-char (nth 8 state))
+        (forward-sexp)
+        (list (nth 8 state) (point))))))
 
 (defun ruby-string-at-point-p ()
   "Check if cursor is at a string or not."