(or (treesit-node-prev-sibling node t)
(treesit-node-prev-sibling
(treesit-node-first-child-for-pos parent bol) t)
- (treesit-node-child parent -1 t))))
- (while (and prev-sibling
- (equal "labeled_statement"
- (treesit-node-type prev-sibling)))
- ;; The 0th child is the label, the 1th the colon.
- (setq prev-sibling (treesit-node-child prev-sibling 2)))
+ (treesit-node-child parent -1 t)))
+ (continue t))
+ (while (and prev-sibling continue)
+ (pcase (treesit-node-type prev-sibling)
+ ;; Get the statement in the label.
+ ("labeled_statement"
+ (setq prev-sibling (treesit-node-child prev-sibling 2)))
+ ;; Get the last statement in the preproc. Tested by
+ ;; "Prev-Sibling When Prev-Sibling is Preproc" test.
+ ((or "preproc_if" "preproc_ifdef" "preproc_elif" "preproc_else")
+ (setq prev-sibling (treesit-node-child prev-sibling -2)))
+ ;; Don't do anything special.
+ (_ (setq continue nil))))
;; This could be nil if a) there is no prev-sibling or b)
;; prev-sibling doesn't have a child.
(treesit-node-start prev-sibling)))