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:
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>
|
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).
|
||||||
|
@ -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 /.../.
|
||||||
|
@ -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();
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user