Files
neovim/runtime/doc
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
..
2023-07-25 05:07:13 -07:00
2024-04-30 04:30:21 -07:00
2024-05-16 14:29:56 +08:00
2024-05-15 07:18:33 +08:00
2023-10-29 16:02:32 +08:00
2024-05-16 06:28:27 -07:00
2024-05-15 23:19:26 +02:00
2024-05-15 23:19:26 +02:00
2024-04-23 18:17:04 +02:00
2024-05-15 23:19:26 +02:00
2024-05-16 14:34:32 +02:00
2023-04-17 15:46:24 +08:00
2024-04-12 16:56:22 +08:00
2024-05-15 07:18:33 +08:00
2024-05-06 06:43:01 +08:00
2024-04-19 14:49:33 +08:00
2021-09-10 08:48:27 +02:00
2023-06-25 17:14:28 +02:00
2023-10-29 16:02:32 +08:00
2024-04-11 07:39:29 +08:00
2024-05-06 06:43:01 +08:00
2024-04-11 07:39:29 +08:00
2023-05-13 21:33:22 +02:00
2024-05-16 14:34:32 +02:00
2023-12-06 08:04:21 +08:00
2024-05-15 23:19:26 +02:00
2024-03-12 13:51:53 +08:00
2024-02-22 10:07:04 +01:00
2024-03-12 13:51:53 +08:00
2022-10-14 08:01:13 -07:00
2024-01-18 00:14:48 -08:00
2024-05-15 23:19:26 +02:00
2024-05-16 06:28:27 -07:00
2024-05-16 06:28:27 -07:00
2024-04-30 04:30:21 -07:00
2022-12-11 18:41:26 -08:00
2024-04-30 04:30:21 -07:00
2024-04-27 05:52:47 +08:00
2023-11-14 23:29:09 +01:00
2024-05-11 18:14:03 +08:00
2018-10-29 09:55:07 +01:00
2024-05-11 18:14:03 +08:00
2015-08-15 15:25:30 -03:00
2023-11-06 19:03:08 +08:00
2024-01-18 00:14:48 -08:00
2024-04-30 04:30:21 -07:00
2023-01-01 15:05:13 +01:00
2023-06-19 08:40:33 -07:00
2023-09-28 05:22:09 +08:00
2023-11-27 17:43:13 +08:00
2023-06-11 12:40:22 +01:00
2024-04-18 23:39:26 +02:00
2024-05-11 18:14:03 +08:00
2024-05-16 06:07:17 +08:00
2023-08-10 17:28:02 +08:00
2024-04-23 08:20:36 +08:00
2024-04-30 04:30:21 -07:00
2024-05-11 18:14:03 +08:00
2023-04-23 15:22:55 +02:00
2023-08-10 17:28:04 +08:00
2023-01-03 10:07:43 +00:00
2023-06-25 17:14:28 +02:00
2023-06-19 08:40:33 -07:00
2023-06-25 17:14:28 +02:00
2023-07-25 05:07:13 -07:00
2023-06-25 17:14:28 +02:00
2021-05-01 22:29:03 -04:00
2023-06-25 17:14:28 +02:00
2018-10-29 10:01:44 +01:00
2021-04-29 09:27:19 -04:00
2023-06-25 17:14:28 +02:00
2023-06-26 11:29:12 +02:00
2024-04-30 05:54:03 +08:00
2021-04-29 20:42:16 -04:00
2023-06-26 11:29:12 +02:00
2024-04-27 05:52:15 +08:00
2023-07-25 05:07:13 -07:00
2021-04-27 09:21:34 -04:00
2023-06-19 08:40:33 -07:00
2023-01-03 10:07:43 +00:00
2023-06-25 17:14:28 +02:00
2024-04-30 07:04:42 +08:00