]> git.eshelyaron.com Git - emacs.git/commitdiff
Simplify ruby--string-region
authorBozhidar Batsov <bozhidar@tradeo.com>
Mon, 22 Dec 2014 15:03:32 +0000 (17:03 +0200)
committerBozhidar Batsov <bozhidar@tradeo.com>
Mon, 22 Dec 2014 15:03:32 +0000 (17:03 +0200)
* progmodes/ruby-mode.el (ruby--string-region): Simplify code
by leveraging `syntax-ppss'.

lisp/ChangeLog
lisp/progmodes/ruby-mode.el

index 37fbc6a51857ec4ea0423dc3ce99767b8539c0f7..484ac1afada0581ff0e2020b64e7ec7c0752763c 100644 (file)
@@ -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'.
index 225f1f626730a98c8bcde70f802b7b8ffc7285e7..bf0884f35601fb7e76ac00029123d95c5adb8601 100644 (file)
@@ -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."