1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2025-01-16 17:19:41 +00:00

(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".
This commit is contained in:
Stefan Monnier 2014-12-23 11:17:55 -05:00
parent 46d40398fc
commit 29c5e2cea2
3 changed files with 33 additions and 5 deletions

View File

@ -1,3 +1,9 @@
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> 2014-12-22 Stefan Monnier <monnier@iro.umontreal.ca>
* completion.el: Use post-self-insert-hook (bug#19400). * completion.el: Use post-self-insert-hook (bug#19400).

View File

@ -1637,12 +1637,29 @@ This performs fontification according to `js--class-styles'."
js--font-lock-keywords-3) js--font-lock-keywords-3)
"Font lock keywords for `js-mode'. See `font-lock-keywords'.") "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) (defun js-syntax-propertize-regexp (end)
(when (eq (nth 3 (syntax-ppss)) ?/) (let ((ppss (syntax-ppss)))
;; A /.../ regexp. (when (eq (nth 3 ppss) ?/)
(when (re-search-forward "\\(?:\\=\\|[^\\]\\)\\(?:\\\\\\\\\\)*/" end 'move) ;; A /.../ regexp.
(put-text-property (1- (point)) (point) (while
'syntax-table (string-to-syntax "\"/"))))) (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) (defun js-syntax-propertize (start end)
;; Javascript allows immediate regular expression objects, written /.../. ;; Javascript allows immediate regular expression objects, written /.../.

View File

@ -7,6 +7,11 @@ let c = 1,
var e = 100500, var e = 100500,
+ 1; + 1;
function test ()
{
return /[/]/.test ('/') // (bug#19397)
}
var f = bar('/protocols/') var f = bar('/protocols/')
baz(); baz();