Function: js-jsx--matching-close-tag-pos
js-jsx--matching-close-tag-pos is a byte-compiled function defined in
js.el.gz.
Signature
(js-jsx--matching-close-tag-pos)
Documentation
Return position of the closer of the opener before point.
Assuming a JSXOpeningElement or a JSXOpeningFragment is immediately before point, find a matching JSXClosingElement or JSXClosingFragment, skipping over any nested JSXElements to find the match. Return nil if a match can’t be found.
Source Code
;; Defined in /usr/src/emacs/lisp/progmodes/js.el.gz
(defun js-jsx--matching-close-tag-pos ()
"Return position of the closer of the opener before point.
Assuming a JSXOpeningElement or a JSXOpeningFragment is
immediately before point, find a matching JSXClosingElement or
JSXClosingFragment, skipping over any nested JSXElements to find
the match. Return nil if a match can’t be found."
(let ((tag-stack 1) tag-pos type last-pos pos)
(catch 'stop
(while (and (re-search-forward "<\\s-*" nil t) (not (eobp)))
;; Not inside a comment or string.
(unless (nth 8 (save-excursion (syntax-ppss (match-beginning 0))))
(when (setq tag-pos (match-beginning 0)
type (js-jsx--matched-tag-type))
(when last-pos
(setq pos (point))
(goto-char last-pos)
(while (re-search-forward js-jsx--self-closing-re pos 'move)
(setq tag-stack (1- tag-stack))))
(if (eq type 'close)
(progn
(setq tag-stack (1- tag-stack))
(when (= tag-stack 0)
(throw 'stop tag-pos)))
;; JSXOpeningElements that we know are self-closing
;; aren’t added to the stack at all (because point is
;; already past that syntax).
(unless (eq type 'self-closing)
(setq tag-stack (1+ tag-stack))))
(setq last-pos (point))))))))