Identify JSX strings (for js2-mode)

* lisp/progmodes/js.el (js-jsx--syntax-propertize-tag): Derived modes
like js2-mode may use font-lock-syntactic-face-function to apply faces
to JSX strings (and only JSX strings).  Apply the js-jsx-string text
property to such strings so they can be distinctly identified.
(js-jsx--text-properties): Ensure the js-jsx-string text property gets
cleaned up, too.
This commit is contained in:
Jackson Ray Hamilton 2019-04-08 07:47:37 -07:00
parent e48306f84f
commit 3eadf1eff4
No known key found for this signature in database
GPG key ID: B4771664B476B290

View file

@ -2165,9 +2165,14 @@ testing for syntax only valid as JSX."
;; JSXExpressionContainer here will be parsed in the
;; next iteration of the loop.
(if (memq (char-after) '(?\" ?\' ?\`))
(condition-case nil
(forward-sexp)
(scan-error (throw 'stop nil)))
(progn
;; Record the strings position so derived modes
;; applying syntactic fontification atypically
;; (e.g. js2-mode) can recognize it as part of JSX.
(put-text-property (point) (1+ (point)) 'js-jsx-string t)
(condition-case nil
(forward-sexp)
(scan-error (throw 'stop nil))))
;; Save JSXAttributes beginning in case we find a
;; JSXExpressionContainer as the JSXAttributes value which
;; we should associate with the JSXAttribute.
@ -2195,7 +2200,7 @@ testing for syntax only valid as JSX."
(defconst js-jsx--text-properties
(list
'js-jsx-tag-beg nil 'js-jsx-tag-end nil 'js-jsx-close-tag-pos nil
'js-jsx-tag-name nil 'js-jsx-attribute-name nil
'js-jsx-tag-name nil 'js-jsx-attribute-name nil 'js-jsx-string nil
'js-jsx-text nil 'js-jsx-expr nil 'js-jsx-expr-attribute nil)
"Plist of text properties added by `js-syntax-propertize'.")