aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDmitry Gutov2012-04-24 12:00:08 -0400
committerStefan Monnier2012-04-24 12:00:08 -0400
commit51a8ea2acf100a3a0ab783632c5fbcdb665a2e14 (patch)
tree7bd18fb78b99187d57975b0d34b236693de4b431
parent85222d4485aaaf5b308859988ac3d06212e6bf3f (diff)
downloademacs-51a8ea2acf100a3a0ab783632c5fbcdb665a2e14.tar.gz
emacs-51a8ea2acf100a3a0ab783632c5fbcdb665a2e14.zip
* lisp/progmodes/ruby-mode.el: Handle Cucumber defs (bug#6286).
(ruby-syntax-propertize-regexp): New function. (ruby-syntax-propertize-function): Use it to handle regexp not preceded by a special keyword.
-rw-r--r--lisp/ChangeLog5
-rw-r--r--lisp/progmodes/ruby-mode.el20
2 files changed, 22 insertions, 3 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 03fbfd83255..2328cf99c1a 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,5 +1,10 @@
12012-04-24 Dmitry Gutov <dgutov@yandex.ru> 12012-04-24 Dmitry Gutov <dgutov@yandex.ru>
2 2
3 * progmodes/ruby-mode.el: Handle Cucumber defs (bug#6286).
4 (ruby-syntax-propertize-regexp): New function.
5 (ruby-syntax-propertize-function): Use it to handle regexp not preceded
6 by a special keyword.
7
3 * progmodes/ruby-mode.el: Handle general delimited literals (bug#6286). 8 * progmodes/ruby-mode.el: Handle general delimited literals (bug#6286).
4 (ruby-syntax-general-delimiters-goto-beg) 9 (ruby-syntax-general-delimiters-goto-beg)
5 (ruby-syntax-propertize-general-delimiters): New functions. 10 (ruby-syntax-propertize-general-delimiters): New functions.
diff --git a/lisp/progmodes/ruby-mode.el b/lisp/progmodes/ruby-mode.el
index 05a4042b67d..8818911159b 100644
--- a/lisp/progmodes/ruby-mode.el
+++ b/lisp/progmodes/ruby-mode.el
@@ -1131,9 +1131,8 @@ See `add-log-current-defun-function'."
1131 (nth 3 (syntax-ppss (match-beginning 0)))) 1131 (nth 3 (syntax-ppss (match-beginning 0))))
1132 (string-to-syntax "\\")))) 1132 (string-to-syntax "\\"))))
1133 ;; regexps 1133 ;; regexps
1134 ("\\(^\\|[[=(,~?:;<>]\\|\\(^\\|\\s \\)\\(if\\|elsif\\|unless\\|while\\|until\\|when\\|and\\|or\\|&&\\|||\\)\\|g?sub!?\\|scan\\|split!?\\)\\s *\\(/\\)[^/\n\\\\]*\\(\\\\.[^/\n\\\\]*\\)*\\(/\\)" 1134 ("\\(^\\|[[=(,~?:;<>]\\|\\(?:^\\|\\s \\)\\(?:if\\|elsif\\|unless\\|while\\|until\\|when\\|and\\|or\\|&&\\|||\\)\\|g?sub!?\\|scan\\|split!?\\)?\\s *\\(/\\)[^/\n\\\\]*\\(?:\\\\.[^/\n\\\\]*\\)*\\(/\\)"
1135 (4 "\"/") 1135 (2 (ruby-syntax-propertize-regexp)))
1136 (6 "\"/"))
1137 ("^=en\\(d\\)\\_>" (1 "!")) 1136 ("^=en\\(d\\)\\_>" (1 "!"))
1138 ("^\\(=\\)begin\\_>" (1 "!")) 1137 ("^\\(=\\)begin\\_>" (1 "!"))
1139 ;; Handle here documents. 1138 ;; Handle here documents.
@@ -1144,6 +1143,21 @@ See `add-log-current-defun-function'."
1144 (1 (prog1 "|" (ruby-syntax-propertize-general-delimiters end))))) 1143 (1 (prog1 "|" (ruby-syntax-propertize-general-delimiters end)))))
1145 (point) end)) 1144 (point) end))
1146 1145
1146 (defun ruby-syntax-propertize-regexp ()
1147 (let ((syn (string-to-syntax "\"/")))
1148 (goto-char (match-end 3))
1149 (if (or
1150 ;; after paren, comma, operator, control flow keyword,
1151 ;; or a method from hardcoded list
1152 (match-beginning 1)
1153 ;; followed by comma or block
1154 (looking-at "[imxo]*\\s *\\(?:,\\|\\<do\\>\\)"))
1155 (progn
1156 (put-text-property (1- (point)) (point)
1157 'syntax-table syn)
1158 syn)
1159 (goto-char (match-end 2)))))
1160
1147 (defun ruby-syntax-propertize-heredoc (limit) 1161 (defun ruby-syntax-propertize-heredoc (limit)
1148 (let ((ppss (syntax-ppss)) 1162 (let ((ppss (syntax-ppss))
1149 (res '())) 1163 (res '()))