Function: js-jsx--enclosing-tag-pos
js-jsx--enclosing-tag-pos is a byte-compiled function defined in
js.el.gz.
Signature
(js-jsx--enclosing-tag-pos)
Documentation
Return beginning and end of a JSXElement about point.
Look backward for a JSXElement that both starts before point and also ends at/after point. That may be either a self-closing JSXElement or a JSXOpeningElement/JSXClosingElement pair.
Source Code
;; Defined in /usr/src/emacs/lisp/progmodes/js.el.gz
(defun js-jsx--enclosing-tag-pos ()
"Return beginning and end of a JSXElement about point.
Look backward for a JSXElement that both starts before point and
also ends at/after point. That may be either a self-closing
JSXElement or a JSXOpeningElement/JSXClosingElement pair."
(let ((start (point)) tag-beg tag-beg-pos tag-end-pos close-tag-pos)
(while
(and
(setq tag-beg (js--backward-text-property 'js-jsx-tag-beg))
(progn
(setq tag-beg-pos (point)
tag-end-pos (cdr tag-beg))
(not
(or
(and (eq (car tag-beg) 'self-closing)
(< start tag-end-pos))
(and (eq (car tag-beg) 'open)
(or (< start tag-end-pos)
(progn
(unless
;; Try to read a cached close position,
;; but it might not be available yet.
(setq close-tag-pos
(get-text-property (point) 'js-jsx-close-tag-pos))
(save-excursion
(goto-char tag-end-pos)
(setq close-tag-pos (js-jsx--matching-close-tag-pos)))
(when close-tag-pos
;; Cache the close position to make future
;; searches faster.
(put-text-property
(point) (1+ (point))
'js-jsx-close-tag-pos close-tag-pos)))
;; The JSXOpeningElement may be unclosed, else
;; the closure must occur at/after the start
;; point (otherwise, a miscellaneous previous
;; JSXOpeningElement has been found, so keep
;; looking backwards for an enclosing one).
(or (not close-tag-pos) (<= start close-tag-pos)))))))))
;; Don’t return the last tag pos, as it wasn’t enclosing.
(setq tag-beg nil close-tag-pos nil))
(and tag-beg (list tag-beg-pos tag-end-pos close-tag-pos))))