forward-sexp works well with the below code, but when calling treesit-node-prev-sibling it will traverse up the list, which is then breaking backward-up-list when defining forward-sexp in the major mode.
(defun heex--treesit-largest-node-at-point ()
"Find the largest node at point."
(save-excursion
(forward-comment (point-max))
(let ((node-list
(cl-loop for node = (treesit-node-at (point))
then (treesit-node-parent node)
while node
if (eq (treesit-node-start node)
(point))
collect node)))
(car (last node-list)))))
(defun heex--treesit-backward-sexp ()
"Forward sexp for Heex using treesit."
(let* ((largest-node (heex--treesit-largest-node-at-point))
(sibling (treesit-node-prev-sibling largest-node)))
(when sibling
(goto-char (treesit-node-start sibling)))))
(defun heex--treesit-forward-sexp ()
"Forward sexp for Heex using treesit."
(let* ((largest-node (heex--treesit-largest-node-at-point))
(sibling (treesit-node-next-sibling largest-node)))
(when sibling
(goto-char (treesit-node-start sibling))
(forward-comment (- (point-max))))))