[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] master 29c5e2c: (js-syntax-propertize-regexp): Recognize "
From: |
Stefan Monnier |
Subject: |
[Emacs-diffs] master 29c5e2c: (js-syntax-propertize-regexp): Recognize "slash in a character class" |
Date: |
Tue, 23 Dec 2014 16:18:05 +0000 |
branch: master
commit 29c5e2cea22f909af7d33b290ca0eb23c5ad6c00
Author: Stefan Monnier <address@hidden>
Commit: Stefan Monnier <address@hidden>
(js-syntax-propertize-regexp): Recognize "slash in a character class"
Fixes: debbugs:19397
* lisp/progmodes/js.el (js--syntax-propertize-regexp-syntax-table): New var.
(js-syntax-propertize-regexp): Use it to recognize "slash in
a character class".
---
lisp/ChangeLog | 6 ++++++
lisp/progmodes/js.el | 27 ++++++++++++++++++++++-----
test/indent/js.js | 5 +++++
3 files changed, 33 insertions(+), 5 deletions(-)
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index d8bb1c8..12430b6 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,9 @@
+2014-12-23 Stefan Monnier <address@hidden>
+
+ * progmodes/js.el (js--syntax-propertize-regexp-syntax-table): New var.
+ (js-syntax-propertize-regexp): Use it to recognize "slash in
+ a character class" (bug#19397).
+
2014-12-22 Stefan Monnier <address@hidden>
* completion.el: Use post-self-insert-hook (bug#19400).
diff --git a/lisp/progmodes/js.el b/lisp/progmodes/js.el
index c2c45aa..45074d3 100644
--- a/lisp/progmodes/js.el
+++ b/lisp/progmodes/js.el
@@ -1637,12 +1637,29 @@ This performs fontification according to
`js--class-styles'."
js--font-lock-keywords-3)
"Font lock keywords for `js-mode'. See `font-lock-keywords'.")
+(defconst js--syntax-propertize-regexp-syntax-table
+ (let ((st (make-char-table 'syntax-table (string-to-syntax "."))))
+ (modify-syntax-entry ?\[ "(]" st)
+ (modify-syntax-entry ?\] ")[" st)
+ (modify-syntax-entry ?\\ "\\" st)
+ st))
+
(defun js-syntax-propertize-regexp (end)
- (when (eq (nth 3 (syntax-ppss)) ?/)
- ;; A /.../ regexp.
- (when (re-search-forward "\\(?:\\=\\|[^\\]\\)\\(?:\\\\\\\\\\)*/" end 'move)
- (put-text-property (1- (point)) (point)
- 'syntax-table (string-to-syntax "\"/")))))
+ (let ((ppss (syntax-ppss)))
+ (when (eq (nth 3 ppss) ?/)
+ ;; A /.../ regexp.
+ (while
+ (when (re-search-forward "\\(?:\\=\\|[^\\]\\)\\(?:\\\\\\\\\\)*/"
+ end 'move)
+ (if (nth 1 (with-syntax-table
+ js--syntax-propertize-regexp-syntax-table
+ (let ((parse-sexp-lookup-properties nil))
+ (parse-partial-sexp (nth 8 ppss) (point)))))
+ ;; A / within a character class is not the end of a regexp.
+ t
+ (put-text-property (1- (point)) (point)
+ 'syntax-table (string-to-syntax "\"/"))
+ nil))))))
(defun js-syntax-propertize (start end)
;; Javascript allows immediate regular expression objects, written /.../.
diff --git a/test/indent/js.js b/test/indent/js.js
index 1924094..2d458e1 100644
--- a/test/indent/js.js
+++ b/test/indent/js.js
@@ -7,6 +7,11 @@ let c = 1,
var e = 100500,
+ 1;
+function test ()
+{
+ return /[/]/.test ('/') // (bug#19397)
+}
+
var f = bar('/protocols/')
baz();
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] master 29c5e2c: (js-syntax-propertize-regexp): Recognize "slash in a character class",
Stefan Monnier <=