[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#68824: treesitter support for outline-minor-mode
From: |
Juri Linkov |
Subject: |
bug#68824: treesitter support for outline-minor-mode |
Date: |
Thu, 01 Feb 2024 19:12:17 +0200 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/30.0.50 (x86_64-pc-linux-gnu) |
Yuan, do you think it makes sense to add a new optional arg to
'treesit-search-forward' that will define the traversal order?
The problem is that to search the next outline heading in
outline-minor-mode, there is a need to visit headings in
the same order as they appear in the buffer
where a parent is located before its children:
* Parent
** Child 1
** Child 2
Currently 'treesit-search-forward' returns "Child 1" before "Parent".
This means that 'treesit-search-forward' should return the
topmost matched parent instead of starting to traverse children
from the deepest leaf.
IOW, it's necessary to traverse nodes in this order:
o
|
ะพ---------------------11
| |
o--------S----------3 12
| | |
o--o-+--o 1--+--2 4--+-----7
| | | |
o o +-+-+ +--+--+
| | | | |
5 6 8 9 10
Please note there is no 11 or 12 at the parent of S node because
it should traverse only the remaining siblings of the parent.
This is because remaining parent siblings have treesit-node-start
positions greater than treesit-node-start of S node.
> +(defun treesit-outline-search (&optional bound move backward looking-at)
> + (let* ((current (treesit-node-at (pos-bol)))
> + (current (or (treesit-parent-until current
> treesit-outline-predicate)
> + current))
> + (node (treesit-search-forward
> + current treesit-outline-predicate backward))
- bug#68824: treesitter support for outline-minor-mode,
Juri Linkov <=