(let ((tag-stack 1) tag-pos type last-pos pos)
(catch 'stop
(while (and (re-search-forward "<\\s-*" nil t) (not (eobp)))
- (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)))))))
+ ;; 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))))))))
(defun js-jsx--enclosing-tag-pos ()
"Return beginning and end of a JSXElement about point.