Subject: bug#77256: Treesit language-at-point

From: Juri Linkov <[email-masked]>
Date: Sat, 05 Apr 2025 21:35:54 +0300

> Unfortunately, I discovered that it causes treesit-node-outdated errors.
>
> This is because overlays are updated by 'pre-redisplay-functions'
> later than outline-minor-mode uses them by 'after-change-functions',
> since 'after-change-functions' runs before 'pre-redisplay-functions'.

This fixes the problem:

   (defun outline--fix-buttons-after-change (beg end _len)
  +  (when (fboundp 'treesit-update-ranges)
  +    (treesit-update-ranges beg end))
     ;; Handle whole lines
     (save-excursion (goto-char beg) (setq beg (pos-bol)))
     (save-excursion (goto-char end) (setq end (pos-eol)))

But can we do better?  I see that 'treesit-major-mode-setup'
adds the notifier

      (treesit-parser-add-notifier
       treesit-primary-parser #'treesit--font-lock-mark-ranges-to-fontify)

to 'after_change_functions'.  But why the treesit
'after_change_functions' notifier is called after the
'after-change-functions' hook?  Can we change their order?