summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Gutov <dgutov@yandex.ru>2014-05-06 03:18:18 +0400
committerDmitry Gutov <dgutov@yandex.ru>2014-05-06 03:18:18 +0400
commit4dd3c4d53af81b017363cb778ac6fd5abea2d132 (patch)
treefafb9f8f9a770822ffac65fe5f1aa9f9c20992c0
parent6da8d069757fd26ee537704a9f0dea24dc5e00b8 (diff)
downloademacs-4dd3c4d53af81b017363cb778ac6fd5abea2d132.tar.gz
* lisp/progmodes/ruby-mode.el (ruby-syntax-propertize-function):
Backtrack one char if the global/char-literal var matcher hits inside a string. The next char could be the beginning of an expression expansion. * test/automated/ruby-mode-tests.el (ruby-interpolation-after-dollar-sign): New test.
-rw-r--r--lisp/ChangeLog7
-rw-r--r--lisp/progmodes/ruby-mode.el7
-rw-r--r--test/ChangeLog5
-rw-r--r--test/automated/ruby-mode-tests.el4
4 files changed, 20 insertions, 3 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 3bbacb85e97..7c838a61fe5 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,10 @@
+2014-05-05 Dmitry Gutov <dgutov@yandex.ru>
+
+ * progmodes/ruby-mode.el (ruby-syntax-propertize-function):
+ Backtrack one char if the global/char-literal var matcher hits
+ inside a string. The next char could be the beginning of an
+ expression expansion.
+
2014-05-05 Glenn Morris <rgm@gnu.org>
* help-fns.el (describe-function-1): Test for an autoload before a
diff --git a/lisp/progmodes/ruby-mode.el b/lisp/progmodes/ruby-mode.el
index 912736707ef..74edf7a680f 100644
--- a/lisp/progmodes/ruby-mode.el
+++ b/lisp/progmodes/ruby-mode.el
@@ -1804,9 +1804,10 @@ It will be properly highlighted even when the call omits parens.")
;; $' $" $` .... are variables.
;; ?' ?" ?` are character literals (one-char strings in 1.9+).
("\\([?$]\\)[#\"'`]"
- (1 (unless (save-excursion
- ;; Not within a string.
- (nth 3 (syntax-ppss (match-beginning 0))))
+ (1 (if (save-excursion
+ (nth 3 (syntax-ppss (match-beginning 0))))
+ ;; Within a string, skip.
+ (goto-char (match-end 1))
(string-to-syntax "\\"))))
;; Part of symbol when at the end of a method name.
("[!?]"
diff --git a/test/ChangeLog b/test/ChangeLog
index a02b8e80395..0a3e89e7385 100644
--- a/test/ChangeLog
+++ b/test/ChangeLog
@@ -1,3 +1,8 @@
+2014-05-05 Dmitry Gutov <dgutov@yandex.ru>
+
+ * automated/ruby-mode-tests.el
+ (ruby-interpolation-after-dollar-sign): New test.
+
2014-05-05 Glenn Morris <rgm@gnu.org>
* automated/help-fns.el: New file.
diff --git a/test/automated/ruby-mode-tests.el b/test/automated/ruby-mode-tests.el
index f6fddb5ef4c..0ad5650cd77 100644
--- a/test/automated/ruby-mode-tests.el
+++ b/test/automated/ruby-mode-tests.el
@@ -452,6 +452,10 @@ VALUES-PLIST is a list with alternating index and value elements."
(ruby-assert-face "%w{foo #@bar}" 8 font-lock-string-face)
(ruby-assert-face "%s{foo #@bar}" 8 font-lock-string-face))
+(ert-deftest ruby-interpolation-after-dollar-sign ()
+ (ruby-assert-face "\"$#{balance}\"" 2 'font-lock-string-face)
+ (ruby-assert-face "\"$#{balance}\"" 3 'font-lock-variable-name-face))
+
(ert-deftest ruby-no-unknown-percent-literals ()
;; No folding of case.
(ruby-assert-face "%S{foo}" 4 nil)