mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2025-01-15 17:00:26 +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:
parent
46d40398fc
commit
29c5e2cea2
@ -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>
|
||||
|
||||
* 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();
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user