Files
neovim/runtime
vanaigr 4b02916334 perf(treesitter): use child_containing_descendant() in has-ancestor? (#28512)
Problem: `has-ancestor?` is O(n²) for the depth of the tree since it iterates over each of the node's ancestors (bottom-up), and each ancestor takes O(n) time.
This happens because tree-sitter's nodes don't store their parent nodes, and the tree is searched (top-down) each time a new parent is requested.

Solution: Make use of new `ts_node_child_containing_descendant()` in tree-sitter v0.22.6 (which is now the minimum required version) to rewrite the `has-ancestor?` predicate in C to become O(n).

For a sample file, decreases the time taken by `has-ancestor?` from 360ms to 6ms.
2024-05-16 16:57:58 +02:00
..
2024-05-14 08:27:17 +02:00
2024-04-27 11:01:14 +02:00
2024-05-14 08:27:30 +02:00
2023-11-05 21:56:56 +01:00
2024-02-16 08:57:45 +01:00
2024-03-24 10:32:07 +01:00
2024-05-09 00:15:08 +02:00
2024-05-05 23:22:11 +02:00
2024-05-14 08:27:17 +02:00
2022-08-20 10:04:55 +02:00
2024-03-28 09:32:32 +08:00
2024-02-01 12:06:55 +01:00
2023-08-13 13:25:10 +01:00
2023-08-13 13:25:10 +01:00
2023-08-13 13:25:10 +01:00
2023-08-13 13:25:10 +01:00
2023-08-13 13:25:10 +01:00
2023-08-13 13:25:10 +01:00
2023-08-24 11:33:06 +09:00
2024-03-14 15:04:31 +08:00
2024-05-16 14:34:32 +02:00