Commit 29c5e2ce authored by Stefan Monnier's avatar Stefan Monnier
Browse files

(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".
parent 46d40398
2014-12-23 Stefan Monnier <monnier@iro.umontreal.ca>
* 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 <monnier@iro.umontreal.ca>
* completion.el: Use post-self-insert-hook (bug#19400).
......
......@@ -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 /.../.
......
......@@ -7,6 +7,11 @@ let c = 1,
var e = 100500,
+ 1;
function test ()
{
return /[/]/.test ('/') // (bug#19397)
}
var f = bar('/protocols/')
baz();
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment