From: Bozhidar Batsov 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 + + * progmodes/ruby-mode.el (ruby--string-region): Simplify code + by leveraging `syntax-ppss'. + 2014-12-22 Artur Malabarba * 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."