Ignore comments and strings when matching JSX

* lisp/progmodes/js.el (js-jsx--matching-close-tag-pos): Ignore
comments and strings.
* test/manual/indent/jsx-comment-string.jsx: New test.
parent c299c9b6
Pipeline #4266 failed with stage
in 55 minutes and 57 seconds
......@@ -2059,24 +2059,26 @@ 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)))
(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.
......
......@@ -14,3 +14,10 @@ void 0
"<Bar>"
void 0
<Chicken>
{/* <Pork> */}
<Beef attr="<Turkey>">
Yum!
</Beef>
</Chicken>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment