Skip to content

Commit

Permalink
ruby-mode.el: squiggly heredoc
Browse files Browse the repository at this point in the history
* misc/ruby-mode.el (ruby-here-doc-beg-re),
  (ruby-here-doc-beg-match, ruby-parse-partial): Support for
  `squiggly heredoc' syntax in ruby-mode.  [Fix rubyGH-1372]

git-svn-id: svn+ssh://svn.ruby-lang.org/ruby/trunk@55259 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
  • Loading branch information
nobu committed Jun 2, 2016
1 parent 6f54f34 commit 7862751
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 4 deletions.
6 changes: 6 additions & 0 deletions ChangeLog
@@ -1,3 +1,9 @@
Thu Jun 2 16:51:35 2016 Koichi ITO <koic.ito@gmail.com>

* misc/ruby-mode.el (ruby-here-doc-beg-re),
(ruby-here-doc-beg-match, ruby-parse-partial): Support for
`squiggly heredoc' syntax in ruby-mode. [Fix GH-1372]

Thu Jun 2 10:24:48 2016 Martin Duerst <duerst@it.aoyama.ac.jp>

* string.c: Raise ArgumentError when invalid string is detected in
Expand Down
8 changes: 4 additions & 4 deletions misc/ruby-mode.el
Expand Up @@ -107,7 +107,7 @@
(defconst ruby-block-end-re "\\_<end\\_>")

(defconst ruby-here-doc-beg-re
"\\(<\\)<\\(-\\)?\\(\\([a-zA-Z0-9_]+\\)\\|[\"]\\([^\"]+\\)[\"]\\|[']\\([^']+\\)[']\\)")
"\\(<\\)<\\([-~]\\)?\\(\\([a-zA-Z0-9_]+\\)\\|[\"]\\([^\"]+\\)[\"]\\|[']\\([^']+\\)[']\\)")

(defconst ruby-here-doc-end-re
"^\\([ \t]+\\)?\\(.*\\)\\(.\\)$")
Expand All @@ -127,9 +127,9 @@
(concat "<<"
(let ((match (match-string 1)))
(if (and match (> (length match) 0))
(concat "\\(?:-\\([\"']?\\)\\|\\([\"']\\)" (match-string 1) "\\)"
(concat "\\(?:[-~]\\([\"']?\\)\\|\\([\"']\\)" (match-string 1) "\\)"
contents "\\(\\1\\|\\2\\)")
(concat "-?\\([\"']\\|\\)" contents "\\1"))))))
(concat "[-~]?\\([\"']\\|\\)" contents "\\1"))))))

(defconst ruby-delimiter
(concat "[?$/%(){}#\"'`.:]\\|<<\\|\\[\\|\\]\\|\\_<\\("
Expand Down Expand Up @@ -679,7 +679,7 @@ Emacs to Ruby."
((looking-at "<<")
(cond
((and (ruby-expr-beg 'heredoc)
(looking-at "<<\\(-\\)?\\(\\([\"'`]\\)\\([^\n]+?\\)\\3\\|\\(?:\\sw\\|\\s_\\)+\\)"))
(looking-at "<<\\([-~]\\)?\\(\\([\"'`]\\)\\([^\n]+?\\)\\3\\|\\(?:\\sw\\|\\s_\\)+\\)"))
(setq re (regexp-quote (or (match-string 4) (match-string 2))))
(if (match-beginning 1) (setq re (concat "\\s *" re)))
(let* ((id-end (goto-char (match-end 0)))
Expand Down

0 comments on commit 7862751

Please sign in to comment.